シンプルなオーディオファイルが.wav形式です(オーディオファイルは完全にループしてカットされています)。私はそれをループするためにさまざまな方法を試しました。私の最初の試みは、単にAVPlayerとNSNotificationを使って、audioItemがゼロになってから時間を探して再び再生することを検出することでした。しかし、明らかにギャップがありました。AVQueuePlayerを使用してシームレスなオーディオループを作成しようとしていますが、なぜループ間に小さなサイレントポーズがあるのかわかりません。
私は、オンラインでさまざまなソリューションを見て、スイッチングを行うためにAVQueuePlayerを使っている人を見つけてきました: Looping AVPlayer seamlessly
実装する場合しかし、これはまだギャップを生成します。
weak var weakSelf = self
NSNotificationCenter.defaultCenter().addObserverForName(AVPlayerItemDidPlayToEndTimeNotification, object: nil, queue: nil, usingBlock: {(note: NSNotification) -> Void in
if weakSelf?.currentQueuePlayer.currentItem == weakSelf?.currentAudioItemOne {
weakSelf?.currentQueuePlayer.insertItem((weakSelf?.currentAudioItemTwo)!, afterItem: nil)
weakSelf?.currentAudioItemTwo.seekToTime(kCMTimeZero)
} else {
weakSelf?.currentQueuePlayer.insertItem((weakSelf?.currentAudioItemOne)!, afterItem: nil)
weakSelf?.currentAudioItemOne.seekToTime(kCMTimeZero)
}
})
ここでは、現在のQueuePlayerを設定するには、私のコードだ:
は、ここに私の現在の通知コードです。
let audioPlayerItem = AVPlayerItem(URL: url)
currentAudioItemOne = audioPlayerItem
currentAudioItemTwo = audioPlayerItem
currentQueuePlayer = AVQueuePlayer()
currentQueuePlayer.insertItem(currentAudioItemOne, afterItem: nil)
currentQueuePlayer.play()
私はこの問題を数日間は解決しています。すべてのリードや新しいことを試していただければ幸いです。私がこれまで試みていないのは、低品質のオーディオファイルだけです。これらの.wavファイルはすべて1MB以上で、ファイルサイズがシームレスループに影響する可能性があると思われていました。
EDIT: 'トレッドミル' 効果を作成するためにAVPlayerLooperを使用し
:
let url = URL(fileURLWithPath: path)
let audioPlayerItem = AVPlayerItem(url: url)
currentAudioItemOne = audioPlayerItem
currentQueuePlayer = AVQueuePlayer()
currentAudioPlayerLayer = AVPlayerLayer(player: currentQueuePlayer)
currentAudioLooper = AVPlayerLooper(player: currentQueuePlayer, templateItem: currentAudioItemOne)
currentQueuePlayer.play()
はEDIT 2:私のwavファイルの1にafinfo
:
Num Tracks: 1
----
Data format: 2 ch, 44100 Hz, 'lpcm' (0x0000000C) 16-bit little-endian signed integer
no channel layout.
estimated duration: 11.302336 sec
audio bytes: 1993732
audio packets: 498433
bit rate: 1411200 bits per second
packet size upper bound: 4
maximum packet size: 4
audio data file offset: 44
not optimized
source bit depth: I16
----
ありがとうございました。私はXcode 8にアップデートしてAVPlayerLooperを実装することができましたが、まだ明らかなギャップがあります。これはとても奇妙です。音楽ファイルは完全にカットされています。私は何が間違っているのか分からない。私は間違いなくAVPlayerLooperを正しく実装しています。コードを編集に貼り付けることができます。 –
音楽はどのような形式ですか? –
圧縮されていない.wavです。私がそのものを手に入れた健全な男は、完璧なループだと確信しています。それを聞いてから、私は彼を信じています。 私は何かを逃しているように感じる。 AVPlayerLooperはうまくいくはずです...私はとてもショックです。私はAVPlayerQueueを使って古典的なトレッドミルの実装を試してみるべきですか?または、私はAVPlayerLooperを間違って使用しているかもしれません。知りません。いずれの方向もすばらしいでしょう。レスポンスマンに感謝します。これは感情的に残忍でした... –