Непрерывная синусоида от AKMIDISampler, когда AKMicrophone присутствует - PullRequest
0 голосов
/ 30 ноября 2018

У меня проблема с использованием AKMIDISampler в моем проекте, когда есть инициализированный AKMicrophone.Наряду с правильным воспроизведением сэмпла деревянных блоков, когда на сэмплере вызывается «play», в первый раз, когда «play» называется постоянной синусоидой, начинается воспроизведение - оно никогда не останавливается.

Я повторил проблему в наименьшем количестве кода ниже.Проблема возникает, когда класс инициализируется, затем вызывается playTestSample ().

Обратите внимание, что, если код, связанный с AKMicrophone, отключен, AKMIDISampler играет нормально, и синусоида, которая в настоящее время преследует мои мечты, не происходит.

(я попытался переключиться на использование AKSampler () просто для того, чтобы увидеть, существует ли там проблема, но я не смог получить никакого звука из этого).

Fyi: у меня есть «Приложение воспроизводит аудио или потоковое аудио / видео с помощью AirPlay» в «Обязательных режимах фона» в info.plist - что, как известно, устраняет другую проблему синусоидальной волны.

Большое спасибо за любую помощь.

Кстати: AudioKit очень полезен в этом проекте!: ^)

AK 4.5.4 Xcode 10.1

import Foundation
import AudioKit

class AudioKitTESTManager {

    var mixer = AKMixer()

    var sampler = AKMIDISampler()

    var mic = AKMicrophone()
    var micMixer = AKMixer()
    var micBooster = AKBooster()

    init() {

        mixer = AKMixer(sampler, micBooster)

        do {
            let woodblock = try AKAudioFile(readFileName: RhythmGameConfig.woodblockSoundName)

            try sampler.loadAudioFiles([woodblock])

        } catch {
            print("Error loading audio files into sampler")
        }


        micMixer = AKMixer(mic)

        micBooster = AKBooster(micMixer)
        micBooster.gain = 0.0


        AudioKit.output = mixer

        AKSettings.playbackWhileMuted = true
        AKSettings.defaultToSpeaker = true
        AKSettings.sampleRate = 44100

        do {
            print("Attempting to start AudioKit")
            try AudioKit.start()
        } catch {
            AKLog("AudioKit did not start!")
        }
    }

    func playTestSample() {
        // You hear the sample and a continuous sine wave starts playing through the samplerMixer
        try? sampler.play(noteNumber: 60, velocity: 90, channel: 1)
    }
}

1 Ответ

0 голосов
/ 01 декабря 2018

Wheeew.Я считаю, что нашел решение.Может быть, это поможет кому-то еще?

Кажется, что загрузка файлов в сэмплер ПОСЛЕ AudioKit.start () исправляет синусоидальную волну ужаса!

//..
    do {
        print("Attempting to start AudioKit")
        try AudioKit.start()
    } catch {
        AKLog("AudioKit did not start!")
    }


    do {
        let woodblock = try AKAudioFile(readFileName: RhythmGameConfig.woodblockSoundName)

        try sampler.loadAudioFiles([woodblock])

    } catch {
        print("Error loading audio files into sampler")
    }
...