AVAudioPlayerを使用して、複数のMP3ファイルを順番に(1つずつ順番に)再生したいです。私はそれを試して、それは最初のMP3を再生した後に停止します。しかし、私がデバッガに入ると、それはうまく動作します..任意のアイデア?私はAVAudioPlayerのどこかで、オーディオをバックグラウンドで再生しています。どうすればこのようにするのを防ぐことができますか? VasAVAudioPlayer - 複数のオーディオファイルを順番に再生する
答えて
サウンドごとに1つのAVAudioPlayerを使用します。
これを処理するクラスを実装しました。
[looper playAudioFiles:[NSArray arrayWithObjects:
@"add.mp3",
[NSString stringWithFormat:@"%d.mp3", numeral1.tag],
@"and.mp3",
[NSString stringWithFormat:@"%d.mp3", numeral2.tag],
nil
]];
Looper.m
#import "Looper.h"
@implementation Looper
@synthesize player, fileNameQueue;
- (id)initWithFileNameQueue:(NSArray*)queue {
if ((self = [super init])) {
self.fileNameQueue = queue;
index = 0;
[self play:index];
}
return self;
}
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
if (index < fileNameQueue.count) {
[self play:index];
} else {
//reached end of queue
}
}
- (void)play:(int)i {
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:[[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:[fileNameQueue objectAtIndex:i] ofType:nil]] error:nil];
[player release];
player.delegate = self;
[player prepareToPlay];
[player play];
index++;
}
- (void)stop {
if (self.player.playing) [player stop];
}
- (void)dealloc {
self.fileNameQueue = nil;
self.player = nil;
[super dealloc];
}
@end
Looper.h
#import <Foundation/Foundation.h>
@interface Looper : NSObject <AVAudioPlayerDelegate> {
AVAudioPlayer* player;
NSArray* fileNameQueue;
int index;
}
@property (nonatomic, retain) AVAudioPlayer* player;
@property (nonatomic, retain) NSArray* fileNameQueue;
- (id)initWithFileNameQueue:(NSArray*)queue;
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag;
- (void)play:(int)i;
- (void)stop;
@end
さて、あなたのコードの例の外に動作しませんでした。ちょうどこのような何かをを使用するには
私のための箱。
Looper.h:
#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>
@interface Looper : NSObject <AVAudioPlayerDelegate> {
AVAudioPlayer* player;
NSArray* fileNameQueue;
int index;
}
@property (nonatomic, retain) AVAudioPlayer* player;
@property (nonatomic, retain) NSArray* fileNameQueue;
- (id)initWithFileNameQueue:(NSArray*)queue;
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag;
- (void)play:(int)i;
- (void)stop;
@end
Looper.m:
#import "Looper.h"
@implementation Looper
@synthesize player, fileNameQueue;
- (id)initWithFileNameQueue:(NSArray*)queue {
if ((self = [super init])) {
self.fileNameQueue = queue;
index = 0;
[self play:index];
}
return self;
}
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
if (index < fileNameQueue.count) {
[self play:index];
} else {
//reached end of queue
}
}
- (void)play:(int)i {
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:[[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:[fileNameQueue objectAtIndex:i] ofType:nil]] error:nil];
[player release];
player.delegate = self;
[player prepareToPlay];
[player play];
index++;
}
- (void)stop {
if (self.player.playing) [player stop];
}
- (void)dealloc {
self.fileNameQueue = nil;
self.player = nil;
[super dealloc];
}
@end
そして、ここで私はそれを呼び出す方法です:
サイコー、私は私が固定されたバージョンで応答したい考え出しLooper * looper = [[Looper alloc] initWithFileNameQueue:[NSArray arrayWithObjects: audioFile, audioFile2, nil ]];
Objective-Cを使用したiPhone/iPad開発でわずか1年以上の経験がありますので、気軽に対応してくださいティシズム。
私はiOSの4.1以降(項目のシーケンスを再生)AVQueuePlayer
(
AVPlayer
のサブクラス)は、まさにこの仕事をしないと思います
私はしかし、それを自分で試していないが、間違いなくそれを試してみます。
この回答は、AVAudioPlayerの使用に代わるものですが、上記のLooper。*コードの例を使用するよりもはるかにエレガントで「組み込み」のソリューションです。 AVAudioPlayerの新しいインスタンスを継続的に割り当てる必要があります。当初はこのアプローチを取っていましたが、AVQueuePlayerをサブクラス化して、シーケンシャルオーディオファイルの再生に必要な機能を私に与えました。はい、これは正解です。 – manderson
たとえば、viewDidLoadメソッドなどで、アイテムを初期化して準備しておくことをお勧めします。
イベントが発生したとき、あなたはキューを使用している場合、あなたはまだ音の間にいくつかのギャップがあるかもしれないことに注意してくださいは
queuePlayer.play()
、その後、スウィフトに取り組ん
override func viewDidLoad() {
super.viewDidLoad()
let item0 = AVPlayerItem.init(URL: NSBundle.mainBundle().URLForResource("url", withExtension: "wav")!)
let item1 = AVPlayerItem.init(URL: NSBundle.mainBundle().URLForResource("dog", withExtension: "aifc")!)
let item2 = AVPlayerItem.init(URL: NSBundle.mainBundle().URLForResource("GreatJob", withExtension: "wav")!)
let itemsToPlay:[AVPlayerItem] = [item0, item1, item2]
queuePlayer = AVQueuePlayer.init(items: itemsToPlay)
}
とされている場合。あなたが質問にHow to do something when AVQueuePlayer finishes the last playeritem
をObjective-Cのバージョンを見つけることができます
はそれがお役に立てば幸いです。
- 1. 順番にAsp.Netでオーディオファイルを再生する(1つ後に)
- 2. PlayAtTime複数のオーディオファイルを再生する問題
- 3. AVAudioPlayer(iphone)でオーディオファイルを再生中にノイズが多い
- 4. 複数のフォーマットのビデオを再生し、アプリケーションのオーディオファイルを再生
- 5. iOSで複数のhtml5オーディオファイルを再生するには?
- 6. ループを順番に再生する
- 7. AMRオーディオファイルの再生方法
- 8. AudioKitクラッシュ - オーディオファイルを再生するには?
- 9. ワンクリックで複数のオーディオファイルを再生するhowler js
- 10. 多くのオーディオファイルを1つずつ再生するには
- 11. Safariで複数のオーディオファイルを一度に再生
- 12. オーディオファイルを再生
- 13. オーディオファイルを別のオーディオファイルに再生するために一時停止する
- 14. オーディオファイルを再生する
- 15. AVAudioPlayerを使用してオーディオファイルを再生しているときにiPhoneクラッシュが発生する
- 16. マルチタスク後のAVAudioPlayerの再生
- 17. プログラムされたオーディオファイルを順番に再生するにはどうすればよいですか?
- 18. iosのサーバURLから.cafオーディオファイルを再生する方法
- 19. 複数のオーディオファイルを同時に再生して一時停止する
- 20. 時間にオーディオファイルを再生するwp7
- 21. fancyboxでオーディオファイルを再生するには?
- 22. オーディオファイルを再生するには?
- 23. JButtonでオーディオファイルを再生するには?
- 24. Mac - Swift 3 - オーディオファイルをキューに入れて再生する
- 25. iOS 5 - アプリの起動時にバックグラウンドでオーディオファイルを再生する
- 26. オーディオファイルは、ビューを残すにしても再生し続け
- 27. システムディレクトリのオーディオファイルを再生する
- 28. オーディオファイルのサンプルを再生する方法
- 29. オーディオファイルの配列を再生する
- 30. Androidのオーディオファイルを再生する
これはiPhoneSDKタグが必要です –
あなたのコードを確認するのに役立ちます。見るべきこと - サウンドごとに1つのAVAudioPlayerを使用していますか? mp3ファイルを再生すると、一度に再生できるのは1つだけなので、オーバーラップすると期待どおりの結果が得られない場合があります。なぜあなたがシミュレータでも意味を持たない限り、デバッガが違いを生むのはなぜか分かりません。たぶん、シミュレータは複数のmp3ファイルを同時に再生することができます(これはiPhoneのmp3デコードハードウェアの結果なので)。さらに詳しい情報は、私たちが解決策を見つけるのを助けるので、somコードを投稿することを自由にしてください。 –