- 締切済み
ビープ音をなめらかに鳴らしたい
// まずソースをご覧ください[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を使うと必ず前後に空白が入るらしいので他の方法をさがしてみましたがお手上げです ご教授よろしくお願いします^^;
- みんなの回答 (1)
- 専門家の回答
みんなの回答
C#に関してはあまり知識がないのですが、ソースを拝見したところ実行結果としてC音とE音をG音(ドミソ)と100回なってませんか?? だとしたらプログラムの記述どおり処理されています。(和音には残念ながらなりません。) きっとBeepはシステム依存になってしまうのでシステムの仕様などが分かればそれなりの回答も出来るのですが…。 音源の仕様が和音を出せる仕様なのであれば、きっと鳴らしたい音をためて一気にPlayするようなメソッドがあるような気がします。
お礼
遅くなってすみません。回答ありがとうございます。 Colsole.Beepだと1秒に1000回しか実行できないので理論上不可能みたいです。 そこでカーネルモードドライバで直接デバイスを叩くことにしましたが、3和音以上は厳しいでした。。。 ポイント遅くなってすみません^^;;