2012-03-20 2 views
0

나는 MusicPlayer API를 사용하고 있습니다. 시퀀스로 .mid를로드하면 API가 AUSampler가 포함 된 기본 AUGraph를 생성한다는 것을 이해합니다. 이 AUSampler는 간단한 사인파 기반의 악기를 사용하여 .mid의 음을 합성합니다.AUGraph의 기본 계측기를 편집하는 방법은 무엇입니까?

제 질문은 어떻게 AUSampler의 기본 계측기를 변경합니까? SoundFont2 파일 (.sf2)을 사용하고 AudioUnitSetProperty 메서드를 사용하여 추가 할 수 있다는 것을 알고 있습니다. 그러나이 기본 AUGraph에 어떻게 액세스합니까? AudioUnit을 편집하기 전에 그래프를 열어야합니까, 아니면 노드 간의 연결을 편집하기 위해서만 그래프를 여는 중입니까?

감사합니다 :) 당신은 Audiograph 예를 살펴 수

답변

0

. soundFonts는 사용하지 않지만 그래프를 설정하는 방법에 대한 아이디어를 제공해야합니다.

나는 MusicPlayer를 사용할 때 항상 코드/GUI에서 MIDI 노트 데이터를 생성하고 처음부터 AUGraph (믹서 포함)를 만듭니다. 파생/기본 추출 된 AUGraph & AUSampler 추출 방법을 midi 파일 (아래 예제 코드)로드 결과로하지만 나는 결코 새로운 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); 
+0

그래, 내가 그 일을 끝내 었어. 하지만 생성 된 기존 AUGraph를 편집하는 대신 새 샘플로 복사 한 후 AUSampler의 속성을 편집했습니다. 매력처럼 작동했습니다. – Barks

+0

(사용 계획) 사운드 샘플 또는 sf2/DLS 방법? –

+0

현재 SF2를 사용하고 있지만 문제가 있습니다. 응용 프로그램이 시뮬레이터에서 잘 실행되지만 재생을 수행하는보기를로드하려고하면 충돌이 발생합니다. 나는 콘솔을 보는 것에서 저 메모리로 인한 충돌을 믿는다. 문제는 내 SF2 파일이 72MB라는 것입니다. iPad처럼 너무 커질 것 같습니다. 작은 피아노 SF2를 아십니까? 아니면 더 나은 해결책이 있습니까? – Barks

4

내가이 있지만 here에 자습서를 작성했지만 여기에 프로세스의 개요입니다 :

기능 사운드 폰트 파일을로드 할 (애플의 문서에서 가져온) :

-(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; } 

그런 다음 리소스 폴더에서 사운드 글꼴을로드해야합니다.

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

- 좋은 튜토리얼. –

관련 문제