2016-09-20 11 views
1

マイクから取り込んだオーディオをダウンサンプリングする際に問題が発生します。私は、次のコードで、マイクからサンプルを取るためにAVAudioEngineを使用しています:AVAudioEngineダウンサンプルの問題

assert(self.engine.inputNode != nil) 
let input = self.engine.inputNode! 

let audioFormat = AVAudioFormat(commonFormat: .pcmFormatFloat32, sampleRate: 8000, channels: 1, interleaved: false)  
let mixer = AVAudioMixerNode() 
engine.attach(mixer) 
engine.connect(input, to: mixer, format: input.inputFormat(forBus: 0)) 

do { 
    try engine.start() 

    mixer.installTap(onBus: 0, bufferSize: 1024, format: audioFormat, block: { 
      (buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in 
     //some code here 
    }) 

} catch let error { 
    print(error.localizedDescription) 
} 

マイク入力が8000Hzで、バッファは、マイクからのデータで埋めますので、このコードはiPhone 5Sに素晴らしい作品。

問題は、iPhone 6(以上)から16000Hzのマイクレコードを録音できるようにすることです。

engine.connect(mixer, to: mainMixer, format: audioFormat) 

この実際には、動作し、私が手バッファは8000Hzと音のフォーマットが完全にダウンサンプリング出てきました。そして、私は(次のコードで)エンジンmainmixernodeとmixernodeを接続した場合といういただきまし奇妙です私が欲しくないスピーカーからも音が出てくるだけです(もし私が接続しなければ、バッファーは空です)。

誰でもこの問題を解決する方法を知っていますか?

ご意見、ご意見、ご感想をお待ちしております。

答えて

1

私はこれが私の希望サンプルレートに任意のサンプル・レートをリサンプリングするためにエンジンをメインミキサー素晴らしい能力を活用私はできますし、聞いていない、単に0

mixer.volume = 0 

に私のミキサーのボリュームを変更することで、この問題を解決しましたマイクのフィードバックループがスピーカーから直接出てきます。誰かがこれについて明確にする必要がある場合は、私に知らせてください。

これが今の私のコードです:あなたは "mainMixer" を定義

assert(self.engine.inputNode != nil) 
let input = self.engine.inputNode! 

let audioFormat = AVAudioFormat(commonFormat: .pcmFormatFloat32, sampleRate: 8000, channels: 1, interleaved: false)  
let mixer = AVAudioMixerNode() 
engine.attach(mixer) 
engine.connect(input, to: mixer, format: input.inputFormat(forBus: 0)) 
mixer.volume = 0 
engine.connect(mixer, to: mainMixer, format: audioFormat) 

do { 
    try engine.start() 

    mixer.installTap(onBus: 0, bufferSize: 1024, format: audioFormat, block: { 
     (buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in 
     //some code here 
    }) 

} catch let error { 
    print(error.localizedDescription) 
} 
+0

? –

+0

かなり前に私はこのコードを書いていましたが、私はAVAudioEnginesメインミキサーノードであることを95%確信しています。 – nullforlife

+1

このコードを使用すると、バッファにすべてゼロが与えられます。私が間違っていることを知っていますか?私は44100Hzのマイク入力サンプルレートを持つiPhone 7を使用しています。 –

関連する問題