EQ Db / Отслеживание амплитуды - PullRequest
0 голосов
/ 25 февраля 2019

Я новичок в AudioKit для iOS, я отследил максимальную амплитуду 63 Гц эквалайзера звука и изменил значение усиления на 0, используя класс AKEqualizerFilter.Он успешно изменен, и я могу его прослушать, но я хочу знать, как мы можем отобразить это изменение в форме амплитуды / дБ / усиления, используя класс AKFrequencyTracker?

Вот мой код, который изменяет значение усиления звука 63 Гц.

var filterBand3 = AKEqualizerFilter(
    filterBand2, centerFrequency: 64, bandwidth: 70.8, gain: 0.0).

Заранее спасибо.

ОБНОВЛЕНИЕ

Первый шаг, я записываю песню, используя микрофон iPhone, параллельно отслеживаю наибольшую амплитуду полосы EQ 63 Гц.Вот код моего первого контроллера.

override func viewDidLoad() {

    super.viewDidLoad()

    do {

        let tape = try AKAudioFile()

        player = try AKAudioPlayer(file: tape)

        let mic = AKMicrophone()
        micCopy1 = AKBooster(mic)
        micCopy2 = AKBooster(mic)            
        micCopy3 = AKBooster(mic)            
        let mixer = AKMixer(player, mic)            
        tracker = AKFrequencyTracker(mixer)           
        recorder = try AKNodeRecorder(node: mixer, file: tape)          
        AudioKit.output = tracker           
        try AudioKit.start()           
        gameTimer = Timer.scheduledTimer(timeInterval: 0.005, target: self, selector: #selector(runTimedCode), userInfo: nil, repeats: true)

    } catch {

        AKLog("AudioKit did not start!")

    }
}

@objc func runTimedCode()
{
    print(“Amplitude :: ", tracker.amplitude)
    print(“Frequency :: ", tracker.frequency)

    trackeddB1Slider.value = 0

    if tracker.frequency > 62 && tracker.frequency < 110 {
        if tracker.amplitude > maxAmpValues {
            self.lable1.text = String(format: "Max:  %0.3f ", tracker.amplitude)
            maxAmpValues = tracker.amplitude

        }
        trackeddB1Slider?.value = tracker.amplitude
    }
}

@IBAction func startRecordungActoin(_ sender: Any) {
    if recorder!.isRecording {
        recorder!.stop()
        gameTimer.invalidate()
    } else {
        do {
            try recorder!.record()
        } catch {
            AKLog("Couldn't record")
        }
    }
}

После этого я устанавливаю значение усиления "0" EQ 63 Гц для класса AKEqualizerFilter, а затем снова отслеживаю амплитуду для полосы 63 Гц.

Мой второй класс контроллераВот.

var tracker = AKFrequencyTracker ()

@IBAction func startEQ(_ sender: Any) {
    do {
        let player = try AKAudioPlayer(file: recordedAudioFile!)
        player.looping = true

        filterBand2 = AKEqualizerFilter(player, centerFrequency: 32, bandwidth: 44.7, gain: 1.0)
        filterBand3 = AKEqualizerFilter(filterBand2, centerFrequency: 63, bandwidth: 70.8, gain: 0.0)
        filterBand4 = AKEqualizerFilter(filterBand3, centerFrequency: 125, bandwidth: 141, gain: 1.0)
        filterBand5 = AKEqualizerFilter(filterBand4, centerFrequency: 250, bandwidth: 282, gain: 1.0)
        filterBand6 = AKEqualizerFilter(filterBand5, centerFrequency: 500, bandwidth: 562, gain: 1.0)
        let filterBand7 = AKEqualizerFilter(filterBand6, centerFrequency: 1_000, bandwidth: 1_112, gain: 1.0)

        tracker = AKFrequencyTracker(filterBand7)
        AudioKit.output = tracker
        do {
            try AudioKit.start()
        } catch {
            AKLog("AudioKit did not start!")
        }
        player.play()
        gameTimer = Timer.scheduledTimer(timeInterval: 0.005, target: self, selector: #selector(runTimedCode), userInfo: nil, repeats: true)
    }
    catch {

    }
}

@objc func runTimedCode()
{

    print(“Amplitude :: ", tracker.amplitude)
    print(“Frequency :: ", tracker.frequency)
    trackeddB1Slider.value = 0


    if tracker.frequency > 62 && tracker.frequency < 110 {
        if tracker.amplitude > NewMaxAmpValues[0] {
            self.lable1.text = String(format: "Max:  %0.3f ", tracker.amplitude)
            NewMaxAmpValues[0] = tracker.amplitude
        }
        trackedDB1Slider?.value = tracker.amplitude
    }
}

Моя проблема в том, что максимальное значение амплитуды остается неизменным (или через некоторое время) после применения AKEqualizerFilter со значением усиления "0", как до применения фильтраЯ предположил, что амплитуду следует сократить для полосы EQ 63.

Я хочу показать клиенту изменение амплитуды, чтобы доказать, что эквалайзер работает нормально.

...