Syrinx Sound Manager
v0.6
AurélienDaCampo(Adolio)
デモフォルダーに移動し、プロジェクトを構成して実行するか、最新リリースを取得した場合、デモバイナリはアーカイブで利用可能になります。
トラックを登録し、サウンドをインスタンス化するメインクラス。次の例では、2つのトラック(MP3とWAV)を登録し、トリミングとサンプリングオプションをセットアップします。次に、3つの音がインスタンス化されます。
// Embedded sounds (Note that WAV files requires a mime type)
[ Embed( source = "../media/sound/engine.mp3" ) ] public static const EngineSoundMp3 : Class ;
[ Embed( source = "../media/sound/engine.wav" , mimeType = "application/octet-stream" ) ] public static const EngineSoundWav : Class ;
private var _soundManager : SoundManager ;
public function SoundManagerExample()
{
// Create Sound Manager
_soundManager = new SoundManager();
_soundManager.maxChannelCapacity = 8; // Limit number of simultaneous playing sounds (for this sound manager only)
_soundManager.isPoolingEnabled = true; // Enable pooling to re-used already instantiated sounds and reduce GC impacts
// Register sounds
var engineSoundMp3Config:TrackConfiguration = _soundManager.registerTrack( "Engine 1" , new Mp3Track(new EngineSoundMp3())); // Register a MP3 track
var engineSoundWavConfig:TrackConfiguration = _soundManager.registerTrack( "Engine 2" , new WavTrack(new EngineSoundWav())); // Register a WAV track
// Trimming configuration
engineSoundMp3Config.findTrim(0.01); // Find start & end trim durations to remove silences inherent to mp3 format (with a silent threshold of 0.01)
// Sampling rate configuration
engineSoundWavConfig.sampling = 4096; // This defines how much samples are read per sampling request. The value must be between 2048 (included) and 8192 (included).
// Base volume configuration for mastering
engineSoundMp3Config.baseVolume = 0.5; // Custom mastering at track configuration level, the sound can now be player at 1.0 but will still be influenced by this mastering.
// Play sounds
var engine1_once:SoundInstance = _soundManager.play( "Engine 1" , 1.0); // Play once
var engine1_twice:SoundInstance = _soundManager.play( "Engine 1" , 1.0, 0, 1); // Play twice (repeat once)
var engine2_infinite:SoundInstance = _soundManager.play( "Engine 2" , 1.0, 0, -1); // Play infinite
// Control master volume
_soundManager.volume = 0.8;
}制御できる音のインスタンス。次の例は、サウンドイベントを聴く方法、サウンドを制御する方法、それに関するさまざまな情報を取得する方法を示しています。
var si : SoundInstance = _soundManager . play ( "Engine 1" , 1.0 , 1337 , 5 ) ; // Play at max volume, starting at 1,337 sec., 6 times (looping 5 times)
//-----------------------------------------------------------------------------
//-- Events
//-----------------------------------------------------------------------------
si . started . add ( function (si : SoundInstance) : void { trace( "Sound started. " + si.type); } ) ;
si . stopped . add ( function (si : SoundInstance) : void { trace( "Sound stopped. " + si.type); } ) ;
si . paused . add ( function (si : SoundInstance) : void { trace( "Sound paused. " + si.type); } ) ;
si . resumed . add ( function (si : SoundInstance) : void { trace( "Sound resumed. " + si.type); } ) ;
si . completed . add ( function (si : SoundInstance) : void { trace( "Sound completed. " + si.type); } ) ;
si . destroyed . add ( function (si : SoundInstance) : void { trace( "Sound destroyed. " + si.type); } ) ;
//-----------------------------------------------------------------------------
//-- Controls
//-----------------------------------------------------------------------------
// Execution controls
si . pause () ;
si . resume () ;
si . stop () ;
si . play ( 0.5 , 0 , 1.0 ) ; // (Re)play twice (repeat once)
// Position
si . position = 1337 ; // In milliseconds
si . positionRatio = 0.5 ; // This includes the loops so here it will play only the second loop!
// Mute
si . isMuted = true ;
si . isMuted = false ;
// Volume
si . volume = 0 ;
si . volume = 0.8 ;
// Pan
si . pan = - 0.5 ; // Half left
// Pitch
si . pitch = 0.8 ; // 20% slower
si . pitch = 1.2 ; // 20% faster
si . pitch = 1.0 ; // Back to default
//-----------------------------------------------------------------------------
//-- Status info
//-----------------------------------------------------------------------------
trace ( "Type: " + si . type ) ; // Type
trace ( "Volume: " + si . volume ) ; // Volume
trace ( "Mixed volume: " + si . mixedVolume) ; // Equals to _soundManager.volume * volume
trace ( "Pan: " + si . pan ) ; // Pan
trace ( "Pitch: " + si . pitch) ; // Pitch
trace ( "Sound length: " + si . length ) ; // One loop length in milliseconds (trimmed)
trace ( "Sound total length: " + si . totalLength) ; // Total length in milliseconds (including loops & trim durations)
trace ( "Loops: " + si . loops ) ; // Total loops
trace ( "Current loop: " + si . currentLoop) ; // Current loop (-1 = infinite, 0 = first play, 1 = second play, etc.)
trace ( "Remaining loops: " + si . loopsRemaining) ; // Remaining loops
trace ( "Remaining time: " + si . remainingTime) ; // Remaining time in milliseconds
trace ( "Current position: " + si . position ) ; // Current position in milliseconds
trace ( "Current position (ratio): " + si . positionRatio) ; // Current position (ratio, between 0..1)
trace ( "Is started: " + si . isStarted) ; // Is started?
trace ( "Is playing: " + si . isPlaying ) ; // Is playing?
trace ( "Is paused: " + si . isPaused) ; // Is paused?
trace ( "Is muted: " + si . isMuted) ; // Is muted?
trace ( "Is destroyed: " + si . isDestroyed) ; // Is destroyed?プーリングは、すでにインスタンス化されたSound Instancesを再利用することにより、メモリの消費を大幅に削減できます。これにより、 Garbage Collector通過によって引き起こされるラグを最小限に抑える必要があります。したがって、この機能は、アプリケーションで多くの同一のサウンドを再生する場合に非常に便利です(たとえば、プレーヤーの足音、射手の軍隊によって投げられた矢など)。
この方法でプーリング機能を有効にすることができます。
_soundManager . isPoolingEnabled = true ;重要: Sound Instanceが完了すると、プールに自動的に返されます。完成したSound Instancesへの参照を保持しないことに注意してください。
無限のループサウンド(シームレスループサウンドなど)は、次の方法を呼び出すことでプールに手動で返すことができます。
_soundManager . releaseSoundInstanceToPool(mySound) ;重要:プーリング機能がアクティブな場合、 Sound Instances破壊しないでください。これにより、オブジェクトのリサイクルメカニズムが破損します。
TrackConfiguration.findTrim()ユーティリティメソッドを使用して構成することです。classpathにsrcフォルダーを追加するか、ソースフォルダーのsrcフォルダーのコンテンツをコピーします。または
.swcファイルを使用します。依存関係を含めることを忘れないでください(以下を参照)。
libsフォルダーに含まれる)