gpt4 book ai didi

ios - AVAudioPlayer 循环不是无缝的

转载 作者:行者123 更新时间:2023-12-04 07:53:23 28 4
gpt4 key购买 nike

我正在创建和播放 AVAudioPlayer 如下:

playerOne = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: path))
playerOne.numberOfLoops = -1
playerOne.prepareToPlay()
我正在播放 AAC 文件。我在用
playerOne.play(atTime: startTime)
安排将来播放并同步多个 AVAudioPlayers。
一切正常,但我的问题是当声音循环不同步时,这是由于循环不是无缝的。
这里发生的事情是,由于 aac 解码器,我相信解码的音频数据中添加了很小的静音,这会导致音频播放器之间的同步丢失。我希望这个循环是完美的,从结束到开始循环之间的间隔为 0。
如何使用 AVAudioPlayer 实现无缝循环?

最佳答案

使用 AVAudioEngine将为您提供很大的灵活性,但如果您只需要同步轨道就不需要其他任何东西,这将是开销。
在这种情况下,您可以尝试使用 AVComposition 使用单个播放器。包含您所有的轨道,如下所示:

func generateComposition(urls: [URL]) throws -> AVComposition {
let composition = AVMutableComposition()
let audioTracks = urls
.map(AVAsset.init(url:))
.flatMap { $0.tracks(withMediaType: .audio) }

for audioTrack in audioTracks {
guard
let compositionTrack = composition.addMutableTrack(withMediaType: .audio, preferredTrackID: kCMPersistentTrackID_Invalid)
else { continue }

try compositionTrack.insertTimeRange(
audioTrack.timeRange,
of: audioTrack,
at: .zero
)
}
return composition
}
并使用 AVPlayer 播放它:
AVPlayer(playerItem: AVPlayerItem(asset: composition))

关于ios - AVAudioPlayer 循环不是无缝的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66825469/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com