播放简单的声音

时间:2015-04-17 15:28:47

标签: ios objective-c avfoundation avaudioplayer

我需要在动作发生时播放声音,当动作结束时我已经有回调并且它正常工作,现在我想为它添加声音。 我添加了AudioToolbox作为框架,这是我尝试使用的代码:

SystemSoundID playSoundID;
NSURL *clockSound = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"clock" ofType:@"mp3"]];  //the path for my resource
AudioServicesCreateSystemSoundID((__bridge CFURLRef)clockSound, &playSoundID);
AudioServicesPlaySystemSound(playSoundID);

我没有收到任何错误,但声音没有播放

2 个答案:

答案 0 :(得分:3)

AudioServicesPlaySystemSound()功能无法播放任何MP3文件。该功能仅支持.caf.aac.wav这些文件格式,声音必须为30秒或更短。

  

使用此功能播放的声音文件必须是:   持续时间不超过30秒在.caf,.aif或.wav文件中打包的线性PCM或IMA4(IMA / ADPCM)格式

https://developer.apple.com/library/ios/documentation/AudioToolbox/Reference/SystemSoundServicesReference/index.html#//apple_ref/c/func/AudioServicesPlaySystemSound

因此,如果clock.mp3持续时间少于30秒,则可以在转换文件格式时播放声音。

要将mp3转换为caf,例如使用afconvert命令,如下所示:

$ afconvert -f caff -d ima4 clock.mp3 clock.caf

如果不是(声音超过30秒),请改用AVPlayer的{​​{1}}。请参阅参议员评论的链接。

AVFoundation.framework

答案 1 :(得分:0)

试试这段代码:

NSString *voice=[[NSUserDefaults standardUserDefaults] objectForKey:TB_Voice_conversation_value];

NSError *error;
BOOL Errors;

AVAudioSession *session = [AVAudioSession sharedInstance];
Errors = [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
Errors = [session  overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:&error];
[session setActive:YES error:nil];

NSString *path = [NSString stringWithFormat:@"%@/%@",[[NSBundle mainBundle] resourcePath],voice];
NSURL *soundUrl = [[NSURL alloc] initFileURLWithPath:path];

_audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:nil];
if (!Errors)
{
    NSLog(@"Error:%@",error);
}
NSLog(@"session : %@",session);
[_audioPlayer play];