2016-11-04 72 views
1

WebRTC PeerConnectionMediaStreamによって転送されたオーディオを録音しようとしています。 AudioTrackSinkInterfaceを実装するオーディオトラックにシンクを追加しました。WebRTC(AudioTrackSinkInterface)生のオーディオをディスクに書き込む

void TestAudioTrackSink::OnData(const void* audio_data, int bits_per_sample, int sample_rate, size_t number_of_channels, size_t number_of_frames) { 
    size_t valueCount = number_of_channels * number_of_frames; 
    int16_t *_data = (int16_t*)audio_data; 

    f.write((char*)&_data, sizeof(int16_t) * valueCount); 
    f.flush(); 
} 

fofstreamである:それはOnDataメソッドを実装します。サンプルあたりビットは、サンプルレートは16000で、チャンネル 16で、フレームは160

である。しかし、私はAudacityの生のインポート(符号付き16ビットPCM、ビッグエンディアンで作成したファイルを開くと、1でありますモノ、サンプルレート16000)意味のあるオーディオが得られません。

生のオーディオ日付を正しく書き込むにはどうすればいいですか?

答えて

0

最終的には、ポインタ自体がどこに格納されていたのか、それが指していた場所ではなく、古典的なデータにアクセスしました。

void TestAudioTrackSink::OnData(const void* audio_data, int bits_per_sample, int sample_rate, size_t number_of_channels, size_t number_of_frames) { 
    size_t number_of_bytes = number_of_channels * number_of_frames * sizeof(int16_t); //assuming bits_per_sample is 16  
    f.write(reinterpret_cast<const char*>(audio_data), number_of_bytes); 
    f.flush(); 
} 

注:私の方法の正しい実装は次のようになりますのWebRTCのネイティブのより多くの処理のためにを取得し、私は今カスタムAudioDeviceModuleをチェックアウトしていたオーディオデータを送りました。

関連する問題