Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 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;
			}
		}
	}
}

Старый 11.02.2014, 15:28
elder_Nosferatu вне форума Посмотреть профиль Отправить личное сообщение для elder_Nosferatu Найти все сообщения от elder_Nosferatu
  № 2  
Ответить с цитированием
elder_Nosferatu
 
Аватар для elder_Nosferatu

Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
Записей в блоге: 1
Если синхронизация таймера и звука принципиальна, то плюньте на реальное время и выводите положение проигрывающей головки (_soundChannel.position) вместо реального времени и будет вам счастье.

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

Регистрация: Nov 2013
Сообщений: 47
Неужели эту проблему никак нельзя решить?

Старый 11.02.2014, 20:47
elder_Nosferatu вне форума Посмотреть профиль Отправить личное сообщение для elder_Nosferatu Найти все сообщения от elder_Nosferatu
  № 4  
Ответить с цитированием
elder_Nosferatu
 
Аватар для elder_Nosferatu

Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
Записей в блоге: 1
Цитата:
Сообщение от helio Посмотреть сообщение
Неужели эту проблему никак нельзя решить?
А почему вы решили, что проблема в флеше и решать ее нужно на стороне флеша. Может звуковой редактор вас обману и на самом деле вы не так уж и точно обрезали свой файл. Как не крути, а цифровая инфа дискретна и не всегда порция данных закончится именно там, где вы решите поставить метку. Короче, не создавайте себе лишних препятствий.

Старый 11.02.2014, 20:15
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 5  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код AS3:
private function updateClock():void
		{
			if (String(_minutes).length < 2)
			{
				_minutes = "0" + _minutes;
			}
			if (String(_seconds).length < 2)
			{
				_seconds = "0" + _seconds;
			}
		}
Таки лучше сравнивать без конвертации в стринг обычным математическим оператором "< 10".
__________________
тут я

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:12.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 20:12.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.