2017-11-05 14 views
0

나는 AVAudioEngine을 사용하고 있는데, 출력하려면 .pcmFormatInt16을 16000Hz에서 얻으려고하고 있지만 작동시키지 못합니다. 여기에 내가 뭘하는지입니다 : 위에서 언급 한 바와 같이AVAudioEngine에서 마이크에서 PCM-16을 출력하려면 어떻게해야합니까?

let audioEngine = AVAudioEngine() 
let mixer = AVAudioMixerNode() 
let input = self.audioEngine.inputNode! 

audioEngine.attach(mixer) 
audioEngine.connect(input, to: mixer, format: input.outputFormat(forBus: 0)) 

let recordingFormat = AVAudioFormat(commonFormat: .pcmFormatInt16, sampleRate: 16000.0, channels: 1, interleaved: true) 

mixer.installTap(onBus: 0, bufferSize: 2048, format: recordingFormat) { [weak self] (buffer, _) in 
    // buffer here is all 0's! 
} 

self.audioEngine.prepare() 
try! self.audioEngine.start() 

, 내가 버퍼에 액세스 할 때 항상 모든 0, 침묵이다.

답변

1

AVAudioEngine은 샘플 속도 변경을 지원하지 않습니다. 방금 ​​연결의 형식을 변경하여 샘플 레이트를 변경할 수

let inputFormat = input.outputFormat(forBus: 0) 
let recordingFormat = AVAudioFormat(commonFormat: .pcmFormatInt16, sampleRate: 16000.0, channels: 1, interleaved: true) 
converter = AVAudioConverter(from: inputFormat, to: recordingFormat) 

mixer.installTap(onBus: 0, bufferSize: 2048, format: inputFormat) { [weak self] (buffer, _) in 
    let convertedBuffer = self?.converter.convertBuffer(additionalBuffer: buffer) 
} 
+0

같은 샘플 속도를 변경하는 AVAudioConverter을 사용할 수 있지만 모든 형식이 그런 식으로 지원되는 것은 아닙니다. – dave234

+0

연결 속도로 샘플 속도를 변경하면 샘플 속도가 변경된 것처럼 보이지만 사운드에는 잡음이 있습니다. 예를 들어, iPhone6s에서 샘플 속도 48000을 44100으로 변경하면 버퍼 사운드가 레코드보다 느립니다. – woosiki