AVAudioPlayer 突然不再播放整个音频源

Posted

技术标签:

【中文标题】AVAudioPlayer 突然不再播放整个音频源【英文标题】:AVAudioPlayer suddenly no longer plays entire audio source 【发布时间】:2014-10-25 18:57:36 【问题描述】:

我正在使用 AVAudioPlayer 在我的应用程序中播放音频,并且它工作了一段时间。突然,它停止工作,我不知道为什么。我在 .h 文件的类级别创建了 AVAudioPlayer。这是我用来初始化播放器的代码

-(void)initAudio
 
    NSURL *song = [[NSBundle mainBundle] URLForResource:@"Prelude" withExtension:@"m4a"];
    NSError *error = nil;
    _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:song error:&error];
    [_audioPlayer prepareToPlay];

我在 initWithSize 函数中调用了这个方法。错误为零,我已经验证播放器对象包含实际的音频文件。音频文件在我的操作系统环境中可以正常播放,为了安全起见,我已经尝试将其添加到构建阶段编译源中,即使在没有明确存在的情况下它也可以正常工作。当我触发播放事件时,它将播放音频的第一个 sn-p,然后什么也不播放。我记录了播放器的当前时间,它是 0。有关该应用程序的其他所有内容都在继续运行,并且正常运行。除了播放/暂停/准备播放之外,我不会以任何方式干扰 avaudioplayer 对象。

我完全被难住了,因为它工作正常,然后突然不再工作。我试图清理项目,我什至转储了derivedData。

有什么想法吗?

【问题讨论】:

【参考方案1】:

我认为您的播放器在您尝试播放歌曲时出现错误。

你需要先检查错误。

在我看来,这似乎是 OSStatus 错误 -43。

当您更新应用程序时,可以更改文件路径。

例如, 旧路径:/var/mobile/Applications/F28E0C2C-4AE2-4C9D-906F-414AE1669D90/Documents/AAA.mp3

新路径:var/mobile/Applications/6086783B-A410-42C3-9BAE-7BA755D0E528/Documents/AAA.mp3

试试这个代码:

 NSError *error;
 NSURL *song = [[NSBundle mainBundle] URLForResource:@"Prelude" withExtension:@"m4a"];

_audioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:song error:&error];

if(error)

    NSLog(@"[error localizedDescription] %@", [error localizedDescription]);

    NSString *fileName = [[song absoluteString] lastPathComponent]; //this code is just example. get your fileName like "AAA.m4a"

    NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    NSString *filePath = [NSString stringWithFormat:@"%@/%@", docDirPath , fileName];

    _audioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL URLWithString:filePath] error:&error];

    

    _audioPlayer.delegate = self;

    [_audioPlayer prepareToPlay];

    [_audioPlayer play];


希望对你有帮助。

干杯

【讨论】:

感谢您的回答。应用程序运行过程中的任何阶段都没有错误。我在每个阶段都设置了断点并进行了调试。一切正常,&error = nil。我想我忘了把它包含在原文中。我没有将代理设置为 self,我会尝试这个更改,看看是否有帮助。

以上是关于AVAudioPlayer 突然不再播放整个音频源的主要内容,如果未能解决你的问题,请参考以下文章

OCiOS开发:音频播放器 AVAudioPlayer

AVAudioPlayer 15 次不播放音频

如何用AVAudioPlayer依次播放多个音频文件

iOS AvPlayer AvAudioPlayer音频的后台播放问题

使用 AVAudioPlayer 重复音频播放

在播放动态音频之前创建 AVAudioPlayer 对象