2016-11-08 7 views
1

私はウェーブファイルを反復処理し、それの20msのすべての反復を送信しようとしている特定のチャンクを処理します。生成された波(私は完全なオーディオデータが今sampleBuffer内にあることがわかりますWaveファイル - オーディオデータ

WaveFileReader wHeader = new WaveFileReader(fullFileName); 

byte[] data = new byte[wHeader.Length]; 
int read = wHeader.Read(data, 0, data.Length); 
short[] sampleBuffer = new short[read/2]; 
short[] InpBuf; 

for (int i = 0; i < read; i += 2) 
{ 
InpBuf = new short[159]; //20ms? 

Buffer.BlockCopy(data, 0, sampleBuffer, 0, read); 
InpBuf = sampleBuffer; 

Process20(InpBuf); //Send 20ms of audio data which inside InpBuf 

} 

:私はNAudioを使用して以下のコードを持って、8kHzの、1チャネル、16ビットオーディオファイルを使用していると仮定すると、 正弦)私はInpBufにこれらの20msを分割することはできませんし、私はInpBufは全体のオーディオデータが含まれていることを参照してください。

私はこの問題を理解すれば、私はステレオと異なるオーディオフォーマットに移行できるようになります。

ご協力いただきありがとうございます。

答えて

0

問題が

Buffer.BlockCopy(data, 0, sampleBuffer, 0, read); 

blockcopy操作に関連しているあなたがいずれかを定義していないので、それぞれの開始時刻から全体の入力バッファをコピーしている

をオフセットBlockCopyドキュメント

+0

感謝を参照してください。ここで一番いいことは何ですか? これはこのようなものか、他の効率的な方法がありますか? 'コードINT offst = 0。 for(int i = 0; i

+0

最初のアプローチでは良いです...おそらく、期待通りに動作しているとすぐに微調整できます – cristallo

+0

残念ながら、これは非常に混乱した結果をもたらします。 オリジナルのオーディオデータは 'byte [] data = new byte [wHeader.Length];の内部にあります。 オーディオデータをループしているときには、次のようになります。 'for(int i = 0; i

関連する問題