スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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

スポンサーサイト

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

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

WavPlayer

・作ったもの

コマンドライン引数、ドラッグアンドドロップで渡されたWavファイルをループ再生するツール。

・作った理由

素材効果音の確認作業の際、WindowsMediaPlayerだとファイルを開いた時に、よくエラーが起きたので。


・作った時につまづいたところ

!System.Media.SoundPlayerだとWavのサンプリング数はおろか、再生時間さえ分からない

あくまで再生用のクラスで、Wavの情報は別の方法で取得するしかない。
めんどくさかったので、今回は保留にした。

!System.Media.SoundPlayerだとWavが再生中かどうかさえも分からない

探せばあるかもしれないが、インテリジェンスを使って、メンバを眺めた感じだと無かった。
今回は、とりあえず保留にして、再生中フラグを作って管理した。

次は、もっとマシな再生方法にしよう…。

!ツールのアイコンはどうやって変えるか(VS2010)

Gimp等、「.ico」ファイルに対応した画像編集ソフトを使用して、icoファイルを作成。

実行ファイルのアイコンにする場合は、プロジェクトのプロパティを開き、
「アプリケーション」→「アイコンとマニフェスト」の辺りでアイコンのファイルパスを指定できる。

WavPlayerIcon.jpg

アプリケーションのアイコンを指定する場合は、フォームのIconプロパティから指定する。

!FormにKeyDownイベント入れたのに反応してくれない

フォームのKeyPreviewプロパティをtrueに設定する。

!規定のプログラムに自作ツールを設定できない

一度、エクスプローラから自作ツールを起動してから、設定する。

この時、VSが使っている「~~.vshost.exe」ではなく、「~~.exe」を起動する。

!規定のプログラムに設定してファイルを開いた時の、開いたファイルのファイルパスはどこ?

コマンドライン引数の第二引数にフルパスが格納されている。

System.Environment.GetCommandLineArgs()[1]

で取得出来る。ちなみに第一引数はツールの実行ファイルパス。

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

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

この人とブロともになる

QRコード
QR
プロフィール

ぴお

Author:ぴお
ようこそ

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

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

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

Twitter
このページのトップへ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。