以下是代码:
-(void)stop
{
NSLog(@"Disposing Sounds");
AudioServicesDisposeSystemSoundID (soundID);
//AudioServicesRemoveSystemSoundCompletion (soundID);
}
static void completionCallback (SystemSoundID mySSID, void* myself) {
NSLog(@"completion Callback");
}
- (void) playall: (id) sender {
[self stop];
AudioServicesAddSystemSoundCompletion (soundID,NULL,NULL,
completionCallback,
(void*) self);
OSStatus err = kAudioServicesNoError;
NSString *aiffPath = [[NSBundle mainBundle] pathForResource:@"slide1" ofType:@"m4a"];
NSURL *aiffURL = [NSURL fileURLWithPath:aiffPath];
err = AudioServicesCreateSystemSoundID((CFURLRef) aiffURL, &soundID);
AudioServicesPlaySystemSound (soundID);
NSLog(@"Done Playing");
}
输出:
Disposing Sounds
Done Playing
实际上根本没有声音播放,也没有调用完成回叫。知道这里有什么不对吗? 我想在播放当前声音之前停止任何先前的声音。
答案 0 :(得分:1)
AFAIK,唯一支持的文件是.caf,.aif或.wav:
要播放您自己的声音,请添加声音 文件到您的应用程序包;该 声音文件必须坚持 以下要求:
- 必须是.caf,.aif或.wav文件。
- 文件中的音频数据必须为PCM或IMA / ADPCM(IMA4)格式。
- 文件的音频持续时间必须少于30秒。
答案 1 :(得分:0)
错误包含什么?从那以后你应该能够推断出这个问题。
答案 2 :(得分:0)
您可以使用AudioToolBox框架:
CFBundleRef mainbundle = CFBundleGetMainBundle();
CFURLRef soundFileURLRef = CFBundleCopyResourceURL(mainbundle, CFSTR("tap"), CFSTR("aif"), NULL);
AudioServicesCreateSystemSoundID(soundFileURLRef, &soundFileObject);
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
AudioServicesPlaySystemSound(1100);