我需要在动作发生时播放声音,当动作结束时我已经有回调并且它正常工作,现在我想为它添加声音。
我添加了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);
我没有收到任何错误,但声音没有播放
答案 0 :(得分:3)
AudioServicesPlaySystemSound()
功能无法播放任何MP3文件。该功能仅支持.caf
,.aac
或.wav
这些文件格式,声音必须为30秒或更短。
使用此功能播放的声音文件必须是: 持续时间不超过30秒在.caf,.aif或.wav文件中打包的线性PCM或IMA4(IMA / ADPCM)格式
因此,如果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];