使用系统声音播放声音

时间:2009-07-19 01:11:36

标签: iphone iphone-sdk-3.0 ios-simulator

以下是代码:

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

实际上根本没有声音播放,也没有调用完成回叫。知道这里有什么不对吗? 我想在播放当前声音之前停止任何先前的声音。

3 个答案:

答案 0 :(得分:1)

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

  

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

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

Audio & Video Coding How-To's

答案 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);