Как редактировать инструмент AUGraph по умолчанию? - PullRequest
0 голосов
/ 20 марта 2012

Я работаю с API MusicPlayer. Я понимаю, что когда вы загружаете .mid как последовательность, API создает для вас AUGraph по умолчанию, который включает в себя AUSampler. Этот AUSampler использует простой синусоидальный инструмент для синтеза нот в .mid

Мой вопрос: как изменить инструмент по умолчанию в AUSampler? Я понимаю, что вы можете использовать файлы SoundFont2 (.sf2) и добавлять их с помощью метода AudioUnitSetProperty. Но как получить доступ к этому AUGraph по умолчанию? Нужно ли открывать график перед тем, как редактировать AudioUnit, или открыть график только для редактирования соединений между узлами?

Спасибо:)

Ответы [ 2 ]

4 голосов
/ 23 марта 2012

Я написал учебник по этому вопросу, но здесь , но вот краткое описание процесса:

Функция загрузки файла звукового шрифта (взято из документации Apple):

    -(OSStatus) loadFromDLSOrSoundFont: (NSURL *)bankURL withPatch: (int)presetNumber {

OSStatus result = noErr;

// fill out a bank preset data structure
AUSamplerBankPresetData bpdata;
bpdata.bankURL  = (__bridge CFURLRef) bankURL;
bpdata.bankMSB  = kAUSampler_DefaultMelodicBankMSB;
bpdata.bankLSB  = kAUSampler_DefaultBankLSB;
bpdata.presetID = (UInt8) presetNumber;

// set the kAUSamplerProperty_LoadPresetFromBank property
result = AudioUnitSetProperty([pointer to your AUSampler node here],
                          kAUSamplerProperty_LoadPresetFromBank,
                          kAudioUnitScope_Global,
                          0,
                          &bpdata,
                          sizeof(bpdata));

// check for errors
NSCAssert (result == noErr,
       @"Unable to set the preset property on the Sampler. Error code:%d '%.4s'",
       (int) result,
       (const char *)&result);

return result; }

Затем вам нужно загрузить Sound Font из папки Resources:

NSURL *presetURL = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Name of sound font" ofType:@"sf2"]];

// Initialise the sound font
[self loadFromDLSOrSoundFont: (NSURL *)presetURL withPatch: (int)10];

Надеюсь, это поможет!

0 голосов
/ 21 марта 2012

Вы можете взглянуть на пример Audiograph . Он не использует звуковые шрифты, но должен дать вам представление о том, как настроить график.

Когда я использую MusicPlayer, я всегда генерирую данные MIDI-ноты из кода / GUI и создаю AUGraph (с микшером) с нуля. Есть способы извлечь / извлечь сгенерированный по умолчанию AUGraph & AUSampler, полученный в результате загрузки миди-файла (пример кода ниже), но у меня никогда не получалось установить новый soundFont таким образом. С другой стороны, создание AUGraph с нуля, а затем загрузка файла .sf2 прекрасно работает.

AUGraph graph;
result =  MusicSequenceGetAUGraph (sequence, &graph);

MusicTrack firstTrack;
result =  MusicSequenceGetIndTrack (sequence, 0, &firstTrack);

AUNode myNode;
result = MusicTrackGetDestNode(firstTrack,&myNode);

AudioUnit mySamplerUnit;
result = AUGraphNodeInfo(graph, myNode, 0, &mySamplerUnit);
...