У меня есть несколько очень коротких аудиоклипов (длиной менее секунды) для воспроизведения на различных событиях (при наведении курсора, нажатии и т. Д.). Тем не менее, обычно существует значительный разрыв между действием и фактическим воспроизведением звука. Я пробовал как встраивать звук в .swf, так и загружать его внешне при запуске, но оба приводят к одним и тем же результатам. Точно так же я пробовал с сжатым и несжатым аудио.
То, на что похоже похоже, заключается в том, что звуковые буферы намного длиннее, чем мне нужно, например, возможно, Flash оптимизирован для воспроизведения более длинных звуков без заикания за счет немного большего задержка в стартовых звуках. Может ли это быть так? Есть ли способ их поменять? Поскольку то, над чем я работаю, никогда не будет проигрывать звуки дольше секунды или дольше и всегда будет загружаться полностью в начале, не мешало бы иметь действительно короткие буферы.
Еще одна возможная вещь, которая может быть причиной: если я использую файлы .wav при использовании loadSound () ... я не могу заставить его воспроизводить звуки. Там нет ошибок, и все возвращается, как и должно быть, но реальный звук не воспроизводится, поэтому у меня они сейчас в формате .mp3. Возможно, при использовании аудио .mp3 (или любого сжатого аудио), будет просто отставание в его декодировании? Причина, по которой я до сих пор сомневаюсь в этом, заключается в том, что при встраивании их в файлы .swf как файлы .wav (путем импорта их в библиотеку) они по-прежнему имеют одинаковую задержку при воспроизведении.
Просто для проверки работоспособности я включу полученный код, за исключением ненужных частей и проверки ошибок. Сначала загружаем их во время выполнения:
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();
Звуковые файлы крошечные, обычно менее 10 КБ. Задержка достаточно очевидна, и одна из первых жалоб, которую кто-то испытывал, глядя на нее, заключалась в том, что звуковые эффекты при наведении на кнопки казались отсроченными, так что не только я привередничал. Я чувствую, что просто делаю что-то не так; есть слишком много флеш-вещей, которые имеют быстрые звуковые эффекты, и нет нигде подобного лага.
edit: В ответ на первый ответ о самих звуковых файлах я уже проверил, и звук начинается сразу в начале файла (даже обрывая все, кроме самой первой миллисекунды звука, я все еще слышу начало «тикового» шума, которое он издает).