WAVEデータの生成

ゴールデンウイークの感覚がまだ抜けきらない週末です。
かなり仕事の積み残しがあるので、週末に少し自宅で仕事をして減らそうと思ったのですが、結局それも叶わず貴重な休日が終わろうとしています。こんなことで良いのか、いつも悩んでしまいます。

先日、WAVEファイル生成のコードをアップロードするとお約束していたので、アップロードしました。
WAVEファイルを作成して保存するだけでは面白くないので、モールス信号を生成してメモリーストリームに入れ、それを再生するクラスにしてみました。
15~30分で作成したものなのでかなり手抜きコードですが、何をしているのかは理解いただけるかと思います。(コメントが少なくてすいません。)

前回の説明とは特に関係はないのですが、データの書き込みにBinaryWriter使用しています。byte[]を使用するよりも、ファイルデータと同じ感覚で書き出しができるので非常に便利です。このプログラムでは音データのサイズが最後までわかりませんので、最初にヘッダーサイズ分だけ書き出しポジションを移動させ、音データを書き出し、その後の書き出したデータサイズを元にヘッダーを更新、書き出しポジションを先頭に戻して書き出すことをしています。

msWave      = new MemoryStream();

bwWave      = new BinaryWriter(msWave);

中略
書き出し位置を先頭も移動し、ヘッダーの書き出し。

//=======================================================

// WaveHeaderをストリームに書き出し。

//=======================================================

bwWave.Seek(0, SeekOrigin.Begin);

bwWave.Write(StructureToByteArray(Header));

と、このような感じです。
昔はC++/アセンブラしか使用していませんでしたしので、デバイス制御、バイナリ操作が必要な場合は、C#よりもC++が私としては楽ですね。自分でメンテナンスしているライブラリもあるので。(並べ替え、メモリ管理からデバイス制御まで)

一方で、ユーザーインターフェースが絡むとC#の方が楽なんですよね。C++のポインタ感覚でデータ処理ができると言うことないのですが。.NET Frameworkの今後のアップデートに期待したいと思います。

ZIP MorsePlayer.cs

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です