2016-08-12 60 views
0

有人可以指給我一個Matt Gallagher的音頻發生器的工作版本嗎?Matt Gallagher的iOS音頻發生器

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

馬特說,它一直沒有更新,顯然得到了由新的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',但也沒有聲音。我錯過了什麼?

+0

下面是我轉換爲Swift 2.x和新的iOS音頻單元v3 API的音源類:https://gist.github.com/hotpaw2/630a466cc830e3d129b9 – hotpaw2

+0

非常感謝。我試圖從下面的視圖控制器調用它,並沒有產生聲音。你能否進一步說出應該如何調用?在這一點上,我並不在乎產生什麼聲調。我只想聽到可以改變的東西。 [我現在看到我不能在代碼中插入代碼。我將嘗試添加到原始文檔中。] – RobertL

+0

從[幫助/在線主題]:要求我們推薦或查找書籍,工具,軟件庫,教程或其他非本地資源的問題與Stack Overflow相關因爲他們傾向於吸引自以爲是的答案和垃圾郵件。 –

回答

0

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上更新你的版本。這是一個很好的書面課程,可以幫助其他人。