logicalyze::blog

Archive for the ‘サウンド’ tag

FlashのMicrophone機能とWindows7でツボった・・

leave a comment

先日まで、Flashのマイクロフォン機能を利用したマルチトラック(再生)&録音ミキサーを作っていたのですが最後の最後に来てWindows7でハマってしまいました。

まず、使用しているPBJファイルを含めてMacOSXやWindowsXP等で問題なく動作しているということを踏まえた上で、まず最初の問題はクライアントが新規に導入したマシンがLets noteのWindows7搭載PCであったことです。

これはある意味、運よくといえるのか、悪かったといえるのか、通常PCのサウンドドライバは入出力を含めてひとつのチップないしはボードになっているので、例えば外部スピーカーが繋がっていなかったり、マイクジャックにマイクが繋がっていなかったとしてもドライバ自体はプログラム側から認識されます。
ところがLets noteでは、マイクが繋がっていないとコントロールパネルから入力ドライバ自体が消えてしまいます。
当然ながらドライバが見つからなかった場合のエラー処理を書いておかないとそれ以降のプログラムにエラーが発生してしまいます。

これが分かるまでひとツボです。

次に、Windows7(Vistaは?)でオーディオを再生したときにマイクロフォン機能をオンにすると再生しているオーディオの音量がガクンとダウンしてしまうことです。

これも何が問題なのかを発見するまでにプログラムを色々書き換えてみたりしてみましたが最終的に何をやってもマイク機能がオンになるとそれ以外の再生音がゲインダウンしてしまうという結論にいたりWindows7ではダメなのかと思ってしまいましたが答えは意外なところにありました。

改めてコントロールパネルのサウンドを開いてみると他のOSには無かった「通信」と言うタブが追加されていてマイクロフォンのアクティビティが検出されると自動的に他のサウンドがゲインダウンするという設定になっていました。(デフォルト)

これがふたツボ目です。

やや疲れ気味です。
みなさんもマイク機能を扱うときはご注意あれ!

■ 下図パネル参照
Read the rest of this entry »

Written by admin

3月 15th, 2012 at 5:18 pm

SiONをやってみよう・・・基本編6:ノートナンバーを使う

leave a comment

久々のSiONライブラリチュートリアルです。

前回までは、MMLを使用したライブラリの使い方でしたが、今回はMIDIノートナンバーによる音源再生です。

MIDIノートナンバーとは、音階に0~127までの通し番号を付けたものです。
例えば、C → 60、C# → 61、D → 62、・・・

ピッチ(周波数)とノートナンバー(音階)に関しては、過去エントリ「ピッチテーブルを作ってみる」も参考にどうぞ。

SiONライブラに於けるノートナンバー60は、MMLの”o5c”と同等です。

SiONライブラリには、noteOn()、noteOff()、メソッドが実装されていて、引数にノートナンバーを渡すことで任意の音程で音源を鳴らすことができます。

以下は、主な手順です。(主要部分のみ)
(※マウスダウンイベントやキーダウンイベントで鳴らすことが前提のサンプルです)

driver = new SiONDriver();
presetVoice = new SiONPresetVoice();
voice = new SiONVoice();
voice = presetVoice["valsound.piano3"];
driver.play();
//ノートナンバー60で鳴らす (マウスダウンイベント、キーダウンイベント)
driver.noteOn(60, voice, 0, 0, 0, 0, 0, 1, 1, true);
//ノートナンバー60を止める(マウスアップイベント、キーアップイベント)
driver.noteOff(60);

このメソッドには、10個ほど引数があるのでざっと下記をご覧ください。
Read the rest of this entry »

Written by admin

3月 3rd, 2010 at 2:53 pm

SiONライブラリのオリジナルマニュアル

leave a comment

これまでオリジナルのドキュメントが無かったこととライブラリをマスターすると言う意味合いで勝手な解説文を書いてきましたが、昨日からSiONライブラリの開発者自身の手によるオリジナルマニュアルがスタートしたようなので今後はそちらをどうぞ。

■ Simple Inspiration(開発者の方のブログ)

↓ 解説ドキュメントは以下のような項目になるようです。

Written by admin

9月 18th, 2009 at 12:36 am

SiONをやってみよう・・・基本編5:MML再生のおさらい

leave a comment

これまで解説してきたSiONでMMLを再生する方法をおさらいしてみましょう。

まず基本手順です:

基本→ SiONDriverクラスのインスタンスを生成する。

var driver:SiONDriver = new SiONDriver();

再生方法→(1) play()メソッドで再生する(MMLデータ(文字列)を引数として直接渡す)。
※MMLでテンポを指定しなかった場合の初期値は、120です。

driver.play("t100 l8 [ccggaag4 ffeeddc4 | [ggffeed4]2 ]2");

再生方法→(2) play()メソッドで再生する(MMLデータをSiONData型にコンパイルし引数として渡す)。
※SiONに於けるMMLシーケンスの基本的な再生方法はこれ!

var mainMelody:SiONData;//SiONData型を宣言
mainMelody = driver.compile("t100 l8 [ccggaag4 ffeeddc4 | [ggffeed4]2 ]2");
driver.play(mainMelody);

再生方法→(3) sequenceOn()メソッドで再生する(MMLデータをSiONData型にコンパイルし引数として渡す)。
引数の詳細は「基本編4:PresetVoiceを使う」を参照
※ play()メソッドで再生したMMLにシーケンスを同期することが可能

var mainMelody:SiONData;//SiONData型を宣言
mainMelody = driver.compile("t100 l8 [ccggaag4 ffeeddc4 | [ggffeed4]2 ]2");
//play()メソッドはsequenceOn()の前に必要
driver.play();//ストリーム開始
driver.sequenceOn(mainMelody, null, 0, 0, 0);

MMLの内容解説

MMLの内容解説

MML(シーケンス)を再生すると言う趣旨で見ると以上のような三つのスタイルだと思われますが、あくまで参考程度にどうぞ!

Written by admin

9月 5th, 2009 at 1:29 am

SiONをやってみよう・・・基本編4:PresetVoiceを使う

leave a comment

SiONには、パラメータ定義済みの音色セット(PresetVoice)がいくつか用意されているのでMMLの再生にそれを使ってみましょう。

使い方は、以下のコードをご覧ください。

同梱サンプル「SyncSequence.as」を修正してより単純なものにしてみました。

ボタン1とボタン2に違うプリセットボイスをアサインしただけのものです。

主な手順は:
(1)SiONPresetVoiceクラスのインスタンスを生成(プリセットリスト)
(2)SiONVoice型変数を宣言
(3)プリセットリストから任意のプリセットを取得して変数にセット
(4)driver.sequenceOn()メソッドの第二引数にセットする

プリセットリストから任意の音色を引っ張ってくるにはプリセット名が必要なのであらかじめ音色名を知っておく必要があります。(下記のパスにあるSiONPresetVoice.asに音色名が定義されています)

import org.si.sion.utils.SiONPresetVoice;

実際の使い方は以下のサンプルコードをご覧ください。

package {
    import flash.display.Sprite;
    import flash.events.*;
    import com.bit101.components.*;
    import org.si.sion.*;
    import org.si.sion.utils.SiONPresetVoice;
    [SWF(width = "300", height = "150", backgroundColor = "#FFFFFF")]
    public class PlayWithPreseVoicet extends Sprite {
        // SiONDriverクラスのインスタンスを生成
        public var driver:SiONDriver = new SiONDriver();
        // SiONPresetVoiceクラスのインスタンスを生成
        public var presetVoice:SiONPresetVoice = new SiONPresetVoice();
        // SiONVoice型変数を宣言
        public var voice1:SiONVoice;
        public var voice2:SiONVoice;
        // SiONData型変数を宣言
        public var mainMelody:SiONData;
        function PlayWithPreseVoicet() {
		//MMLをSiONData型にコンパイル
            mainMelody    = driver.compile("t100 l8 [ccggaag4 ffeeddc4 | [ggffeed4]2 ]2")
            //SiONVoice型変数にプリセットボイスを設定
            voice1 = presetVoice["valsound.piano8"];
            voice2 = presetVoice["valsound.wind1"];
            //ボタンコンポーネント(ボタン1、2)
			new PushButton(this,  20, 50, "Button1-piano8", _play_preset1);
            new PushButton(this, 170, 50, "Button2-wind1", _play_preset2);
            driver.play();
        }
        // ボタン1のアクション
        private function _play_preset1(e:MouseEvent) : void {
			// 第一引数にSiONData、第二引数にSiONVoice、第三引数以降は、length=0(play all of sequence), delay=0(no delay), quantize=2(8th beat)
            driver.sequenceOn(mainMelody, voice1, 0, 0, 2);
        }
		// ボタン2のアクション
         private function _play_preset2(e:MouseEvent) : void {
			 // ボタン1と同じでプリセットボイスのみ違う
            driver.sequenceOn(mainMelody, voice2, 0, 0, 2);
        }
    }
}

ここでは、driver.sequenceOn()メソッドを使ってSiONData型にコンパイルされたMMLをプリセット音色指定付きで再生しています。
第一引数は、SiONData、第2引数は、SiONVoice((null可)、第三引数以降は、length=0(シーケンス全体を再生), delay=0(ディレイ無し), quantize=2(8分音符でタイミングを合わせる)
(第三引数以降は要注意です)
クゥオンタイズに関しては既に再生されているシーケンスに同期させる必要がない再生の場合は、 quantize=0で良いのではないかと思われます。
最後の引数はTrackIDです。初期値は0で省略可です。

下記コードの場合、play()メソッドで既に再生しているMMLがあった場合、スタートのタイミングが8分音符でクォンタイズされます。

driver.sequenceOn(mainMelody, voice1, 0, 0, 2(,0));

第二引数にnullを設定した場合は、初期値が適用されます。

driver.sequenceOn(mainMelody, null, 0, 0, 2(,0));

実行サンプル

Read the rest of this entry »

Written by admin

8月 31st, 2009 at 11:22 pm