最大10分の長さの大きなループバックグラウンドミュージックファイルがあります。サウンドは完全にループされており、プレーヤーが遅延を導入しなければ、ループポイントがどこにあるかはわかりません。
AVAudioPlayerは、レイテンシーやその他のループの問題によって引き起こされるギャップがユーザーに聞こえないようにすることなく、それらを再生できますか?
最大10分の長さの大きなループバックグラウンドミュージックファイルがあります。サウンドは完全にループされており、プレーヤーが遅延を導入しなければ、ループポイントがどこにあるかはわかりません。
AVAudioPlayerは、レイテンシーやその他のループの問題によって引き起こされるギャップがユーザーに聞こえないようにすることなく、それらを再生できますか?
音楽が圧縮されているため(mp3など)、遅延が発生している可能性があります。AVAudioPlayerは、ストリーミング時にmp3をデコードする必要があります。同じ音楽を非圧縮形式で使用している場合は、かなり多くのディスク容量が必要になりますが、シームレスにループします。
numberOfLoops
最後に停止/開始せず、負の整数に設定している限り、機能するはずです。
シームレスループを作成しようとして問題が発生しました。プロパティを使用してみましたnumberOfLoops
が、成功しませんでした。非圧縮のオーディオファイルに切り替えようとしましたが、成功しませんでした。AVAudioQueuePlayer
同じアセットの複数のインスタンスでキューに入れられたに切り替えようとしましたが、成功しませんでした。最終的に、(player1とplayer2)の2つのインスタンスを作成しAVAudioPlayer
、それらを切り替えることで問題を解決しました。player1の再生を開始し、player2のprepareToPlay
メソッドを使用play(atTime time:)
し、TimeIntervalをに設定するメソッドを使用しましたplayer1.deviceCurrentTime - player1.currentTime + player1.duration
。次に、delegateメソッドaudioPlayerDidFinishPlaying
を使用して、player2が完了した後に再生を再開するようにplayer1を準備しました。正直なところ、このアプローチが機能した理由はわかりませんが、単にnumberOfLoops
-1に設定しても機能しませんでした。しかし、それはあなたのためにも働くかもしれません