Waveファイルに変更を加えてから、直接再生したいです。
そこで、wave ファイルのバイトを格納するバイト配列を次のように定義します。
byte[] byteArr;
byteArr = File.ReadAllBytes(dlg.FileName);
ここで、dlg は OpenFile ダイアログです。
次に、次のように波形のサンプル ビット レートを変更します。
private void playSlectedWave_Click(object sender, EventArgs e)
{
int sample = 50000;
MemoryStream fs = new MemoryStream(byteArr);
BinaryReader br = new BinaryReader(fs);
int length = (int)fs.Length-8;
fs.Position = 22;
short channels = br.ReadInt16();
fs.Position = 34;
short BitsPerSample = br.ReadInt16();
byte[] arrfile = new byte[fs.Length];
fs.Position = 0;
fs.Read(arrfile, 0, arrfile.Length);
BinaryWriter bw = new BinaryWriter(fs);
bw.BaseStream.Seek(0, SeekOrigin.Begin);
bw.Write(arrfile, 0, 24);
bw.Write(sample);
bw.Write((int)(sample* ((BitsPerSample * channels) / 8)));
bw.Write((short)((BitsPerSample * channels) / 8));
bw.Write(arrfile, 34, arrfile.Length - 34);
SoundPlayer SP = new SoundPlayer(fs);
SP.Play();
}
私の質問は、それが到達するSP.Play()
と、Wave ヘッダーが破損していることを示す例外がスローされるということです。
詳細については、以前のコードを試してみましたが、MemoryStream の代わりに FileStream を使用したところ、問題なく動作しました。
誰でも理由を知っていますか?