Всем привет. У меня есть часы, вместе с которыми проигрывается музыка. Так вот в программе Audacity я вырезал длину аудио-файла с точностью до миллисекунд. Длина файла равна 59 секундам, т.е. начиная с нуля секунд по часам аудио заново воспроизводится. Только вот тут нет синхронизации аудио со временем. В приложении у меня показывает длину в миллисекундах 59088.97959183673, из-за чего происходит рассинхронизация стрелок часов и аудио, т.е. повторное воспроизведение происходит когда стрелка на часах достигла 59 секунд, затем 58 и все ниже и ниже. Аудио-файл в формате mp3. На
StackOverflow было написано, что если добавить
sound.play(0, 9999), то это помогает воспроизводить без зазоров, но данный метод тоже не помог.

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.utils.Timer;
public class Main extends Sprite
{
private var _date:Date;
private var _timer:Timer;
private var _hours:*;
private var _minutes:*;
private var _seconds:*;
private var _sound:Sound;
private var _soundChannel:SoundChannel;
public function Main()
{
_date = new Date();
_hours = _date.hours;
_minutes = _date.minutes;
_seconds = _date.seconds;
_timer = new Timer(1000);
_sound = new ClockSnd();
// При старте перейти ко времени в соответствии с текущей секундой.
_soundChannel = _sound.play(_seconds * 1000);
_soundChannel.addEventListener(Event.SOUND_COMPLETE, playbackCompleteHandler);
updateClock();
_timer.addEventListener(TimerEvent.TIMER, startClock);
_timer.start();
}
private function playSound():void
{
_soundChannel = _sound.play();
_soundChannel.addEventListener(Event.SOUND_COMPLETE, playbackCompleteHandler);
}
private function playbackCompleteHandler(event:Event):void
{
SoundChannel(event.currentTarget).removeEventListener(event.type, playbackCompleteHandler);
playSound();
}
private function startClock(event:TimerEvent):void
{
_date = new Date();
_hours = _date.hours;
_minutes = _date.minutes;
_seconds = _date.seconds;
updateClock();
}
private function updateClock():void
{
if (String(_minutes).length < 2)
{
_minutes = "0" + _minutes;
}
if (String(_seconds).length < 2)
{
_seconds = "0" + _seconds;
}
}
}
}