Как остановить звуковой шрифт MusicDeviceMIDIEvent от завершения на iOS
У меня есть приложение, которое успешно использует AUSamplerGraph для воспроизведения звуков шрифта.
Основной звук - гитара.
Если воспроизводится "нижняя" нота на той же струне, я прекращаю воспроизведение предыдущей ноты. Поведение по умолчанию похоже на отрыв строки, и она звонит до тех пор, пока не исчезнет.
Отправка события с записки, и звук все еще сужается.
Отправка заметки с громкостью 0, и звук все еще сужается.
UInt32 onVelocity = loudness;
UInt32 noteCommand = kMIDIMessage_NoteOn << 4 | 0;
OSStatus osStatus;
osStatus = MusicDeviceMIDIEvent(self.samplerUnitGuitar, noteCommand, noteNbr, onVelocity, 0);
Перепробовал немало вещей. Модовый подход не работает. не похоже, что AUSampler реализует этот элемент управления.
AudioUnitReset // сделал свое дело.
1 ответ
Чтобы уточнить, хотите ли вы остановить затухание заметки после того, как отправили заметку?
Насколько мне известно, единственный способ сделать это - отправить сообщение об изменении управления / режима с отключенным All Sound. К сожалению, это убьет ЛЮБЫЕ ноты, которые в данный момент воспроизводятся на этом канале. (А MusicDevice AudioUnits отвечает только на один канал.) Но это работает.
UInt8 kMIDIMessage_ControlModeChange = 0xB0;
UInt8 kMIDIMessage_ControlTypeAllSoundOff = 0x78;
MusicDeviceMIDIEvent(sampler, kMIDIMessage_ControlModeChange, kMIDIMessage_ControlTypeAllSoundOff, 0, 0);