0
私は、次のコードを使用してNAudioを使用してマイクを読んでいます:私は、平均コードであまり働いていないはどうすればNAudio WaveInから16ビットのサンプルを構築するのですか?
WaveIn waveInStream;
WaveFileWriter waveFileWriter;
private void Form1_Load(object sender, EventArgs e)
{
waveInStream = new WaveIn();
waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
waveInStream.StartRecording();
waveFileWriter = new WaveFileWriter("D:\\output.wav", waveInStream.WaveFormat);
}
void waveInStream_DataAvailable(object sender, WaveInEventArgs e)
{
UInt64 allVals = 0;
for (int i = 0; i < e.BytesRecorded; i += 2)
{
allVals += (UInt64)(((int)e.Buffer[0] << 16) | ((int)e.Buffer[1]));
}
UInt64 avg = allVals/((UInt64)e.BytesRecorded * 2);
avg /= 1000;
textBox1.AppendText(avg.ToString() + "\r\n");
waveFileWriter.Write(e.Buffer, 0, e.BytesRecorded);
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
waveInStream.StopRecording();
waveInStream.Dispose();
waveFileWriter.Close();
}
。しかし、正しいエンディアンを使用して16ビット値を正しく構成しているかどうかは疑問です。私は両方の方法を試みましたが、私は部屋の音量に比例した値を得ていません。符号なしの値を用いて平均値を算出するあなたの試みは動作しないように
ありがとう!私は理論的な誤解があることを知っていました。 – Salil
はちょうど私を救った、ありがとうマーク! –