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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.04.2013, 22:54
RedLizard вне форума Посмотреть профиль Отправить личное сообщение для RedLizard Найти все сообщения от RedLizard
  № 1  
Ответить с цитированием
RedLizard
 
Аватар для RedLizard

Регистрация: Feb 2008
Сообщений: 21
По умолчанию Шорох при уменьшении громкости.

При нажатии на клавишу начинается проигрывание звука:

Код AS3:
soundChannel = sound.play();
При отпускании клавиши в цикле запускается уменьшение громкости на 0.1 за шаг:

Код AS3:
for(var cnt1:int = 10;cnt1 < 0;cnt1++)
{
    soundChannel.soundTransform = new SoundTransform(cnt1/10);
}
В результате возникает непонятный баг, на звук накладывается шум и треск. Это похоже на тот эффект, когда на старой технике звук регулируется изношенным переменным резистором. Даже не знаю в какую сторону копать для лечения этой проблемы.

И вторая беда. При повторном нажатии на одну и ту же клавишу, старый звук останавливаю, новый проигрываю:

Код AS3:
soundChannel.stop();
soundChannel = sound.play();
В результате если быстро нажимать на одну и ту же клавишу (т.е. быстро создавать/останавливать звук) появляются щелчки. Что тоже непонятно.

В живую попробовать проблему можно здесь http://www.pixorama.ru/demo/piano

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Приведенный код ни разу не выполнится, так что непонятно что здесь обсуждать.
Не говоря уже о том, что совершенно непонятно, зачем тут вообще нужен цикл.
__________________
Reality.getBounds(this);

Старый 30.04.2013, 23:41
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 3  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Звук в цикле уменьшать без толку... Цикл мгновенно отработает. Что-бы сделать затухание нужно учесть время между шагами. Возможно из-за этого и щелчок.
Еще щелчок возможен из-за того, что вы в каждой итерации назначаете новый класс SoundTransform, хоть это и маловероятно но все же...

Добавлено через 2 минуты
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Приведенный код ни разу не выполнится, так что непонятно что здесь обсуждать.
Не говоря уже о том, что совершенно непонятно, зачем тут вообще нужен цикл.
У, шайтан... Я даже не обратил внимания на условия цикла...

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

Регистрация: Feb 2008
Сообщений: 21
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Приведенный код ни разу не выполнится, так что непонятно что здесь обсуждать.
Не говоря уже о том, что совершенно непонятно, зачем тут вообще нужен цикл.
Ну естественно это псевдокод. Да в цикле ошибку допустил -- должен быть. Это не принципиально. Вопрос в другом, код для большей наглядности приведен.

Добавлено через 2 минуты
Цитата:
Сообщение от Партизан Посмотреть сообщение
Звук в цикле уменьшать без толку... Цикл мгновенно отработает. Что-бы сделать затухание нужно учесть время между шагами. Возможно из-за этого и щелчок.
Еще щелчок возможен из-за того, что вы в каждой итерации назначаете новый класс SoundTransform, хоть это и маловероятно но все же...

Добавлено через 2 минуты

У, шайтан... Я даже не обратил внимания на условия цикла...
Ну не важно, пусть не в цикле, пусть по таймеру с задержкой в 100 миллисекунд, у меня так и сделано, здесь просто для краткости так написал. Непонятно откуда берется шуршание.

Добавлено через 55 минут
Нагуглил кучу топиков с описанием подобной проблемы, и все без решения. Вот тут та же самая проблема, только звук уменьшается твинером http://stackoverflow.com/questions/1...ding-sound-as3

Старый 01.05.2013, 01:18
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 5  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Ну может вам это поможет. У меня прекрасно работает, без щелчков.
Код AS1/AS2:
package
{
	import com.greensock.TweenMax;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.media.Sound;
	import flash.media.SoundChannel;
	import flash.media.SoundTransform;
	import flash.net.URLRequest;
 
 
	/**
	 * ...
	 * @author Mikhail Klabukov
	 */
	public class BackgroundSound
	{
		static public const SOUND_OFF:String = "soundOff";
		static public const SOUND_ON:String = "soundOn";
		private var sound:Sound;
		private var channel:SoundChannel
		private var played:Boolean = false;
		private var _pos:Number;
		private var st:SoundTransform;
 
		public function BackgroundSound()
		{
			sound = new Sound(new URLRequest('**********soundUrl**********'));
			sound.addEventListener(IOErrorEvent.IO_ERROR, errorSoundLoad)
			channel = sound.play(0, 10000);
			played = true;
			MainControls.self.addEventListener(MainControls.SOUND_SWITCH, switchSound);
		}
 
		private function errorSoundLoad(e:IOErrorEvent):void
		{
			trace(e)
		}
 
		private function switchSound(e:Event):void
		{
			if (TweenMax.isTweening(st))
				return;
			st = channel.soundTransform;
			if (played)
			{
				_pos = channel.position;
				TweenMax.to(st, 2, {volume: 0, onUpdate: function():void
					{
						channel.soundTransform = st;
					}, onComplete: function():void
					{
						channel.stop();
					}});
				played = false
				MainControls.self.dispatchEvent(new Event(SOUND_OFF));
			}
			else
			{
				channel = sound.play(_pos, 10000);
 
				TweenMax.to(st, 3, {volume: 1, onUpdate: function():void
					{
						channel.soundTransform = st;
					}});
				played = true;
				MainControls.self.dispatchEvent(new Event(SOUND_ON));
 
			}
		}
 
	}
 
}

Старый 01.05.2013, 14:57
RedLizard вне форума Посмотреть профиль Отправить личное сообщение для RedLizard Найти все сообщения от RedLizard
  № 6  
Ответить с цитированием
RedLizard
 
Аватар для RedLizard

Регистрация: Feb 2008
Сообщений: 21
Цитата:
Сообщение от Партизан Посмотреть сообщение
Ну может вам это поможет. У меня прекрасно работает, без щелчков.
В том то и дело, что щелчки так же есть. Методом научного тыка удалось установить, что щелчки при быстром изменении громкости есть всегда во флеше. Просто на некоторых звуках это заметнее. Пример, берем тот же ютуб, ищем видео где играют на пианино. http://www.youtube.com/watch?v=x9a5u4JzkLg и ползунок громкости резко двигаем вверх-вниз. И получаем тоже самое шуршание что и в моем коде.

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
У меня артефактов нет.
FP 11,7,700,169
Win8 x64

Помнится, когда раньше баловался с секвенсорами, у меня не хватало процессора на реалтаймовую обработку midi VST инструментами. Треск был всегда.
__________________
тут я

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

Регистрация: Feb 2008
Сообщений: 21
Цитата:
Сообщение от КорДум Посмотреть сообщение
У меня артефактов нет.
FP 11,7,700,169
Win8 x64

Помнится, когда раньше баловался с секвенсорами, у меня не хватало процессора на реалтаймовую обработку midi VST инструментами. Треск был всегда.
Цитата:
В том то и дело, что щелчки так же есть. Методом научного тыка удалось установить, что щелчки при быстром изменении громкости есть всегда во флеше. Просто на некоторых звуках это заметнее. Пример, берем тот же ютуб, ищем видео где играют на пианино. http://www.youtube.com/watch?v=x9a5u4JzkLg и ползунок громкости резко двигаем вверх-вниз. И получаем тоже самое шуршание что и в моем коде.
Вот проделай то что я выше описал.

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Я на основе этого эксперимента и сказал.
__________________
тут я

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

Регистрация: Jan 2009
Сообщений: 1,651
У меня тоже нет никаких щелчков. Колонки/наушники/звукавая карта глючат?
__________________
мой пустой блог

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

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

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


 


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


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