2012-03-14 17 views
4

私のオーディオプレーヤーアプリで、早送りボタンを押すと、プレイリスト内の次の曲を見つけて再生する必要があります。私は、次の曲からURLを取得し、それをバックグラウンドに配置しようとしています(バックグラウンドはAVAudioPlayer *のインスタンスです)。urlフィールドですが、そのプロパティは読み取り専用です。AVAUdioPlayer - 現在のURLを変更する

[self.background initWithContentsOfURL: 
[[_playlist.collection objectAtIndex:currentIndex] songURL] error:nil]; 

は、この合法です:私はこのようなURLを設定するには(再び)initWithContentsOfURLメソッドを呼んでいる - だから私は実際にやっていますか?つまり、コンパイラは式の結果は使用されていないと言いますが、実際には動作します。 別の方法がありますか?ありがとう;-)

答えて

4

4つのAppleサンプルを確認しましたが、AVAudioPlayerを使用して1曲のみを再生しています。しかし、あなたの結果は非常に興味深く印象的に見えます!同じアドレスのオブジェクトを再初期化する前に再生を停止していますか?新しいオーディオセッションを開始していますか?

私にとっては、ドキュメンテーションに記載されていない何かを再生することやアプリの安定性を危険にさらすことはしませんでしたが、明るいところにいることはAVAudioPlayerクラスを使用することになります。私たちを与える:

  • は、演奏AVAudioPlayerインスタンスを停止する可能性のあるエラー
  • を追跡するために、エラー変数を使用AVAudioPlayerの新しいインスタンスを初期化し、自動的に解放される古い-1をさせるプロパティに設定します。

そして、あなたはおそらく自分自身を知って、その

self.background = [self.background initWithContentsOfURL:: 

はあなたのための警告を削除します。

+0

はい、私は新しいURLを設定し、再生を停止してから再生するように設定します。しかし、警告を削除する方法のヒントありがとう、非常に感謝;-) – nemesis

+0

こんにちは@ネメシス、他の答えは、あなたの目標を達成するための最良の方法のように見える、それを受け入れることができますか? –

+0

Heelo @ A-Live。私はそれが私の質問に答えることができないので、他の答えを受け入れたくありません。 AVAudioPlayerの現在のURLをどのように変更し、項目を順番に再生しないかを知りたかったのです。 – nemesis

17

複数のURLを再生したり、効果的にURLを変更するには、サブクラスAVQueuePlayerを使用します。

AVQueuePlayerは、いくつかの項目を順番に再生するために使用するAVPlayerのサブクラスです。

例:

NSString *fooVideoPath = [[NSBundle mainBundle] pathForResource:@"tommy" ofType:@"mov"]; 
NSString *barVideoPath = [[NSBundle mainBundle] pathForResource:@"pamela" ofType:@"mp4"]; 

AVPlayerItem *fooVideoItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:fooVideoPath]]; 
AVPlayerItem *barVideoItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:barVideoPath]]; 

self.queuePlayer = [AVQueuePlayer queuePlayerWithItems:[NSArray arrayWithObjects:fooVideoItem, barVideoItem,nil]]; 
[self.queuePlayer play]; 

// things happening... 

[self.queuePlayer advanceToNextItem]; 
+1

この質問は、オーディオについてです。これはオーディオでも使えますか? – shim

関連する問題