1

这是代码:

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

实际上,根本不会播放任何声音,也不会调用完成回调。知道这里可能有什么问题吗?我想在播放当前声音之前停止任何以前的声音。

4

3 回答 3

1

AFAIK,唯一受支持的文件是 .caf、.aif 或 .wav:

要播放您自己的声音,请将声音文件添加到您的应用程序包中;声音文件必须符合以下要求:

  • 必须是 .caf、.aif 或 .wav 文件。
  • 文件中的音频数据必须是 PCM 或 IMA/ADPCM (IMA4) 格式。
  • 文件的音频时长必须少于 30 秒。

音频和视频编码指南

于 2010-06-06T01:01:46.483 回答
0

错误包含什么?从中你应该能够推断出问题所在。

于 2009-07-19T01:14:58.937 回答
0

您可以为此使用 AudioToolBox 框架:

CFBundleRef mainbundle = CFBundleGetMainBundle();
CFURLRef soundFileURLRef = CFBundleCopyResourceURL(mainbundle, CFSTR("tap"), CFSTR("aif"), NULL);
AudioServicesCreateSystemSoundID(soundFileURLRef, &soundFileObject);
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
AudioServicesPlaySystemSound(1100);
于 2012-07-04T13:17:07.430 回答