有人可以给我指点 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”,但也没有声音。我错过了什么?
吉恩·德丽莎当然是对的。 “unit”变量需要在 viewDidLoad 之外声明,这样它就不会立即被释放。另外,“unit.enableSpeaker()”需要位于“unit.startToneForDuration(0.5)”之前。然而,即使进行了这两个更改,我也没有听到任何声音。经过更多的绞尽脑汁之后,我在 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上的版本。这是一个写得很好的课程,可以帮助其他人。