Если мы возьмем вход с микрофона, какие значения поступят в буфер PCM входного аналогового звука? - PullRequest
0 голосов
/ 04 февраля 2019

Я работаю над проектом Swift IOS, в котором мне нужно принимать данные с микрофона, но я получаю значения, например, в виде буфера PCM, B [82,90, -63], я хочу знать,Какие амплитуды или напряжения создают звуковой сигнал?

Как AVKIT обрабатывает входной звук в буфер PCM.

Я провел исследование в Google и внедрил функцию инверсии фазы в буфере ввода, но не знаю, какэто на самом деле работает, как в журнале, я получаю значения B [82,93, -68].

do
{
        let audioFile = try AVAudioFile(forWriting: URLFor(filename: "my_file.caf")!, settings:(targetFormat?.settings)!)
        engine.inputNode.installTap(onBus: 0, bufferSize: 1024, format: format, block: { (buffer: AVAudioPCMBuffer, time:AVAudioTime) -> Void in
            do {
                try audioFile.write(from: buffer)
            } catch let error as NSError {
                NSLog("Error writing %@", error.localizedDescription)
            }
        })
        self.engine.prepare()
        self.startEngine()
    }catch{

    }

Код сдвига фазы

do {
        let inFile: AVAudioFile = try AVAudioFile(forReading: URLFor(filename: "my_file.caf")!)
        let frameCount: AVAudioFrameCount = UInt32(inFile.length)
        let outFile: AVAudioFile = try AVAudioFile(forWriting: URLFor(filename: "my_file1.caf")!, settings: (targetFormat?.settings)!)
        let forwardBuffer: AVAudioPCMBuffer = AVAudioPCMBuffer(pcmFormat: targetFormat!, frameCapacity: frameCount)!
        let invertBuffer: AVAudioPCMBuffer = AVAudioPCMBuffer(pcmFormat: targetFormat!, frameCapacity: frameCount)!

        try inFile.read(into: forwardBuffer)
        let frameLength = forwardBuffer.frameLength
        invertBuffer.frameLength = frameLength
        print(forwardBuffer.frameLength)
        var floatArray = Array(UnsafeBufferPointer(start: forwardBuffer.floatChannelData?[0], count:Int(forwardBuffer.frameLength)))
        for i in 0..<floatArray.count{
            invertBuffer.floatChannelData!.pointee[i] = -floatArray[i]
        }
        try outFile.write(from: invertBuffer)
    } catch let error {
        print(error.localizedDescription)
    }
    }

Я ожидаю, что кто-то, кто обладает необходимыми знаниямии может описать процесс для меня, и сказать мне, что происходит под капотом.У меня есть обратная фаза. Я просто хочу знать, как обрабатываются входные данные и каковы значения и что они представляют?

...