2009-08-04 85 views
1

我正在编写一个应用程序,其中的一部分是使用AVAudioRecorder和AVAudioPlayer类录制和播放声音。我如下设置声音文件。声音在设备中不起作用

NSString *resourcePath = [[NSBundle mainBundle] resourcePath]; 
resourcePath = [resourcePath stringByAppendingString:@"/sound.caf"];  
self.soundFileURL = [NSURL fileURLWithPath:resourcePath]; 

当我运行在模拟器的应用程序,它的工作原理fine.However当我的应用程序下载到设备不work.Does人有任何想法的问题可能是什么。


喂库布。我试着用你的答案。但没有声音在设备上。它在模拟器中工作。当我在分配设备中测试时,我收到了崩溃报告“unknown kernal [0]:错误:AMC重置[非致命错误]:无法锁定BSU”

回答

1

我不认为你可以写入resourcePath on该设备,它受到保护。查找应用程序的文件目录,并写在某处:

NSArray *filePaths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *recordingDirectory = [filePaths objectAtIndex: 0]; 
NSString *resourcePath = [recordingDirectory stringByAppendingString:@"/sound.caf"]; 
self.soundFileURL = [NSURL fileURLWithPath:resourcePath]; 
0

有没有可能是你做,我做了第一次我试图让声音在iPhone上运行同样的事情?声音是否静音?

另一种可能性:

我已经发现包内的文件名是大小写敏感的模拟设备上,但不是。 (或者更加区分大小写 - 我没有试验每种方法到底起什么作用)。因此,如果文件上出现错误,它可能只是在模拟器上滑动,但是在返回时返回nil而不是文件在设备上运行。

我知道,这听起来很奇怪,但我只是在我自己的项目中证实了它。尝试拍摄一个您知道正确加载的文件,更改文件名的大小写,并查看它在设备上的工作原理。 - 澄清 - 更改您检索文件的名称的大小写,以使其不再与包中的文件名匹配。

这并不意味着这是你的问题,而是需要注意的一点。

+0

试过上面的解决方案。然后在模拟器中发生同样的事情,在设备中没有声音。任何其他的选择? – diana 2009-08-05 09:33:51

0

我刚刚回顾了一些我的代码。匹配你的意图,我想出了:

NSString *soundName = @"sound"; // without extension -- mimicing your naming 
NSString *resourcePath = [[NSBundle mainBundle] pathForResource: soundName ofType: @"caf"]] 
self.soundFileURL = [NSURL fileURLWithPath:resourcePath]; 

这是否工作?

0

确保您的设备未处于静音模式。短音在静音模式下不起作用。

0

我有同样的问题,我添加Audiosession然后它工作正常。

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 

希望这会起作用。