さまざまなイベント (ボタンのホバー、クリックなど) で再生される非常に短い (1 秒未満の長さの) オーディオ クリップがいくつかあります。ただし、通常、アクションと実際のサウンド再生の間にはかなりのタイムラグがあります。サウンドを .swf に埋め込むことと、最初に外部からロードすることの両方を試みましたが、どちらも同じ結果になります。同様に、圧縮されたオーディオと圧縮されていないオーディオを試しました。
どうやら、オーディオ バッファが必要以上に長いようです。たとえば、Flash は、サウンドを開始する際の遅延を犠牲にして、途切れることなく長いサウンドを再生するように最適化されているようです。これでしょうか?それらを変更する方法はありますか?私が取り組んでいるものは、1 秒以上のサウンドを再生する必要はなく、開始時に常に完全にロードされるため、バッファーが非常に短くても問題はありません。
原因である可能性のあるもう 1 つのこと: loadSound() を使用するときに .wav ファイルを使用すると、実際にサウンドを再生することができません。エラーはなく、すべて正常に戻りますが、実際のサウンドは再生されません。そのため、現在 .mp3 として持っています。.mp3 オーディオ (または任意の圧縮オーディオ) を使用している場合、デコードに遅延が発生するのでしょうか? ただし、これについてまだ疑問を持っている理由は、それらを .wav ファイルとして (ライブラリにインポートすることによって) .swf に埋め込む場合でも、再生時に同じレイテンシーが発生するためです。
健全性チェックのために、無関係な部分とエラー チェックを除いて、取得したコードを含めます。まず、実行時にそれらをロードします。
var soundArray:Array = new Array();
loadSound( "click", "sounds/buttondroop4.mp3" );
loadSound( "hover", "sounds/Dink-Public_D-146.mp3" );
function loadSound( name:String, url:String ):void
{
var req:URLRequest = new URLRequest( url );
soundArray[ name ] = new Sound( req );
soundArray[ name ].addEventListener( Event.COMPLETE, soundLoaded );
}
function soundLoaded( event:Event ):void
{
for( var name:String in soundArray )
{
if( event.target == soundArray[name] )
{
trace( "Loaded sound [" + name + "]" );
return;
}
}
}
function playSound( name:String ):void
{
for( var nameSrc:String in soundArray )
{
if( name == nameSrc )
{
var channel:SoundChannel = soundArray[ name ].play();
return;
}
}
}
// Sometime later, well after soundLoaded() callback is triggered...
playSound( "click" );
playSound( "hover" );
別の方法として、それらをクラスとしてライブラリに埋め込み、そこから移動します。
var sClick:soundClick = new soundClick();
var sHover:soundHover = new soundHover();
sClick.play();
sHover.play();
サウンド ファイルは小さく、通常は 10kb 未満です。ラグは明らかで、それを見たときに誰かが最初に不満を抱いたのは、ボタンホバーのサウンドエフェクトが遅れているように見えることだったので、うるさいのは私だけではありませんでした. 何か間違ったことをしているに違いないと感じています。この種のラグがほとんどなく、すばやいサウンドエフェクトを備えたフラッシュが多すぎます。
編集:サウンドファイル自体に関する最初の応答に応じて、私はすでにチェックしました.サウンドはファイルの先頭からすぐに始まります(サウンドの最初のミリ秒以外のすべてを切り取っても、それが作る「カチカチ」音)。