我正在编写一个应用程序,其中一部分是使用AVAudioRecorder和AVAudioPlayer类录制和播放声音。我将声音文件设置如下。
NSString *resourcePath = [[NSBundle mainBundle] resourcePath];
resourcePath = [resourcePath stringByAppendingString:@"/sound.caf"];
self.soundFileURL = [NSURL fileURLWithPath:resourcePath];
当我在模拟器中运行应用程序时,它运行正常。但是当我将应用程序加载到设备中时,它无法正常工作。任何人都不知道问题可能是什么。
嗨眼镜蛇。我尝试了你的答案。但设备没有声音。它在模拟器中工作。当我在配电设备上测试时,我得到了一个崩溃报告“未知的核心[0]:错误:AMC重置[非致命错误]:无法锁定BSU”
答案 0 :(得分:1)
我认为你不能写入设备上的resourcePath,它受到保护。找到App的文档目录并在那里写一下:
NSArray *filePaths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *recordingDirectory = [filePaths objectAtIndex: 0];
NSString *resourcePath = [recordingDirectory stringByAppendingString:@"/sound.caf"];
self.soundFileURL = [NSURL fileURLWithPath:resourcePath];
答案 1 :(得分:0)
你是否有可能做了我第一次试图让声音在iPhone上工作时所做的事情?声音是否静音?
另一种可能性:
我发现捆绑包中的文件名在设备上区分大小写,但在模拟器中却不区分大小写。 (或者更多区分大小写 - 我还没有尝试过对每个文件都有效的方法。)因此,如果文件中的大小写错误,它可能只是在模拟器上滑动,但是当它返回时返回nil而不是文件在设备上运行。
我知道,这听起来很奇怪,但我刚刚在自己的项目中证实了这一点。尝试获取正确加载的文件,更改文件名的大小写,并查看它在设备上的工作方式。 - 澄清 - 更改检索文件的名称大小写,使其不再与包中的文件名匹配。
这并不意味着这是你的问题,而是需要注意的事情。
答案 2 :(得分:0)
我刚刚查看了一些代码。匹配你的意图,我想出了:
NSString *soundName = @"sound"; // without extension -- mimicing your naming
NSString *resourcePath = [[NSBundle mainBundle] pathForResource: soundName ofType: @"caf"]]
self.soundFileURL = [NSURL fileURLWithPath:resourcePath];
这有用吗?
答案 3 :(得分:0)
确保您的设备未处于静音模式。短音在静音模式下不起作用。
答案 4 :(得分:0)
我遇到了同样的问题,我添加了Audiosession然后它运行正常。
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
希望这会奏效。