使用 AVAudioPlayer 没有声音

Posted

技术标签:

【中文标题】使用 AVAudioPlayer 没有声音【英文标题】:No sound using AVAudioPlayer 【发布时间】:2013-08-25 17:07:35 【问题描述】:

我正在尝试使用 AVAudioPlayer 播放声音,但没有成功。我在 ios 模拟器和我的 iPhone 上都试过了。我没有收到任何错误,但我也没有听到任何声音。

这是我的代码:

    NSString *soundFilePath = [[NSBundle mainBundle] pathForResource: @"RiggerSound_Click" ofType: @"wav"];
    NSLog( @"Path is %@", soundFilePath );

    NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];

    NSError *error;
    AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL error: &error];
    [fileURL release];

    if (newPlayer != nil)
    
        if( ![newPlayer play] )
            NSLog( @"Error playing" );

        [newPlayer release];
    
    else
        NSLog(@"Error creating audioPlayer: %@", [error localizedDescription]);

soundFilePath 是“/Users/myname/Library/Application Support/iPhone Simulator/6.1/Applications/E50059DD-B328-45C7-A5D5-C650F415B183/appname.app/RiggerSound_Click.wav”。

“newPlayer”变量不为空,[newPlayer play] 不会失败。

“RiggerSound_Click.wav”文件显示在我项目的 Resources 文件夹中。我可以在项目中选择它,点击播放按钮,然后听到声音。

我被难住了。

感谢您的帮助。

【问题讨论】:

您是否为您的应用设置了 AVAudioSession? 立即释放播放器而不保留另一个引用会阻止它播放 【参考方案1】:

在播放前设置 AVAudioPlayer 的代理。例如,

newPlayer.delegate = self;

另外,请确保您的代理类符合 AVAudioPlayerDelegate 协议:

MyClass : Superclass <AVAudioPlayerDelegate>

【讨论】:

【参考方案2】:

只需将 AVAudio Player 定义为静态

static AVAudioPlayer *newPlayer = Nil;
if(newPlayer == Nil)

     newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL error: &error];

就是这样

【讨论】:

不,应该是实例变量!

以上是关于使用 AVAudioPlayer 没有声音的主要内容,如果未能解决你的问题,请参考以下文章

AVAudioPlayer 多重声音嘈杂

AVAudioPlayer 没有声音

使用 AVAudioPlayer 播放声音时出现问题?

iPhone 上的 AVAudioPlayer 声音意外停止循环:如何调试?

影响应用程序性能的 AVAudioPlayer 声音

AVAudioPlayer- 从声音缓冲区播放