![](/img/trans.png)
[英]Are Continuous Frequency Changes for Synthesized Sound in Audiokit Possible?
[英]Can AudioKit play a sound while microphone is analyzing frequency?
我想制作一個耳朵訓練應用程序,所以我想在麥克風分析頻率時發出聲音。 我正在開始證明這個概念,所以現在,我只是采用了AudioKit的示例應用程序MicrophoneAnalisys並添加了一些代碼來發出聲音。
import AudioKit
import AudioKitUI
import UIKit
class ViewController: UIViewController {
var oscillator1 = AKOscillator()
var oscillator2 = AKOscillator()
var mixer = AKMixer()
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
mixer = AKMixer(oscillator1, oscillator2)
mixer.volume = 0.5
AudioKit.output = mixer
do {
try AudioKit.start()
} catch {
AKLog("AudioKit did not start!")
}
}
var mic: AKMicrophone!
var tracker: AKFrequencyTracker!
var silence: AKBooster!
override func viewDidLoad() {
super.viewDidLoad()
AKSettings.audioInputEnabled = true
mic = AKMicrophone()
tracker = AKFrequencyTracker(mic)
silence = AKBooster(tracker, gain: 0)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
AudioKit.output = silence
do {
try AudioKit.start()
} catch {
AKLog("AudioKit did not start!")
}
setupPlot()
Timer.scheduledTimer(timeInterval: 0.1,
target: self,
selector: #selector(ViewController.updateUI),
userInfo: nil,
repeats: true)
}
@objc func updateUI() {
if tracker.amplitude > 0.1 {
frequencyLabel.text = String(format: "%0.1f", tracker.frequency)
var frequency = Float(tracker.frequency)
while frequency > Float(noteFrequencies[noteFrequencies.count - 1]) {
frequency /= 2.0
}
while frequency < Float(noteFrequencies[0]) {
frequency *= 2.0
}
var minDistance: Float = 10_000.0
var index = 0
for i in 0..<noteFrequencies.count {
let distance = fabsf(Float(noteFrequencies[i]) - frequency)
if distance < minDistance {
index = i
minDistance = distance
}
}
let octave = Int(log2f(Float(tracker.frequency) / frequency))
noteNameWithSharpsLabel.text = "\(noteNamesWithSharps[index])\
(octave)"
noteNameWithFlatsLabel.text = "\(noteNamesWithFlats[index])\(octave)"
}
amplitudeLabel.text = String(format: "%0.2f", tracker.amplitude)
}
@IBAction func didTapASound(_ sender: Any) {
print("didTapASound")
mixer = AKMixer(oscillator1, oscillator2)
// Cut the volume in half since we have two oscillators
mixer.volume = 0.5
AudioKit.output = mixer
do {
try AudioKit.start()
} catch {
AKLog("AudioKit did not start!")
}
if oscillator1.isPlaying {
oscillator1.stop()
oscillator2.stop()
} else {
oscillator1.frequency = random(in: 220 ... 880)
oscillator1.start()
oscillator2.frequency = random(in: 220 ... 880)
// oscillator2.start()
}
}
我知道我試圖跑步肯定是錯的
AudioKit.output = mixer
do {
try AudioKit.start()
} catch {
AKLog("AudioKit did not start!")
}
和
AudioKit.output = mixer
do {
try AudioKit.start()
} catch {
AKLog("AudioKit did not start!")
}
同時。
我收到以下錯誤。
[avae] AVAEInternal.h:70:_AVAE_Check: required condition is false: [AVAudioIONodeImpl.mm:910:SetOutputFormat: (IsFormatSampleRateAndChannelCountValid(hwFormat))]
*** Terminating app due to uncaught exception 'com.apple.coreaudio.avfaudio', reason: 'required condition is false: IsFormatSampleRateAndChannelCountValid(hwFormat)'
我讀過這篇文章,但無法理解提出問題的人是否能夠解決問題。 有人可以告訴我,如果我可以在使用AudioKit將麥克風打開的時候發出聲音並指出我正確的方向,我可以學習如何做到這一點嗎? 謝謝!
我在回答我自己的問題。 當然,它可以發出聲音並同時收聽麥克風。 我所要做的就是將它們與AKMixer放在一起。
var oscillator = AKOscillator()
var mic: AKMicrophone!
var tracker: AKFrequencyTracker!
var silence: AKBooster!
override func viewDidLoad() {
super.viewDidLoad()
AKSettings.audioInputEnabled = true
mic = AKMicrophone()
tracker = AKFrequencyTracker(mic)
silence = AKBooster(tracker, gain: 0)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
AudioKit.output = AKMixer(silence,oscillator)
//AudioKit.output = silence
do {
try AudioKit.start()
} catch {
AKLog("AudioKit did not start!")
}
setupPlot()
Timer.scheduledTimer(timeInterval: 0.1,
target: self,
selector: #selector(ViewController.updateUI),
userInfo: nil,
repeats: true)
}
@IBAction func makeASound(_ sender: Any) {
if oscillator.isPlaying {
print("Stop A Sound")
oscillator.stop()
} else {
print("Make A Sound")
oscillator.amplitude = 1.0
oscillator.frequency = 440.0
oscillator.start()
}
}
以防有人有同樣的問題..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.