我正在尝试使用AUSampler audio unit
在sf2文件的帮助下播放midi音符。我可以使用MusicDeviceMIDIEvent
函数开始和停止音符,如下所示。
noteCommand = kMIDIMessage_NoteOn << 4 | 0;
MusicDeviceMIDIEvent (samplerUnit, noteCommand, note, velocity, 0);
即使我没有使用NoteOff消息调用MusicDeviceMIDIEvent
函数,音符也会在一段时间后停止。
在我用NoteOff调用MusicDeviceMIDIEvent
之前,有没有办法让这个音符播放?或者sf2文件是否应该以不同的方式创建,以便它包含用于音符攻击,音符延音等的不同声音文件,并且AUSampler
单元会自动负责播放延音,直到调用NoteOff?
感谢。
答案 0 :(得分:1)
如果您使用这些文件,则需要在sf2文件或AUPreset中进行设置。对于AUPresets,这是Apple的Tech Note TN2283:
使用Region List属性指定循环 (kAudioFilePropertyRegionList)描述一段循环音频 数据,可以使用AudioFileSetProperty API进行设置。
这是使用Garageband设置循环AUSampler的long tutorial。 AU实验室也可以生成AUPresets。
对于sf2,显示如何设置循环的youtube视频。不清楚他正在使用什么软件。如果您有冒险精神,可以尝试为OSX构建开源Swami