Matt Gallagher的iOS音调生成器

时间:2016-08-12 03:36:12

标签: audio core-audio

有人能指出我的Matt Gallagher音色发生器的工作版本吗?

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

正如马特所说,它还没有更新,显然被更新的API打破了。我更新了我能想出的所需更新,现在它只编译并运行只有弃用警告但它所做的只是在" Play"和"停止"按钮被触摸。我已经浏览了代码并查看了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代码并且正在逐步执行各种功能,但没有产生声音。我也试过打电话给'enableSpeaker'之前' startToneForDuration'但也没有声音。我错过了什么?

1 个答案:

答案 0 :(得分:2)

当然Gene De Lisa是对的。 “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上更新你的版本。这是一个很好的写作课程,可以帮助其他人。