2013-11-13 3 views
0

MIDI noob в обучении здесь ... Я использую MusicPlayer/MusicSequence/MusicTrack для воспроизведения заметок MIDI на устройствах под управлением iOS. Заметки прекрасно воспроизводятся. Я изо всех сил пытаюсь изменить используемый инструмент. Насколько я могу понять, что это, как это сделать:AudioToolbox MusicPlayer изменение программы не имеет эффекта

-(void) setInstrument:(MIDIInstruments) program channel:(int) channel MusicTrack:(MusicTrack*) track time:(float) time { 
    if(channel < 0 || channel > 15 || program >=MIDI_INSTRUMENT_COUNT || time < 0) { 
     return; 
    } 

    MIDIChannelMessage programChange = { ((UInt8)0xC) << 4 | ((UInt8)channel), ((UInt8)program), 0, 0}; 

    OSStatus result = MusicTrackNewMIDIChannelEvent(*track, time, &programChange); 
    if(result != noErr) { 
     [NSException raise:@"Set Instrument" format:@"Failed to set instrument error: %@", [NSError errorWithDomain:NSOSStatusErrorDomain code:result userInfo:nil]]; 
    } 
} 

В этом случае канал 0 или 1, я попробовал несколько инструментов через вне диапазона допустимых перечислений инструмента, время 0,0, а MusicTrack действительно, и имеет ~ 30 секунд событий примечания. Вызов для установки события канала возвращается noErr. Я в тупик ... Кто-нибудь?

ответ

0

Я читал в других сообщениях, что я мог бы создавать midi с помощью Music Player и друзей. Он предусматривает изменения программы. Итак, я понял, что это поддерживается. После исчерпания всех теорий я обратился к AUGraph. Я добавил файл * .sf2, который я нашел в Интернете, созданный AUGraph, два AudioUnits, a MidiEndpointRef и MidiClientRef; в соответствии с этим tutorial.

Это было в обратном вызове конечной точки, что мне пришлось включать и выключать заметки с помощью MusicDeviceMIDIEvent на samplerUnit, который, казалось, позволял сменить программу. Если раньше я просто загружал события заметок в MusicTrack и играл/останавливал MusicPlayer.

Смежные вопросы