Package | sora.graybox |
Class | public class GrayBox |
Inheritance | GrayBox ![]() |
============= Main.as ============= package { import flash.display.Sprite; import flash.events.SampleDataEvent; import flash.media.Sound; import flash.utils.ByteArray; import sora.graybox.GrayBox; public class Main extends Sprite { private var _sound:Sound; // ストリーミング再生を行うオブジェクト public const AUDIO_CHANNELS:int = 2; // オーディオチャンネル数 public const SAMPLE_RATE:Number = 44100.0; // サンプリングレート public const BLOCK_SIZE:int = 4096; // ブロックサイズ(バッファサイズ) public var audioBuffer:Vector.<Vector.<Number>>; // オーディオバッファ public var grayBox:GrayBox; // GrayBoxシステム基幹オブジェクト(モジュラーホスト) public var noiseGen:NoiseGenerator; // ノイズジェネレーター(モジュール) // 音声データ要求時実行のイベントハンドラー(AFLASH,AIR環境の場合) private function _sampleDataEvent(e:SampleDataEvent):void { // オーディオバッファのクリア --> var _outL:Vector.<Number> = audioBuffer[0], _outR:Vector.<Number> = audioBuffer[1]; for (var i:int = 0; i < BLOCK_SIZE; i++) { _outL[i] = 0.0; _outR[i] = 0.0; } // GrayBoxによる音声処理 --> // GrayBox.process()メソッドを使用して音声処理を行います。 // 第1引数 : 書き込みを行うオーディオバッファ // 第2引数 : 書き込み開始フレーム // 第3引数 : 書き込みフレーム数 // ・今回はオーディオバッファ全体を使うので、開始フレームが0、書き込みフレーム数が4096 // ・スロットナンバー0から順にモジュール側のIGrayBoxModule.process()メソッドが呼ばれます。 grayBox.process(audioBuffer, 0, BLOCK_SIZE); // オーディオバッファからストリームへ書き込み --> var _stream:ByteArray = e.data; for (i = 0; i < BLOCK_SIZE; i++) { _stream.writeFloat(_outL[i]); _stream.writeFloat(_outR[i]); } } // コンストラクター public function Main():void { // エントリーポイント --> // ストリーミング再生を行うオブジェクト構築 --> _sound = new Sound(); // オーディオバッファ作成 --> audioBuffer = new Vector.<Vector.<Number>>(2, true); audioBuffer[0] = new Vector.<Number>(BLOCK_SIZE, true); // チャンネル L audioBuffer[1] = new Vector.<Number>(BLOCK_SIZE, true); // チャンネル R // GrayBoxの構築 --> // 第1引数 : ブロックサイズ ( 1~ ) FLASH,AIR環境は2048~8192フレーム // 第2引数 : サンプリングレート[Hz] ( 1~ ) FLASH,AIR環境は44100Hz固定 // 第3引数 : オーディオチャンネル数 ( 2~ ) FLASH,AIR環境はLR2チャンネル固定 // 第4引数 : モジュールスロット数 ( 1~ ) 今回はモジュールが1つなので1 // ・初期値は必須パラメーターですが、構築時に確定できない場合は暫定値で構いません。 // その場合はストリーミングを開始する前に確定させてください。 // 関連メソッド // ブロックサイズ -> GrayBox.setProcessBlockSize() // サンプリングレート -> GrayBox.setSampleRate() // チャンネル数 -> GrayBox.setAudioChannels() // スロット数 -> GrayBox.setModuleSlots() grayBox = new GrayBox(BLOCK_SIZE, SAMPLE_RATE, AUDIO_CHANNELS, 1); // 各GrayBoxモジュールの構築 --> // ノイズ音を出力し続けるモジュール noiseGen = new NoiseGenerator(); // モジュールの接続 --> // GrayBox.attachModule()メソッドを使用し、ホストへモジュールを接続します。 // 第1引数 : 接続するスロットのインデックス // 第2引数 : 接続するモジュールオブジェクト // 接続されたモジュールは接続スロットの先頭から順に処理が行われます。 grayBox.attachModule(0, noiseGen); // ストリーミングの開始 --> _sound.addEventListener(SampleDataEvent.SAMPLE_DATA, _sampleDataEvent); _sound.play(); } } } ======== NoiseGenerator.as ======== package { import sora.graybox.GrayBox; import sora.graybox.IGrayBoxModule; import sora.graybox.ProcessData; // ノイズジェネレーターモジュール public class NoiseGenerator implements IGrayBoxModule { public var volume:Number = 0.1; // 音量 // コンストラクター public function NoiseGenerator():void {} // sora.graybox.IGrayBoxModule --> // ホストのサンプリングレートが変更された時に呼ばれるメソッド // GrayBox.setSampleRate() -> このメソッド public function updateSampleRate(sampleRate:Number):void{} // ホストのオーディオチャンネル数が変更された時に呼ばれるメソッド // GrayBox.setAudioChannels() -> このメソッド public function updateAudioChannels(ch:int):void{} // ホストのプロセスブロックサイズが変更された時に呼ばれるメソッド // GrayBox.setProcessBlockSize() -> このメソッド public function updateProcessBlockSize(size:int):void{} // ホストのGrayBox.resetModules()メソッドが使用された時に呼ばれるメソッド // GrayBox.resetModules() -> このメソッド public function resetModule():void{ volume = 0.1; } // ホストのGrayBox.initiModules()メソッドが使用された時に呼ばれるメソッド // GrayBox.initiModules() -> このメソッド public function initiModule():void{ volume = 0.1; } // このモジュールがホストへ接続された時に呼ばれるメソッド // GrayBox.attachModule() -> このメソッド public function connectModule(host:GrayBox):void{} // このモジュールがホストから取り外された時に呼ばれるメソッド // GrayBox.detachModule() -> このメソッド public function disconnectModule():void{} // このモジュールが接続されているスロットの、バイパス状況が更新された時に呼ばれるメソッド // GrayBox.bypassProcess() -> このメソッド public function updateBypassStatus(bypass:Boolean):void{} // ホストのGrayBox.startProcess()メソッドが使用された時に呼ばれるメソッド // GrayBox.startProcess() -> このメソッド public function startProcess():void{} // ホストのGrayBox.stopProcess()メソッドが使用された時に呼ばれるメソッド // GrayBox.stopProcess() -> このメソッド public function stopProcess():void{} // ホストのGrayBox.suspendProcess()メソッドが使用された時に呼ばれるメソッド // GrayBox.suspendProcess() -> このメソッド public function suspendProcess():void{} // ホストのGrayBox.resumeProcess()メソッドが使用された時に呼ばれるメソッド // GrayBox.resumeProcess() -> このメソッド public function resumeProcess():void{} // ホストが音声処理を実行した時に呼ばれるメソッド // GrayBox.process() -> このメソッド public function process(procData:ProcessData):void { // 音声処理準備 --> // ProcessDataオブジェクトはホストから音声処理に必要な情報を受け取り、 // 各モジュールへ伝えるオブジェクトです。 // ここではホストから渡されたオーディオバッファを参照して音声処理行います。 var _outL:Vector.<Number> = procData.audioOut[0], // 音声出力L _outR:Vector.<Number> = procData.audioOut[1], // 音声出力R _startFrame:int = procData.offsetFrames, // 音声処理開始フレーム _endFrame:int = _startFrame + procData.sampleFrames; // 終了フレーム // 音声処理 --> for (var i:int = _startFrame; i < _endFrame; i++) { var _n:Number = Math.random() volume; // ノイズ音の生成 // オーディオバッファに対して加算代入 _outL[i] += _n; _outR[i] += _n; // このモジュールしか音声処理を行わない場合は代入だけでも良い // _outL[i] = _n; // _outR[i] = _n; } } } } ===================================
See also
Property | Defined By | ||
---|---|---|---|
_audioLatency : Number = 0.0 | GrayBox | ||
_bypassFlag : Vector.<Boolean> = null | GrayBox | ||
_defAudioLatency : Number = 0.0 | GrayBox | ||
_eventList : MidiEvent = null | GrayBox | ||
_modules : Vector.<IGrayBoxModule> = null | GrayBox | ||
_moduleSlots : int = 0 | GrayBox | ||
_processData : ProcessData = null | GrayBox |
Method | Defined By | ||
---|---|---|---|
GrayBox(blockSize:int, sampleRate:Number, audioChannels:int = 2, moduleSlots:int = 4)
指定したパラメーターでGrayBoxオブジェクトを構築します. | GrayBox | ||
指定したインデックスのスロットにモジュールを接続します. | GrayBox | ||
audioLatency(val:Number):void
今回の音声処理のオーディオレイテンシーを設定します. | GrayBox | ||
bypassProcess(index:int, bypass:Boolean):void
指定したインデックスのモジュールスロットの、オーディオプロセスのバイパスを設定します. | GrayBox | ||
detachModule(index:int):IGrayBoxModule
指定したインデックスのスロットに接続されているモジュールの接続を解除します. | GrayBox | ||
getAudioChannels():int
音源システムのオーディオチャンネル数を取得します. | GrayBox | ||
getBypassStatus(index:int):Boolean
指定したインデックスのモジュールスロットのバイパス状況を取得します. | GrayBox | ||
getDefaultAudioLatency():Number
音源システムの既定のオーディオレイテンシーの値を取得します. | GrayBox | ||
getModule(index:int):IGrayBoxModule
指定したインデックスのスロットに接続されているモジュールオブジェクトへの参照を取得します. | GrayBox | ||
getModuleSlots():int
音源システムのモジュールスロット数を取得します. | GrayBox | ||
getProcessBlockSize():int
音源システムのオーディオプロセスブロックサイズを取得します. | GrayBox | ||
getSampleRate():Number
音源システムのサンプリングレート値を取得します. | GrayBox | ||
initialize():void
モジュールの接続を全て解除し、音源システムを初期化します. | GrayBox | ||
initiModules():void
接続されている全てのモジュールを初期化します. | GrayBox | ||
process(audioOut:Vector.<Vector.<Number>>, offsetFrames:int, sampleFrames:int):void
今回の音声処理を行います. | GrayBox | ||
resetModules():void
接続されている全てのモジュールの状態をリセットします. | GrayBox | ||
resumeProcess():void
接続されているモジュールに音声処理が再開されたことを通知します. | GrayBox | ||
setAudioChannels(ch:int):int
音源システムのオーディオチャンネル数を設定します. | GrayBox | ||
setDefaultAudioLatency(val:Number):void
音源システムの、既定のオーディオレイテンシーを設定します. | GrayBox | ||
setModuleSlots(num:int):int
音源システムのモジュールスロット数を設定します. | GrayBox | ||
setProcessBlockSize(size:int):int
音源システムのプロセスブロックサイズを設定します. | GrayBox | ||
setSampleRate(sampleRate:Number):Number
音源システムのサンプリングレートを設定します. | GrayBox | ||
startProcess():void
接続されているモジュールに音声処理が開始されたことを通知します. | GrayBox | ||
stopProcess():void
接続されているモジュールに音声処理が停止されたことを通知します. | GrayBox | ||
suspendProcess():void
接続されているモジュールに音声処理が一時停止状態であることを通知します. | GrayBox |
Method | Defined By | ||
---|---|---|---|
_clearProcessData():void | GrayBox |
_audioLatency | property |
protected var _audioLatency:Number = 0.0
_bypassFlag | property |
protected var _bypassFlag:Vector.<Boolean> = null
_defAudioLatency | property |
protected var _defAudioLatency:Number = 0.0
_eventList | property |
protected var _eventList:MidiEvent = null
_modules | property |
protected var _modules:Vector.<IGrayBoxModule> = null
_moduleSlots | property |
protected var _moduleSlots:int = 0
_processData | property |
protected var _processData:ProcessData = null
GrayBox | () | Constructor |
public function GrayBox(blockSize:int, sampleRate:Number, audioChannels:int = 2, moduleSlots:int = 4)
指定したパラメーターでGrayBoxオブジェクトを構築します.
省略不可パラメーターはオブジェクト構築時に不明の場合は暫定値を設定しても構いません。 その場合はGrayBox.process()
メソッドを実行する前に正しい値を設定してください。
Parameters blockSize:int — 音源システムのプロセスブロックサイズを設定します。(1 - 無制限)
| |
sampleRate:Number — 音源システムのサンプリングレート(Hz)を設定します。(1.0 - 無制限)
| |
audioChannels:int (default = 2 ) — 音源システムのオーディオチャンネル数を設定します。(2 - 無制限)
| |
moduleSlots:int (default = 4 ) — プラグインモジュールのスロット数を設定します。(1 - 無制限)
|
_clearProcessData | () | method |
protected function _clearProcessData():void
attachModule | () | method |
public function attachModule(index:int, module:IGrayBoxModule):IGrayBoxModule
指定したインデックスのスロットにモジュールを接続します.
接続後、モジュールのIGrayBoxModule.connectModule()
メソッドが呼ばれます。
既にモジュールが接続されている場合は、そのモジュールの接続解除を行った後に接続を行います。
モジュールの接続が解除された際にはIGrayBoxModule.disconnectModule()
メソッドが呼ばれます。
このメソッドはprocess()
メソッド外で使用してください。
Parameters
index:int —
0から始まるスロットのインデックス値
| |
module:IGrayBoxModule —
接続するモジュール
|
IGrayBoxModule —
正常に接続できた場合、接続したモジュールへの参照が返ります。
範囲外のインデックスを指定した場合はnull が返ります。
|
See also
audioLatency | () | method |
public function audioLatency(val:Number):void
今回の音声処理のオーディオレイテンシーを設定します.
ここで設定したレイテンシーはprocess()
メソッド実行まで有効です。
実行後、既定のレイテンシーに再設定されます。
Parameters
val:Number — オーディオレイテンシーの値(mSec)
|
See also
bypassProcess | () | method |
public function bypassProcess(index:int, bypass:Boolean):void
指定したインデックスのモジュールスロットの、オーディオプロセスのバイパスを設定します.
オーディオプロセスをバイパス(true
)するとモジュールの音声処理が行われません
(process()
メソッド実行時にIGrayBoxModule.process()
メソッドがスキップされます)。
バイパスフラグ設定後、該当スロットに接続されているモジュールの
IGrayBoxModule.updateBypassStatus()
メソッドが呼ばれます。
このメソッドはprocess()
メソッド外で使用してください。
Parameters
index:int — 0から始まるスロットのインデックス値
| |
bypass:Boolean — true でバイパス
|
See also
detachModule | () | method |
public function detachModule(index:int):IGrayBoxModule
指定したインデックスのスロットに接続されているモジュールの接続を解除します.
モジュールの接続が解除された際にIGrayBoxModule.disconnectModule()
メソッドが呼ばれます。
このメソッドはprocess()
メソッド外で使用してください。
Parameters
index:int —
0から始まるスロットのインデックス値
|
IGrayBoxModule —
接続されているモジュールへの参照。
指定したインデックスのスロットにモジュールが接続されていない場合はnull を返します。
範囲外のインデックスを指定した場合も同様です。
|
See also
getAudioChannels | () | method |
public function getAudioChannels():int
音源システムのオーディオチャンネル数を取得します.
Returnsint — オーディオチャンネル数
|
getBypassStatus | () | method |
public function getBypassStatus(index:int):Boolean
指定したインデックスのモジュールスロットのバイパス状況を取得します.
対象のモジュールスロットがバイパスされている場合、true
を返します。
指定したインデックスのスロットにモジュールが接続されていない場合、
および範囲外のインデックスを指定した場合、true
を返します。
Parameters
index:int — 0から始まるスロットのインデックス値
|
Boolean — モジュールスロットのバイパス状況
|
getDefaultAudioLatency | () | method |
public function getDefaultAudioLatency():Number
音源システムの既定のオーディオレイテンシーの値を取得します.
ReturnsNumber — オーディオレイテンシーの値(mSec)
|
getModule | () | method |
public function getModule(index:int):IGrayBoxModule
指定したインデックスのスロットに接続されているモジュールオブジェクトへの参照を取得します.
スロットにモジュールが接続されていない場合はnull
を返します。
範囲外のインデックスを指定した場合も同様にnull
を返します。
Parameters
index:int — 0から始まるスロットのインデックス値
|
IGrayBoxModule — モジュールオブジェクトへの参照
|
getModuleSlots | () | method |
public function getModuleSlots():int
音源システムのモジュールスロット数を取得します.
Returnsint — モジュールスロット数
|
getProcessBlockSize | () | method |
public function getProcessBlockSize():int
音源システムのオーディオプロセスブロックサイズを取得します.
Returnsint — オーディオプロセスブロックサイズ
|
getSampleRate | () | method |
public function getSampleRate():Number
音源システムのサンプリングレート値を取得します.
ReturnsNumber — サンプリングレート値(Hz)。
|
initialize | () | method |
public function initialize():void
モジュールの接続を全て解除し、音源システムを初期化します.
初期化される内容は次の通りです。IGrayBoxModule.disconnectModule()
メソッドが呼ばれます。
See also
initiModules | () | method |
public function initiModules():void
接続されている全てのモジュールを初期化します.
resetModule()
メソッドと機能が重複しますが、こちらは工場出荷時に戻すような強い初期化です。
モジュールのIGrayBoxModule.initiModule()
メソッドが呼ばれます。
このメソッドはprocess()
メソッド外で使用してください。
See also
process | () | method |
public function process(audioOut:Vector.<Vector.<Number>>, offsetFrames:int, sampleFrames:int):void
今回の音声処理を行います.
このメソッドを実行すると接続されているモジュールのIGrayBoxModule.process()
メソッドが呼ばれます。
パラメーターの値はProcessDataオブジェクトへ渡されます。
各モジュールはメソッドを通じProcessDataオブジェクトを参照して必要な処理を行います。
なお、モジュールが接続されているスロットのバイパスフラグがtrue
の場合、
IGrayBoxModule.process()
メソッドは呼ばれません。
Parameters
audioOut:Vector.<Vector.<Number>> — 出力オーディオバッファ
| ||||||||||||||||
offsetFrames:int —
オーディオプロセスブロック先頭からのフレームオフセット
| ||||||||||||||||
sampleFrames:int —
処理を行うフレーム数
|
See also
resetModules | () | method |
public function resetModules():void
接続されている全てのモジュールの状態をリセットします.
initiModules()
メソッドと機能が重複しますが、こちらは一時的なパラメータを戻すような弱い初期化です。
モジュールのIGrayBoxModule.resetModule()
メソッドが呼ばれます。
このメソッドはprocess()
メソッド外で使用してください。
See also
resumeProcess | () | method |
public function resumeProcess():void
接続されているモジュールに音声処理が再開されたことを通知します.
モジュールのIGrayBoxModule.resumeProcess()
メソッドが呼ばれます。
このメソッドはprocess()
メソッド外で使用してください。
See also
setAudioChannels | () | method |
public function setAudioChannels(ch:int):int
音源システムのオーディオチャンネル数を設定します.
設定後、接続しているモジュールのIGrayBoxModule.updateAudioChannels()
メソッドを呼び、
新しいオーディオチャンネル数をモジュールに渡します。
このメソッドはプロセスブロック外で使用してください。
Parameters
ch:int — 設定するオーディオのチャンネル数(2~)。
|
int — 最新のオーディオチャンネル数
|
See also
setDefaultAudioLatency | () | method |
public function setDefaultAudioLatency(val:Number):void
音源システムの、既定のオーディオレイテンシーを設定します.
このメソッドはプロセスブロック外で使用してください。Parameters
val:Number — オーディオレイテンシーの値(mSec)
|
setModuleSlots | () | method |
public function setModuleSlots(num:int):int
音源システムのモジュールスロット数を設定します.
現在のモジュールスロット数より小さい値を設定した場合、 その範囲のインデックスに接続されているモジュールの接続が解除されます。 モジュールの接続が解除された際にIGrayBoxModule.disconnectModule()
メソッドが呼ばれます。
このメソッドはprocess()
メソッド外で使用してください。
Parameters
num:int — 設定するモジュールスロット数
|
int — 設定後のモジュールスロット数
|
See also
setProcessBlockSize | () | method |
public function setProcessBlockSize(size:int):int
音源システムのプロセスブロックサイズを設定します.
設定後、接続しているモジュールのIGrayBoxModule.updateProcessBlockSize()
メソッドを呼び、
新しいプロセスブロックサイズの値をモジュールに渡します。
無効な値を指定した場合は何も行いません。
このメソッドはプロセスブロック外で使用してください。
Parameters
size:int — 設定するプロセスブロックサイズの値(1~)。
|
int — 最新のプロセスブロックサイズの値。
|
See also
setSampleRate | () | method |
public function setSampleRate(sampleRate:Number):Number
音源システムのサンプリングレートを設定します.
設定後、接続しているモジュールのIGrayBoxModule.updateSampleRate()
メソッドを呼び、
新しいサンプリングレート値をモジュールに渡します。
無効な値を指定した場合は何も行いません。
このメソッドはプロセスブロック外で使用してください。
Parameters
sampleRate:Number — 設定するサンプリングレートの値(Hz)(1.0~)。
|
Number — 最新のサンプリングレート値(Hz)
|
See also
startProcess | () | method |
public function startProcess():void
接続されているモジュールに音声処理が開始されたことを通知します.
モジュールのIGrayBoxModule.startProcess()
メソッドが呼ばれます。
このメソッドはprocess()
メソッド外で使用してください。
See also
stopProcess | () | method |
public function stopProcess():void
接続されているモジュールに音声処理が停止されたことを通知します.
モジュールのIGrayBoxModule.stopProcess()
メソッドが呼ばれます。
このメソッドはprocess()
メソッド外で使用してください。
See also
suspendProcess | () | method |
public function suspendProcess():void
接続されているモジュールに音声処理が一時停止状態であることを通知します.
モジュールのIGrayBoxModule.suspendProcess()
メソッドが呼ばれます。
このメソッドはprocess()
メソッド外で使用してください。
See also