iPhone - 声音无法播放AudioServicesPlaySystemSound或AVAudioPlayer

时间:2011-03-12 14:10:36

标签: iphone audio camera click overlay

我在UIImagePicker上有一个按钮,我希望它在点击时发出一些声音。 为此,我在我的项目资源中有m4a和mp3格式的声音(用于测试目的)。

我尝试通过多种方式播放声音,尝试使用m4a和mp3格式,但没有任何东西从iPhone(不是模拟器)中消失。

框架包含在项目中。

以下是我的示例代码:

#import <AudioToolBox/AudioToolbox.h>
#import <AVFoundation/AVAudioPlayer.h>

- (IBAction) click:(id)sender {
// Try
/*
    SystemSoundID train;
    AudioServicesCreateSystemSoundID(CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("TheSound"), CFSTR("mp3"), NULL), &train);
    AudioServicesPlaySystemSound(train);
*/

// Try
/*
    NSError *error;
    AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource: @"TheSound" withExtension: @"mp3"] error:&error];
    [audioPlayer play];
    [audioPlayer release];
*/

// Try (works)
    //AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

// Try
/*
    SystemSoundID soundID;
    NSURL *filePath = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"TheSound" ofType:@"mp3"] isDirectory:NO];
    AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
    AudioServicesPlaySystemSound(soundID);
*/  

    NSLog(@"Clicked");
}

你能告诉我出了什么问题吗?

1 个答案:

答案 0 :(得分:6)

您无法将MP3与音频服务配合使用。它必须是某个子类型的WAV文件。对于AVAudioPlayer,它支持MP3文件,但是当AVAudioPlayer被取消分配时,它会停止播放,因为您在发送-play后立即这样做(通过发送-release来平衡+alloc {1}}),你什么都听不到。

因此要么将文件转换为WAV,要么将AVAudioPlayer挂到{{1}}上足以让它播放。 :)