Audio 马特·加拉赫';iOS音频发生器

Audio 马特·加拉赫';iOS音频发生器,audio,core-audio,Audio,Core Audio,有人能给我指一个马特·加拉赫的音调发生器的工作版本吗 正如Matt所说,它还没有更新,而且显然被更新的API破坏了。我更新了我所能找到的需要更新的内容,现在它编译和运行时只显示了弃用警告,但它所做的只是在触摸“播放”和“停止”按钮时发出咔哒声。我已经阅读了代码并查看了Xcode中API的文档,但这是一个陡峭的学习曲线。我希望有一个工作版本,这样我可以修补它来了解更多。有人更新过吗?或者类似的音调发生器 我尝试使用hotpaw2中的ToneOutputUnit类,如下所示调用它 class Vi

有人能给我指一个马特·加拉赫的音调发生器的工作版本吗

正如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(舍入(时间/采样器))”应为“toneCount=Int32(时间*采样器)”

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

有了这两个变化,它就能产生音量和持续时间都合理的音调


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

这里有一个我转换为Swift 2.x的音调生成器类和新的iOS音频单元v3 API:非常感谢。我试着从下面的viewcontroller调用它,但没有发出声音。你能说一下它应该怎么叫吗?在这一点上,我真的不在乎产生什么音调。我只是想听一些我可以改变的东西。[我现在明白了,我不能在评论中插入代码。我将尝试添加到原始内容中。]来自:要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于堆栈溢出来说是离题的,因为它们往往会吸引固执己见的答案和垃圾邮件。罗伯特,移动“单元”变量必须是实例变量而不是局部变量。现在,当viewDidLoad返回时,它将从堆栈中弹出。