1

我初始化一个 AVAudioPlayer 实例:

NSString* path = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"wav"];

AVAudioPlayer* player =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil]; //Returned object not nil, indicating that the file has loaded successfully


BOOL b = [player prepareToPlay]; //returns TRUE

BOOL b2 = [player play]; 
//returns TRUE, goes immediately to the next line since asynchronous


[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]; //wait 1 sec

printf("%10.4f\n",player.duration); //duration is 2s

printf("%10.4f\n",player.currentTime); //position remains 0

/* There is no sound output, player is also stuck since position==0 */

有谁知道为什么 AVAudioPlayer 没有响应?在初始化、播放音频播放器时,我是否忽略了什么?样板代码可能吗?

我在 iPhone 模拟器上运行它。此外,AudioServicesPlaySystemSound() 适用于同一个文件,这令人费解,但这表明声音播放可能也适用于 AVAudioPlayer。

4

2 回答 2

2

我有 2 条快速建议:

  1. 检查该路径是否确实为您提供了数据。使用 [[NSData alloc] initWithContentsOfFile:path] 分配一个 NSData 对象并在调试器中检查它以查看您是否实际加载了该 wav 文件。

  2. 我在这里写了一个使用 AVAudioPlayer 的示例项目:AVAudioPlayer Example。由于代码与您的代码几乎相同,我唯一能想象的是您的数据存在问题。

看看这些,看看它是否能让你到任何地方!

于 2009-07-29T05:26:37.073 回答
2

我刚刚遇到了类似的问题。我不确定这是否是相同的解决方案,但我的应用程序通过 iphone 录制音频,然后将其回放给用户。

我认为我通过告诉我的音频会话它将记录数据来做正确的事情,所以我做了以下事情:

[audioSession setCategory:AVAudioSessionCategoryRecord error:nil];

使用此设置播放在模拟器上有效,但在设备上无效.... didFinishPlaying 事件从未引发。

在意识到我不需要它之后我删除了这条线,音频播放开始正常工作。现在我只需要弄清楚为什么它如此安静:)

保罗

于 2009-07-31T15:55:59.763 回答