iOS 如何让音频文件不要同时播放。

2014-07-09 20:50:17 +08:00
 parkman
下列代码SongA 与SongB同时播放了,有没有办法让它们不要同时播放。


NSString *songA = [[NSBundle mainBundle] pathForResource:@"songA" ofType:@"mp3"];
NSError *soundError = nil;
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:songA] error:&soundError];
if(self.player == nil)
NSLog(@"%@",soundError);
else
{
[self.player setDelegate:self];
[self.player setVolume:0.75];
[self.player play];
}

NSString *songB = [[NSBundle mainBundle] pathForResource:@"songB" ofType:@"mp3"];
soundError = nil;
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:songB] error:&soundError];
if(self.player == nil)
NSLog(@"%@",soundError);
else
{
[self.player setDelegate:self];
[self.player setVolume:0.25];
[self.player play];
}
4658 次点击
所在节点    iDev
8 条回复
jevonszmx
2014-07-09 22:28:30 +08:00
单例模式啊。。。
parkman
2014-07-10 10:01:11 +08:00
@jevonszmx 设置什么类 单根了 。
PrideChung
2014-07-10 11:22:38 +08:00
这问题在卖萌么
把这行以及在其之后的代码删掉:
NSString *songB = [[NSBundle mainBundle] pathForResource:@"songB" ofType:@"mp3"];
sobigfish
2014-07-10 13:09:35 +08:00
@PrideChung 呃,lz是想播放完songA放songB吧
PrideChung
2014-07-10 13:44:51 +08:00
@sobigfish 我仔细审题了,没看出楼主有这样的意思
jevonszmx
2014-07-10 17:54:46 +08:00
@PrideChung
@sobigfish
@parkman

额,那我回答少了:
1、首先播放音乐,要写成单例类,保证同一时间只能有一个音乐在播放;
2、有个播放队列,songA、songB依次加入播放队列,然后才开始播放,监听播放进度,播完songA再songB,循环??

对吗?其实我也是新手XD
parkman
2014-07-11 15:52:34 +08:00
@jevonszmx
@sobigfish
@PrideChung

我自己重新换了一种思路, @PrideChung 设置一个专门用来播放的队列,不断的更新播放的当前文件,并及时做队列的删除与插入,使用delegate 方法来播放当前的队列。从播放队列中清除当前的文件。
parkman
2014-07-11 15:55:49 +08:00
@jevonszmx
@sobigfish
@PrideChung
这个方法控制播放下一个audio
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/121823

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX