■45630 / inTopicNo.1) |
DirectSoundを使ったドラムマシンのサンプルを改良し |
□投稿者/ へもも (1回)-(2010/01/16(Sat) 23:32:44)
|
分類:[.NET 全般]
VisualStudio2008 C#です。
http://msdn.microsoft.com/ja-jp/library/ms973091.aspx
このサンプルを改良したく思います。 改良点は ・音の変更ができる
現在音の準備を終えてそれぞれフォルダにはいっている状態です。
RythmMachineAppクラスで起動したときに音声ファイルを読み込みます。
public RythmMachineApp(Control control, IAudioPlayer player) { int measuresPerBeat = 2;
Type resType = control.GetType(); Mixer = new Chronotron.Rythm.Mixer( player, measuresPerBeat); Mixer.Add(new Track("Bass drum", new Patch(resType, "media.bass.wav"), TrackLength)); ←ココ Mixer.Add(new Track("Snare drum", new Patch(resType, "media.snare.wav"), TrackLength)); Mixer.Add(new Track("Closed hat", new Patch(resType, "media.closed.wav"), TrackLength)); Mixer.Add(new Track("Open hat", new Patch(resType, "media.open.wav"), TrackLength)); Mixer.Add(new Track("Toc", new Patch(resType, "media.rim.wav"), TrackLength)); // 事前に設定された値で初期化 Mixer["Bass drum"].Init(new byte[] { 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0 } ); Mixer["Snare drum"].Init(new byte[] { 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0 } ); Mixer["Closed hat"].Init(new byte[] { 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0 } ); Mixer["Open hat"].Init(new byte[] { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1 } ); BuildUI(control); m_Timer = new Timer(); m_Timer.Interval = 250; m_Timer.Tick += new EventHandler(m_Timer_Tick); m_Timer.Enabled = true; }
これをボタンを押すと用意しておいた別の音のファイルに変更したいです。 できればドラムマシン再生中にボタンを押すと入力していたリズムパターンはそのままで音だけ変わるようにしたく思います。
今やってみたのはボタンが押されたときに
「m_Machine.Add(this, new DSoundPlayer.StreamingPlayer(this, 22050, 16, 1));」
このような処理を行い新しくプレイヤーを作ってしまっていてリズムパターンの入力がおかしくなっています。
事前に初期化
Mixer["Bass drum"].Init(new byte[] { 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0 } ); Mixer["Snare drum"].Init(new byte[] { 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0 } ); Mixer["Closed hat"].Init(new byte[] { 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0 } ); Mixer["Open hat"].Init(new byte[] { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1 } );
の部分を何か音を変える前の配列を参照するなど方法はわかるんですが C#をはじめて間もないのでよく理解できていません。
どなたか助言お願いします。
|
|