2012-08-04 4 views
1

내 앱에 * .wav 파일을 미리로드하려면 크기가 크기 때문에 필요합니다. viewcontroller1에서로드를 시작한 다음 viewcontroller15에서 재생하고 싶습니다. 미리로드하는 코드가 필요합니다. 그것을 재생하기위한 코드는 다음과 같습니다 :오디오 파일 xcode를 미리로드하는 방법

CFBundleRef mainbundle = CFBundleGetMainBundle(); 
CFURLRef soundFileURLRef; 
soundFileURLRef =CFBundleCopyResourceURL(mainbundle, (CFStringRef) @"america", CFSTR ("wav"), NULL); 
UInt32 soundID; 
AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID); 
AudioServicesPlaySystemSound(soundID); 

답변

1

미리로드되는 wav 파일의 헤더는 매우 작은 양의 데이터를 읽어야합니다. 이렇게하면 오디오 재생 스트림을 초기화 할 수 있습니다. 재생을 시작하려면 재생 버퍼 (읽으려는 작은 양의 데이터)를 채워야합니다.

오디오 파일의 샘플 데이터를 미리로드하려면 AudioFile* API 및 사용자 지정 I/O 콜백을 사용할 수 있습니다.

그러나, 당신이 설명하는 시나리오는 하지 오디오 파일의 샘플 데이터를 미리로드 할 때의 좋은 예입니다.

wav 파일을 디스크에서 실시간으로 스트리밍 할 수 있습니다. 재생하기 전에 전체 파일의 샘플 데이터를 읽을 필요가 없습니다. 큰 오디오 파일을 메모리에로드하는 것은 실시간 재생에는 불필요합니다. 물론, iOS 디바이스도 메모리 천장이 낮습니다.

스트림을 미리로드하고 초기화하는 것이 원하는 경우 ExtAudioFile* 개의 API를 사용하고 AudioQueue*과 같은 API를 사용하여 계속 스트리밍 할 수 있습니다.

당신이 직면 한 문제에 대한 자세한 내용이 도움이 될 수 있습니다. 이 경우 오디오 파일의 샘플 데이터를 미리로드 할 이유가 없습니다. 오직 부정적인 부작용.

+0

큰 오디오 파일을 버퍼링하고 재생할 수있는 간단한 iPhone 앱을 만들었습니다. 희망이 당신을 유용하게 찾을 수 있습니다. https://github.com/iitotoro/BufferedAudioPlayer – Totoro