【问题标题】:how to loop AvAudioPlayerNode in Xcode10如何在 Xcode10 中循环 AvAudioPlayerNode
【发布时间】:2019-09-05 19:37:00
【问题描述】:

您好,我正在 SpriteKit 中制作 iOS 游戏,并决定使用 AvAudioPlayerNode 和引擎而不是常规 AvAudioPlayer,这样我可以更改音高和播放速度,但我遇到了 AvAudioPlayerNode 在执行后不重复的问题玩过

我已经使用了许多堆栈溢出的答案,但是如果你碰巧解决了这个问题,它们已经过时了,你能确保它与我的代码一起工作,否则它就没用了

//

let engine = AVAudioEngine()
let speedControl = AVAudioUnitVarispeed()
let pitchControl = AVAudioUnitTimePitch()
let audioplayer = AVAudioPlayerNode()
let audioPath = Bundle.main.path(forResource: "loop", ofType: "wav")


func play(_ url: URL) throws {

 let file = try AVAudioFile(forReading: url)



 engine.attach(audioplayer)
 engine.attach(pitchControl)
 engine.attach(speedControl)

 engine.connect(audioplayer, to: speedControl, format: nil)
 engine.connect(speedControl, to: pitchControl, format: nil)
 engine.connect(pitchControl, to: engine.mainMixerNode, format: nil)

 audioplayer.scheduleFile(file, at: nil)

 try engine.start()
 audioplayer.play()


}

'

//这只是通过这样做在游戏视图控制器中运行

let audioPath = Bundle.main.path(forResource: "loop", ofType: "wav") ?? ""

    do
    {

        try? play(URL(fileURLWithPath: audioPath))
    }
    catch {
}

我实际上不知道从哪里开始我对 Xcode 还很陌生,所以任何帮助都会很有用,请不要让我 15 岁的事情过于复杂

【问题讨论】:

  • 我推荐使用 SKAudioNode。它附加了 avAudioNode,它可以转换为 AVAudioPlayerNode,为您提供所需的功能。

标签: loops sprite-kit repeat avaudioengine avaudioplayernode


【解决方案1】:

您想将文件读入缓冲区,然后安排播放器循环播放

let file = try AVAudioFile(forReading: url)
let audioFileBuffer = AVAudioPCMBuffer(PCMFormat: file.fileFormat, frameCapacity: file.length)
try? read(into buffer: audioFileBuffer )
audioFilePlayer.scheduleBuffer(audioFileBuffer, atTime: nil, options:.Loops, completionHandler: nil)
audioFilePlayer.play()

【讨论】:

  • 这会占用太多内存,没有办法用小缓冲区循环
  • @csguy 可能回到 1982 年
  • 不是真的,想象一下 82 个声音文件位于内存中,每个文件有 30 秒。这在我的 Mac 上占用了大约 700MB 的内存,因为它们都被加载到内存中,整个声音文件的缓冲区大小,这种方法会给 IOS 应用程序带来麻烦......所以我正在寻找一种循环设置缓冲区大小的方法,有什么办法吗?
  • 想象82个文件声音文件在内存中......为什么我需要想象82个需要循环的声音文件。内存中没有 82 个文件,您可以更好地管理资源,并且内存中只有您需要的文件。
  • 因为我正在制作一个音频循环应用程序,屏幕上有 82 个按钮
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
相关资源
最近更新 更多