- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写我的第一个 Swift 应用程序,它运行得很好!......在模拟器中。该应用程序通过 AVFoundation 生成音调,当我开始在 iPhone 上播放音调时它运行良好,但是一旦我尝试停止 AVAudioPlayerNode,我的 iPhone 应用程序 10 次中有 5 次会卡住。一切都在模拟器中完美运行。
这里是停止代码:
@IBAction func togglePlay(_ sender: UIButton) {
if tone.isPlaying {
engine.mainMixerNode.volume = 0.0
tone.stop() // This is where is freezes up and tone is a AVAudioPlayerNode
engine.reset() // engine is a AVAudioEngine
sender.setImage(UIImage(named:"icons8-play-100")!, for: UIControl.State())
} else {
tone.preparePlaying()
tone.play()
engine.mainMixerNode.volume = 1.0
sender.setImage(UIImage(named:"icons8-stop-filled-100")!, for: UIControl.State())
}
如果我在代码卡住时暂停它并查看堆栈跟踪,那么它看起来像是在等待释放某种互斥体。但是我没有足够的经验知道如何进一步调查我做错了什么
这是堆栈跟踪:
VFAudio`-[AVAudioPlayerNode stop]:
0x187b68c34 <+0>: stp x22, x21, [sp, #-0x30]!
0x187b68c38 <+4>: stp x20, x19, [sp, #0x10]
0x187b68c3c <+8>: stp x29, x30, [sp, #0x20]
0x187b68c40 <+12>: add x29, sp, #0x20 ; =0x20
0x187b68c44 <+16>: mov x21, x0
0x187b68c48 <+20>: adrp x8, 177438
0x187b68c4c <+24>: add x8, x8, #0x700 ; =0x700
0x187b68c50 <+28>: ldr x19, [x8]
0x187b68c54 <+32>: cbz x19, 0x187b68c70 ; <+60>
0x187b68c58 <+36>: ldr x8, [x19]
0x187b68c5c <+40>: ldr x8, [x8, #0x10]
0x187b68c60 <+44>: mov x0, x19
0x187b68c64 <+48>: blr x8
0x187b68c68 <+52>: mov x20, x0
0x187b68c6c <+56>: b 0x187b68c74 ; <+64>
0x187b68c70 <+60>: mov w20, #0x0
0x187b68c74 <+64>: adrp x8, 177435
0x187b68c78 <+68>: add x8, x8, #0x9dc ; =0x9dc
0x187b68c7c <+72>: ldrsw x8, [x8]
0x187b68c80 <+76>: ldr x21, [x21, x8]
0x187b68c84 <+80>: ldr x8, [x21]
0x187b68c88 <+84>: ldr x8, [x8, #0x198]
0x187b68c8c <+88>: mov x0, x21
0x187b68c90 <+92>: blr x8
0x187b68c94 <+96>: ldr x0, [x21, #0x8] <— This is where it breaks
libsystem_kernel.dylib`__psynch_mutexwait:
0x181c15134 <+0>: mov x16, #0x12d
0x181c15138 <+4>: svc #0x80
-> 0x181c1513c <+8>: b.lo 0x181c15154 ; <+32>
调试的下一步是什么?
最佳答案
注意音频引擎设置中的线程。从注入(inject)的均衡器单元保存音频帧时遇到同样的问题:
equalizer.installTap(onBus: 0, ... ) { buffer, _ in
...
status = ExtAudioFileWrite(file, numberOfFrames, audioBufferList)
...
}
通过将 ExtAudioFileWrite 调用转发到主线程来修复互锁互锁
关于swift - AVAudioPlayerNode.Stop 上的 AVFoundation Mutex 互锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51034151/
我使用多个 AVAudioPlayerNode在 AVAudioEngine混合音频文件进行播放。 完成所有设置后(引擎准备好、启动、音频文件段已安排),我将调用 play()每个播放器节点上的方法开
AudioPlayerNode是一个实例变量代码如下: class HXAudioEngine { private var audioEngine: AVAudioEngine = AVAudi
在 iOS 项目中,我将 AVAudioPlayerNode 与 AVAudioEngine 和 AVAudioUnitTimePitch 结合使用。一切都很顺利。但是,我想知道是否有一种方法可以确定
我正在尝试开发一个带有均衡器的音乐播放器应用程序。我正在使用 AVAudioEngine 并附加 AVAudioPlayerNode 但当我更改歌曲时,上一首歌曲也会与当前歌曲一起播放。更改多首歌曲,
scheduleFile(_:at:completionHandler:) 是在音频文件播放完成之前还是之后执行处理程序?它是在停止播放器/引擎之前还是之后执行它? 最佳答案 在 Apple 的文档中
使用 AVFoundation 和 AVAudioPlayerNode 通过 Xcode 版本 9.2 (9C40b) 播放声音并部署到 iOS 11.2 问题是当你改变音量时,改变并没有在你第一次播
在 AVAudioPlayerNode 中是否可以只循环多次而不是无限次地循环音频声音?下面的代码将音频安排了无限次而不是说 5 次。 aVAudioPlayerNode.scheduleBuffer
我正在尝试使用以下代码生成声音。一切都很好,没有错误。但是当我执行这段代码时,没有声音。我该如何解决这个问题? 顺便说一句,我正在使用这个例子:http://www.tmroyal.com/playi
我需要播放根据输出设备的采样率生成的任意音调。用户需要连接有线或无线耳机才能收听音频。 由于现代耳机的原始采样率为 44100 或 48000,因此我需要以某种方式使用不同的 AVAudioForma
有没有办法在调度缓冲区时为每个循环设置一个完成处理程序? self.audioPlayerNode.scheduleBuffer(buffer, at: nil, options: .loops, c
我需要一些帮助。我正在将部分 IOS 应用程序代码从 OpenAL 转换为 AVAudioEngine,因为 OpenAL 似乎在 IOS 9 中运行不佳。我遇到以下问题。当我调用 AVAudioPl
我在 iOS 游戏应用程序中使用 AVAudioEngine 处理音频。我遇到的一个问题是 AVAudioPlayerNode.play() 需要很长时间才能执行,这在游戏等实时应用程序中可能是个问题
我设置了一堆音频节点 var audioPlayers = [AVAudioPlayerNode]() var engine = AVAudioEngine() var player = AVAudi
我正在开发一个同时启动多个循环并应保持同步的应用。 使用以前的天真方法解决问题(不使用 AVAudioEngine),我发现以编程方式依次启动多个音频播放器会在调用之间产生足够的延迟,从而使结果变得无
我正在使用 AVAudioEngine 播放声音文件并将输出记录到文件中。我有很多音效文件,每一个都通过点击一个按钮来播放。为了播放文件,我创建了一个 AVAudioPlayerNode 并将其连接到
我有一个 AVAudioEngine 设置和一个正在播放一些背景音乐的 AVAudioPlayerNode。 我正在尝试找到一种最佳方法来在 2 秒的时间范围内在节点上创建音量淡出。我正在考虑使用 C
我正在使用 AVAudioPlayerNode 制作音频播放器并播放具有某种效果(延迟、音调变化、速率变化等)的歌曲,但我一直坚持显示歌曲的当前时间和持续时间。AVAudioPlayerNode 似乎
我对 iOS8 中的新音频引擎有一个严重的问题。我有一个应用程序,它是用 AVAudioPlayer 构建的,我试图找出一种迁移到新架构的方法,但是我遇到了以下问题(我相信你会同意,这是一个严重而基本
我在 iOS 9/10 和 iOS 11 之间看到了不同的行为,当发生音频路由更改时(例如,您插入耳机)在 AVAudioPlayerNode 上安排 future 的缓冲区。有没有人遇到过类似的事情
我需要播放声音并能够从缓冲区录制旋律。但我不明白如何设置 AVAudioSession 类别和/或 AVAudioPlayerNode 来实现我的目标。 声音在播放器节点中安排。如果我理解正确的话,A
我是一名优秀的程序员,十分优秀!