プロが教えるわが家の防犯対策術!

// まずソースをご覧ください[C#]
// ビープ音で和音を出す
private void start_Click(object sender, EventArgs e)
{
for (int i = 0; i < 100; i++)
{
// 1600分音符をforでまわしてドミソの和音に聞こえるようにしてみる
Play2("C", 1600);
Play2("E", 1600);
Play2("G", 1600);
}
}
protected static void Play2(string note,int lenght)
{
Dictionary<string, int> onkai = new Dictionary<string, int>();
onkai["REST"] = 0;
onkai["GbelowC"] = 196;
onkai["A"] = 220;
onkai["A_"] = 233;
onkai["B"] = 247;
onkai["C"] = 262;
onkai["C_"] = 277;
onkai["D"] = 294;
onkai["D_"] = 311;
onkai["E"] = 330;
onkai["F"] = 349;
onkai["F_"] = 370;
onkai["G"] = 392;
onkai["G_"] = 415;
//ビープ音を鳴らす
Console.Beep((int)onkai[note], 1600 / lenght);
 }

このソースをコンパイルしてもうまくいきませんでした
プルルルルルルルル・・・という連続音になるだけで和音になりません><
Console.Beepを使うと必ず前後に空白が入るらしいので他の方法をさがしてみましたがお手上げです
ご教授よろしくお願いします^^;

A 回答 (1件)

C#に関してはあまり知識がないのですが、ソースを拝見したところ実行結果としてC音とE音をG音(ドミソ)と100回なってませんか??


だとしたらプログラムの記述どおり処理されています。(和音には残念ながらなりません。)

きっとBeepはシステム依存になってしまうのでシステムの仕様などが分かればそれなりの回答も出来るのですが…。
音源の仕様が和音を出せる仕様なのであれば、きっと鳴らしたい音をためて一気にPlayするようなメソッドがあるような気がします。
    • good
    • 0
この回答へのお礼

遅くなってすみません。回答ありがとうございます。
Colsole.Beepだと1秒に1000回しか実行できないので理論上不可能みたいです。
そこでカーネルモードドライバで直接デバイスを叩くことにしましたが、3和音以上は厳しいでした。。。

ポイント遅くなってすみません^^;;

お礼日時:2008/06/20 22:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!