为什么我的AVAudioPlayer不播放声音?

时间:2015-04-02 10:05:54

标签: ios objective-c audio avaudioplayer

我的目标是下载.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;
}

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

然后我希望使用AVAudioPlayer播放它们,正如Apple的文档所示:

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:成功,播放:成功,但没有听到声音。

这是在一个实际的设备,ipad mini与ios 8.2。它可以使用ios音乐应用播放音乐。

那么,我的播放代码怎么样?

2 个答案:

答案 0 :(得分:2)

看起来您的AVAudioPlayer超出范围并被取消分配。将其转换为成员变量以延长其使用寿命。

答案 1 :(得分:0)

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