C#ツール製作備忘録(WavPlayer編Wav情報章)

WavPlayer2.jpg

作ったものに関しては前回の記事を参照。

C#ツール製作備忘録(WavPlayer編)

効果音チェックのためにこのツールを作成したので、やはり、再生時間やサンプリング数など、Wavファイルの情報を見たい。

しかし、DirectSoundやら、いろいろ調べてみたところ、「ロードしたら再生時間とか取得して、保持していてくれるようなモノはC#に用意していない」ということが判明。えぇ~~~。

APIdomo.jpg
プラスチック姉さん 6巻 第107話 『栄養摂取チック①』より 一部編集

ということで自作決定。と、いってもWin32APIのmmio系の関数を使うだけですが。再生に関してはSoundPlayer君に続投してもらうことにします。


ウェーブファイルを読み込む(.NET C#バージョン)
http://www.cactussoft.co.jp/Sarbo/divWavePlayRead.html


このサイトでC#でmmio関数群を使う方法を調べたんですが、定数辺りが独自の命名で再定義(MMRESULT_NOERRORMmResult.NoErrorなど)されてたので、

その2 wavファイルから音を抽出
http://marupeke296.com/DS_No2_GetSoundDataFromWav.html


このサイトや、過去作ったコードから、元々の定数名で定義し直しながらコードを書きました。

C#でWin32APIを触る時は、なるべくWin32APIに合わせた書き方をしたほうが良いと思います。情報の探しやすさが段違いです。

・作ってる時につまづいた所

!実行時「PInvoke 関数 '~~~~' がスタックを不安定にしています。」というエラーが出る

引数の型やサイズが間違っているので、それを直す。

おいらの場合はmmioSeekの第二引数が「LONG」だったので、
[DllImport("winmm.dll")]
public static extern int mmioSeek(
IntPtr hmmio,
long lOffset,
int iOrigin);

と書いていたが、C#での「long」とCで定義されている「LONG」はサイズが違うので、サイズが一致する「int」などに変えると、うまく動作した。

!MMIOINFO構造体の「FOURCC」って何?

4文字のASCIIコードを32bit変数に格納したもの。Four C(haracter) C(ode)

C#では32ビットの型に置き換えればいい(おいらはUInt32にしました)

ググるより、C/C++で「定義へ移動」を使ったほうが早かった(´・ω・`)


・参考サイト

WAV サウンドの長さの計算
http://msdn.microsoft.com/ja-jp/library/cc352338.aspx

スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
プロフィール

ぴお

Author:ぴお
ようこそ

自分のゲーム制作での備忘録や製作記録を書き留めておくブログです。

■やってるサービス
Twitter:piorimumu

Pixiv
http://www.pixiv.net/member.php?id=1126385

Twitter
このページのトップへ