Показать сообщение отдельно
Старый 11.02.2014, 14:26
helio вне форума Посмотреть профиль Отправить личное сообщение для helio Найти все сообщения от helio
  № 1  
Ответить с цитированием
helio

Регистрация: Nov 2013
Сообщений: 47
По умолчанию Неточная длина аудио

Всем привет. У меня есть часы, вместе с которыми проигрывается музыка. Так вот в программе 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;
			}
		}
	}
}