iOS AUSampler 连续播放 MIDI 音符
Posted
技术标签:
【中文标题】iOS AUSampler 连续播放 MIDI 音符【英文标题】:iOS AUSampler Play midi note continuously 【发布时间】:2014-01-18 12:18:06 【问题描述】:我正在尝试使用AUSampler audio unit
在 sf2 文件的帮助下播放 MIDI 音符。我能够使用MusicDeviceMIDIEvent
函数很好地开始和停止笔记,如下所示。
noteCommand = kMIDIMessage_NoteOn << 4 | 0;
MusicDeviceMIDIEvent (samplerUnit, noteCommand, note, velocity, 0);
即使我没有使用 NoteOff 消息调用 MusicDeviceMIDIEvent
函数,该注释也会在某个时间后停止。
在我用 NoteOff 调用 MusicDeviceMIDIEvent
之前,有什么方法可以播放这个音符?还是应该以不同的方式创建 sf2 文件,以便它包含用于音符攻击、音符延音等的不同声音文件,并且 AUSampler
单元会自动处理播放延音直到调用 NoteOff?
谢谢。
【问题讨论】:
【参考方案1】:如果你使用它们,你需要在你的 sf2 文件或 AUPreset 中设置它。对于 AUPresets,这里是 Apple 的Tech Note TN2283:
使用区域列表属性指定循环 (kAudioFilePropertyRegionList) 描述一段循环音频 数据,并且可以使用 AudioFileSetProperty API 进行设置。
这是一个long tutorial,关于使用 Garageband 设置循环 AUSampler。 AU Lab 也可以生成 AUPresets。
对于 sf2,youtube 视频展示了如何设置循环。不清楚他用的是什么软件。如果您喜欢冒险,可以尝试为 OSX 构建开源 Swami
【讨论】:
非常感谢汤姆!我将尝试获取 sf2 指定循环区域并查看。 我在采样器单元的属性下找到了这个“kAUGroupParameterID_Sustain”参数..这有什么帮助吗? 我试过设置这个参数。AudioUnitSetParameter(auSamplerUnit, kAUGroupParameterID_Volume, kAudioUnitScope_Global, 0, someValue, 0) 但这总是失败并出现“-10878”错误。 我自己还没有这样做 - 但错误代码是kAudioUnitErr_InvalidParameter
- (developer.apple.com/library/mac/documentation/AudioUnit/…) - 所以检查你传递的参数 - 还不够吗?太多?错误的类型?等等以上是关于iOS AUSampler 连续播放 MIDI 音符的主要内容,如果未能解决你的问题,请参考以下文章