为啥我的 AVAudioPlayer 不播放声音?

Posted

技术标签:

【中文标题】为啥我的 AVAudioPlayer 不播放声音?【英文标题】:Why does my AVAudioPlayer not play sound?为什么我的 AVAudioPlayer 不播放声音? 【发布时间】:2015-04-02 10:05:53 【问题描述】:

我的目标是下载一个 .mp3 文件,并将其字节保存在内存中,然后让播放器播放它。我不想将文件存储在设备上。

我是这样下载文件的:

+(NSData*) downloadFile:(NSString*) urlString 
    NSURL *url = [NSURL URLWithString: urlString];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                       timeoutInterval:10];
    [request setHTTPMethod:@"GET"];

    NSHTTPURLResponse* response;
    NSError* error = nil;

    NSData* data = [NSURLConnection sendSynchronousRequest:request
                                         returningResponse:&response
                                                     error:&error];

    return data;

这很好用。我可以在调试器和十六进制编辑器中看到实际的字节值,它们是相同的。

然后我希望按照 Apple 文档的建议使用 AVAudioPlayer 播放它们:

NSData *mp3Bytes = result_of_downloadFile;
NSError *error;

AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithData:mp3Bytes error:&error];
player.delegate = self;

BOOL success = [player prepareToPlay];
[player setVolume:1];
player.numberOfLoops = 1;
if (success) 
    NSLog(@"Play it, it takes %f seconds", [player duration]);
    BOOL playing = [player play];
    NSLog(@"Playing? %i", playing);

 else 
    NSLog(@"failed");

日志告诉我一切正常,prepareToPlay: 成功,play: 成功,但是没有声音。

这是在实际设备上,ipad mini 和 ios 8.2 。它可以使用 ios Music 应用播放音乐。

那么,我的播放代码不正确怎么办?

【问题讨论】:

你试过增加音量吗? 【参考方案1】:

您的AVAudioPlayer 似乎超出范围并被释放。把它变成一个成员变量来延长它的生命周期。

【讨论】:

【参考方案2】:

您是否尝试增加 [player setVolume:1] 的值?

【讨论】:

以上是关于为啥我的 AVAudioPlayer 不播放声音?的主要内容,如果未能解决你的问题,请参考以下文章

Swift - AVAudioPlayer,声音播放不正确

AVAudioPlayer:简单的声音不播放

AVAudioPlayer 间歇性不播放声音

Swift AVAudioPlayer 不播放声音

使用 AVAudioPlayer 在后台播放声音而不停止 ipod 音乐

如何确切地知道为啥声音开始播放?