触发 AVAudioPlayer 以停止所有声音并播放选定的声音,除非单击播放(选定)按钮
Posted
技术标签:
【中文标题】触发 AVAudioPlayer 以停止所有声音并播放选定的声音,除非单击播放(选定)按钮【英文标题】:Trigger AVAudioPlayer to stop all sounds and play selected except when playing(selected) button is clicked 【发布时间】:2013-03-12 09:09:03 【问题描述】:我正在创建一个一次播放一种声音的音板应用程序。我希望 UIButton 能够在单击时停止播放所有其他声音并开始播放自己的声音。我设置了一个 AVAudioPlayer 来播放所有声音(单击时我更改了声音文件的 url,因为我一次只想要一个声音播放这不是问题)。我想知道如何停止所有其他声音并根据按下的按钮播放声音,但如果单击的按钮是当前正在播放声音的按钮,则该按钮只会停止声音。我知道这可以通过分离音频播放器并触发停止事件来实现,但我想避免复制和粘贴代码并尽可能保持效率,而且我只想要/需要一个音频播放器。这是我的代码:
- (IBAction)play
if (audioPlayer.playing == NO)
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/k.mp3", [[NSBundle mainBundle] resourcePath]]];
NSError *error;
[audioPlayer release];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
audioPlayer.numberOfLoops = 0;
AVAudiosession *audiosession = [AVAudioSession sharedInstance];
[audiosession setCategory:AVAudioSessionCategoryAmbient error:nil];
[audioPlayer play];
[start setTitle:@"Stop" forState:UIControlStateNormal];
else
if (audioPlayer.playing == YES)
[audioPlayer stop];
[start setTitle:@"Start" forState:UIControlStateNormal];
- (IBAction)play2
if (audioPlayer.playing == NO)
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/chicken.mp3", [[NSBundle mainBundle] resourcePath]]];
NSError *error;
[audioPlayer release];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
audioPlayer.numberOfLoops = 0;
AVAudioSession *audiosession = [AVAudioSession sharedInstance];
[audiosession setCategory:AVAudioSessionCategoryAmbient error:nil];
[audioPlayer play];
[start2 setTitle:@"Stop" forState:UIControlStateNormal];
else
if (audioPlayer.playing == YES)
[audioPlayer stop];
[start2 setTitle:@"Start" forState:UIControlStateNormal];
感谢任何帮助。提前谢谢!
【问题讨论】:
【参考方案1】:就这样做
-(void)stopAudio
if(audioPlayer && [audioPlayer isPlaying])
[audioPlayer stop];
audioPlayer=nil;
并在每次点击时调用此函数..
- (IBAction)play2
[self stopAudio];
//Do your Stuffs
【讨论】:
【参考方案2】:当您的按钮被点击时,停止您的音频播放器并分配您的新歌曲网址然后播放它。当您点击按钮播放歌曲时编写此代码。
if(audioPlayer.isPlaying)
[audioPlayer stop];
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];
NSURL *url = [NSURL fileURLWithPath:YourSoundURL];
NSError *error;
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
audioPlayer.delegate=self;
[audioPlayer play];
[start2 setTitle:@"Stop" forState:UIControlStateNormal];
【讨论】:
以上是关于触发 AVAudioPlayer 以停止所有声音并播放选定的声音,除非单击播放(选定)按钮的主要内容,如果未能解决你的问题,请参考以下文章
AVAudioPlayer 声音在经过这么多 IBAction 后停止播放
AVAudioPlayer 重置当前播放的声音并从头开始播放
iPhone 上的 AVAudioPlayer 声音意外停止循环:如何调试?