- - PR -
C#でWindowsサウンドミキサーのミュートコントロール
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-11-13 00:55
Togと申します。
C#でWindowsサウンドミキサーのLineInのミュート設定を行いたいと思っています。 WinmmAPIを使うことで可能だと思い調べている中でVB6で書かれたWEBページがありました。 http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q178456& http://beta.experts-exchange.com/Programming/Programming_Languages/Dot_Net/Q_20781858.html これを参考にC#に置き換えてみたのですが、mixerGetLineControlsでErrorが帰ってきてしまいどうしてもうまくできないでいます。 また置き換える中でよくわからなかった部分でvb6で書かれた
はC#でどのように置き換えられるのでしょうか。 OR で結んだデータに + 1 や + 2 という意味がどうにも解せません。 他の方法ででもc#からミュートコントロールできる方法があればアドバイスいただけないでしょうか。 よろしくお願いいたします。 | ||||||||
|
投稿日時: 2003-11-13 09:18
Togさん、お早うございます。
# 本題については判りませんが...。
.net以前のVbでは、数値を論理値に暗黙変換する際に、 0 は False、0 以外の数値は True として判断されます。逆の場合、False は 0 に、True は 1 (だったか -1 だったか定かでない)に変換されます。 | ||||||||
|
投稿日時: 2003-11-13 09:50
unibon です。こんにちわ。
下位の数ビットは算術値になっていて、それ以外の上位のビットは論理値として使っていて、 混在しているのでしょう。 C# は良く知らないのですが、単純な int の演算で良いと思います。 | ||||||||
|
投稿日時: 2003-11-13 21:42
検索で下のようなページを見つけました。
http://www.terra.dti.ne.jp/~vivas/delphi/mixerapi.html オーディオミキサーの操作の概要が書いてあるようです。 これを参考にしつつ、リファレンスと格闘すればお望みの操作は出来そうな気がします。 APIをC#から呼ぶ(dllの関数を呼ぶ、でしょうけど)方法についてはMSDNの 「プラットフォーム呼び出しによるデータのマーシャリング」や http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w32api.html http://www.atmarkit.co.jp/fdotnet/dotnettips/026w32struct/w32struct.html http://www.atmarkit.co.jp/fdotnet/dotnettips/025w32string/w32string.html ここの Tips でこの辺が参考になると思います。
これについては「mmsystem.h にそう書いてあるから」です。これ以上は推測になりますので、正確なところはわかりませんが
自分もこんなところだろうと思います。ただ、uintの演算と考えたほうがいい気がします。フラグとしての利用でしょうから。 リンクばかりのレスですいません。まじめに説明するとすごい量になってしまいますので。 最後に一言いうと、個人的には時間がないのならばこの部分は MC++ で書いて dll にしたほうがいいと思います。時間があるなら C# でかく方がよいと思いますが。 | ||||||||
|
投稿日時: 2003-11-14 10:06
# 相変わらず本題とは関係ありませんが...。
True は -1 でした。 ところで、定数名 "〜_BOOLEAN" から勝手に論理値だと判断しましたが、Or で演算しているそれぞれの定数が数値だった場合、Or はビット演算になりますね。但し、1つでも論理値が含まれていると、論理演算になっちゃいますけど。 以下、VB6で試したコードです。
以下は上記の出力です。 D = 6 F = -1 G = 7 H = 0 |
1