【问题标题】:Matt Gallagher's iOS Tone GeneratorMatt Gallagher 的 iOS 音频发生器
【发布时间】:2016-08-12 03:36:12
【问题描述】:

谁能给我指点 Matt Gallagher 的音频发生器的工作版本?

http://www.cocoawithlove.com/assets/objc-era/ToneGenerator.zip

正如 Matt 所说,它尚未更新,显然已被较新的 API 破坏。我更新了我认为需要更新的内容,现在它编译并运行时只发出弃用警告,但它所做的只是在触摸“播放”和“停止”按钮时发出点击声音。我浏览了代码并查看了 Xcode 中的 API 文档,但这是一个陡峭的学习曲线。我很想有一个工作版本,这样我就可以修改它以了解更多信息。有人更新了吗?还是类似的音源?

我尝试使用 hotpaw2 中的 ToneOutputUnit 类,方法如下。

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    let unit = ToneOutputUnit()
    unit.toneCount = 64000
    unit.setFrequency(1000.0)
    unit.setToneVolume(0.5)
    unit.startToneForDuration(2.0)
    unit.enableSpeaker()
    print("ok")
}

}

我可以看到 ToneOutputUnit 代码正在被调用,并且正在逐步执行各种函数,但没有发出声音。我还尝试在“startToneForDuration”之前调用“enableSpeaker”,但也没有声音。我错过了什么?

【问题讨论】:

  • 这是我转换为 Swift 2.x 和新 iOS Audio Unit v3 API 的音调生成器类:gist.github.com/hotpaw2/630a466cc830e3d129b9
  • 非常感谢。我尝试从以下视图控制器中调用它,但没有发出声音。你能通过说明它应该如何调用来进一步提供帮助吗?在这一点上,我真的不在乎产生什么音调。我只是想听一些我可以改变的东西。 [我现在看到我无法在评论中插入代码。我会尝试添加到原来的。]
  • 来自help center:要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是题外话,因为它们往往会吸引固执己见的答案和垃圾邮件。
  • 罗伯特,将“单位”变量移动为实例变量,而不是本地变量。现在,当 viewDidLoad 返回时,它正在从堆栈中弹出。

标签: audio core-audio


【解决方案1】:

当然,吉恩·德丽莎是对的。 “unit”变量需要在 viewDidLoad 之外声明,因此它不会立即被释放。此外,“unit.enableSpeaker()”需要在“unit.startToneForDuration(0.5)”之前。但是,即使进行了这 2 项更改,我也没有声音。经过更多的挠头后,我在 hotpaw2 的 ToneOutputUnit.swift(在 github 中)中发现了两个缩放错误。

1) 在函数 startToneForDuration 中,“toneCount = Int32(round( time / sampleRate ))”行应该是“toneCount = Int32(time * sampleRate)”。

2) 在函数 setToneVolume 中,“v0 = vol / 32768.0”行应该是“v0 = vol * 32768.0”。

通过这两个变化,它可以工作并产生一种音量和持续时间似乎合理的音调。

@Hotpaw2:我希望你能在 github 上更新你的版本。这是一个写得很好的课程,可以帮助其他人。

【讨论】:

    猜你喜欢
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 2012-01-11
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多