iPhone:AVAudioPlayer 并不总是在设备上播放音频

Posted

技术标签:

【中文标题】iPhone:AVAudioPlayer 并不总是在设备上播放音频【英文标题】:iPhone: AVAudioPlayer not always playing audio on device 【发布时间】:2011-03-13 12:51:52 【问题描述】:

我的应用中有 2 个视图,它们是相同的,它们只是加载到不同的声音文件数组中,以便与它们各自的 AVAudioPlayer 一起使用。 但是,仅在设备上,在我的第二个视图中,声音似乎在初始化后只播放一次,然后在我再次初始化播放器之前它不会播放。

这是我的播放按钮代码:

- (IBAction)play:(id)sender 
if (((int)buttonCount % 2) == 0) 
    [[AVAudiosession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
    self.audioPlayer.currentTime = 0;
    self.audioPlayer.volume = volumeSlider.value;
    [self.audioPlayer play];
    [playButton setTitle:@"Stop..." forState:UIControlStateNormal];
    buttonCount++;
    [self fadePickerAnimation:NO];
    NSLog(@"Should play");

else 
    [self initializeSoundAfterStop:YES];
    NSLog(@"Shouldn't play");

NSLog(@"buttoncount %i",buttonCount);
NSLog(@"What is the playing state? %i", self.audioPlayer.playing);

以及它在 else 子句下调用的函数:

- (void)initializeSoundAfterStop:(BOOL)addToButtonCount 
//Initialize audioPlayer once completely stopped
[self.audioPlayer stop];
[self.audioPlayer prepareToPlay];
[playButton setTitle:@"Chime!" forState:UIControlStateNormal];
if (addToButtonCount == YES) 
    buttonCount++;

当我连续按下播放按钮时,上面代码中的 NSLogs 会输出这个:

Should play
buttoncount 1
What is the playing state? 1
Shouldn't play
buttoncount 2
What is the playing state? 0
Should play
buttoncount 3
What is the playing state? 0
Shouldn't play
buttoncount 4
What is the playing state? 0
Should play
buttoncount 5
What is the playing state? 0
Shouldn't play
buttoncount 6
What is the playing state? 0

如您所见,由于某种原因,它卡在了非播放模式中。 在我的第一个视图中,此方法的使用方式完全相同,并且没有任何问题。在模拟器上一切正常,只是在我的 iPhone 4 上不行。无法弄清楚。设置断点时会调用 audioPlayer 的播放方法,所以我不知道! 谢谢!

【问题讨论】:

刚刚在我的播放按钮IBAction中添加了这个:NSLog(@"%@", self.audioPlayer.url);并且控制台显示每次我按下它都会找到声音URL。那为什么不播放!? 【参考方案1】:

无法找出发生这种情况的原因,但是,我通过在播放 IBAction 顶部添加我的 AVAdioPlayer 初始化函数来修复它。 可能不是最优雅的解决方案,但它确实有效。

如果您决定这样做,请注意内存分配。

【讨论】:

看来这是唯一的决定 这里不清楚你做了什么。你能提供代码sn-p吗?谢谢! @Olie 所以刚刚添加了这个:- (IBAction)play:(id)sender if(buttonCount != 0) [self initializeAudioPlayer:self.soundSelected]; 正如我所说,不优雅,但有效!

以上是关于iPhone:AVAudioPlayer 并不总是在设备上播放音频的主要内容,如果未能解决你的问题,请参考以下文章

使用 AVPlayer 的 Airplay 并不总是有效。 “iPhone”选项在 Airplay 菜单中列出两次

iPhone:AVAudioPlayer 是不是支持 .wav 格式?

iPhone:如何使用 AVAudioPlayer 检测 Iphone/Ipod 音量级别

iPhone:MPMusicPlayerController 停止 AVAudioPlayer

iPhone SDK:使用核心音频 AVAudioPlayer 更改播放速度

同步Iphone中两个或多个AVAudioPlayer的播放