C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: C#でドレミファソなどの音階を再生することはできるでしょうか


(過去ログ 88 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■52528 / inTopicNo.1)  C#でドレミファソなどの音階を再生することはできるでしょうか
  
□投稿者/ oku (1回)-(2010/08/12(Thu) 17:33:58)

分類:[.NET 全般] 

お世話になっております。
VisualStudio2008を使用しております。
C#で音階を再生したいと思っております。

Form1 を新規作成し、
Bottunを7つ配置します。

1つ目のButton ・・・ ド
2つ目のButton ・・・ レ
3つ目のButton ・・・ ミ
4つ目のButton ・・・ ファ
5つ目のButton ・・・ ソ
6つ目のButton ・・・ ラ
7つ目のButton ・・・ シ

鍵盤が7つだけのピアノができればそれでOKです。
音源はピアノかギターあたりが欲しいと思っております(できれば色んな楽器が選べるほうがよいですが・・・)。
どのように音をサンプリング?するのか、または拾ってくるのか、
など、音の再生に関する知識がなくて困っております。

何を準備してどのような方向で進めていけばよいか、
是非アドバイスいただきたいと思います。
よろしくお願いいたします。
引用返信 編集キー/
■52530 / inTopicNo.2)  Re[1]: C#でドレミファソなどの音階を再生することはできるでしょうか
□投稿者/ 魔界の仮面弁士 (1746回)-(2010/08/12(Thu) 18:06:42)
No52528 (oku さん) に返信
> C#で音階を再生したいと思っております。
鳴らすだけならば、Console.Beep(周波数, 再生ミリ秒) メソッドを使って
 int[] frequency = {
  33, 37, 41, 44, 49, 55, 62,
  65, 73, 82, 87, 98, 110, 123,
  131, 147, 165, 175, 196, 220, 247,
  262, 294, 330, 349, 392, 440, 494,
  523, 587, 660, 698, 784, 880, 988,
  1046, 1174, 1318, 1397, 1568, 1760, 1975
 };
 foreach (var hz in frequency) {
  Console.Beep(hz, 400);
 }
という感じになると思います、多分。
手元に鳴らせる環境が無いので、確認はできませんが。


> 音源はピアノかギターあたりが欲しいと思っております(できれば色んな楽器が選べるほうがよいですが・・・)。
楽器まで選びたいなら、midiOut 系 API を使ってみては如何でしょう。
http://d.hatena.ne.jp/TAKAO/20050719
http://d.hatena.ne.jp/aont/20080413/1208060099
http://www13.plala.or.jp/kymats/study/MULTIMEDIA/midiOutShortMsg.html
引用返信 編集キー/
■52532 / inTopicNo.3)  Re[2]: C#でドレミファソなどの音階を再生することはできるでしょうか
□投稿者/ よねKEN (573回)-(2010/08/12(Thu) 20:38:22)
No52530 (魔界の仮面弁士 さん) に返信
> ■No52528 (oku さん) に返信
>>C#で音階を再生したいと思っております。
> 鳴らすだけならば、Console.Beep(周波数, 再生ミリ秒) メソッドを使って
>  int[] frequency = {
>   33, 37, 41, 44, 49, 55, 62,
>   65, 73, 82, 87, 98, 110, 123,
>   131, 147, 165, 175, 196, 220, 247,
>   262, 294, 330, 349, 392, 440, 494,
>   523, 587, 660, 698, 784, 880, 988,
>   1046, 1174, 1318, 1397, 1568, 1760, 1975
>  };
>  foreach (var hz in frequency) {
>   Console.Beep(hz, 400);
>  }
> という感じになると思います、多分。
> 手元に鳴らせる環境が無いので、確認はできませんが。

VC#2010環境で実行してみました。
「Console.Beep の頻度は 37 と 32767 の間で指定しなければなりません。」と例外が発生しましたが、
配列の最初の要素33だけ除いたらそれっぽく鳴りました。

# C#じゃないですが、Microsoft Small BasicならQuickBasicのMML互換チックな感じで音声を鳴らせますね。音色は選べませんが
http://ooltcloud.at.webry.info/201007/article_4.html
引用返信 編集キー/
■52537 / inTopicNo.4)  Re[3]: C#でドレミファソなどの音階を再生することはできるでしょうか
□投稿者/ 魔界の仮面弁士 (1747回)-(2010/08/12(Thu) 23:58:19)
No52532 (よねKEN さん) に返信
> 「Console.Beep の頻度は 37 と 32767 の間で指定しなければなりません。」と例外が発生しましたが、
おぉ。(^^;


> 配列の最初の要素33だけ除いたらそれっぽく鳴りました。
追記。

半音上げるには、「2の12乗根」(≒1.05946309)倍すれば OK です。
Beep メソッドは小数を扱えないので、近い整数にまるめて指定してください。

ちなみに基準音は 440Hz です。いわゆる ラ の音(A)。
1 オクターブ上げるには、周波数を倍にしてください。
(google 等で探せば、幾つかの一覧表が見つかります)


> # C#じゃないですが、Microsoft Small BasicならQuickBasicのMML互換チックな感じで音声を鳴らせますね。音色は選べませんが
> # http://ooltcloud.at.webry.info/201007/article_4.html
QuickBASIC ではなく、QBasic と表現されていますね。(似たようなものですが、一応別物なので)

Small Basic のヘルプより引用:
≫書式は、QBasic でサポートされている ミュージック メイクアップ 言語のサブセットです。

で。この機能(Sound.PlayMusic)は Small Basic 0.9 からの機能ですが、
引数に指定可能なコマンドについては、今のところ、具体的な公式資料が無いみたいです。
http://salvw.miscnotes.com/index.php/archives/3969


ちなみに C# から呼び出す場合には、SmallBasicLibrary.dll を参照設定してやれば OK。

using Microsoft.SmallBasic.Library;
class Sample {
 static void Main() {
  Sound.PlayMusic("O5 C8 C8 G8 G8 A8 A8 G4 F8 F8 E8 E8 D8 D8 C4");
 }
}
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -