Управление воспроизведением звуков

Программное управление воспроизведением звуков — это самая важная для практики задача из тех, которые позволяют решать инструменты класса Sound. С методами start() и stop() мы уже немного знакомы. В этом разделе разберем их более обстоятельно. Также изучим событие onSoundComplete, происходящее по завершении воспроизведения звука.

Запуск воспроизведения. Метод start()
Метод start () служит для запуска воспроизведения звука, программно присоединенного при помощи метода attachSound() или загруженного метолом loadSound(). Запустить, используя его, проигрывание звуков, помещенных на временную диаграмму «вручную», невозможно. Такие звуки начинают автоматически воспроизводиться тогда, когда проигрывающая головка плейера перемешается на их «родной» кадр. Также невозможно применить метод start() к звуку, загружаемому в потоковом режиме. Такой звук начинает проигрываться автоматически после того, как в буфер загрузится количество его секунд, определяемое значением свойства _soundbuftime. Правда, если использовать по отношению к звуку, импортируемому в потоковом режиме, метод start() без параметров, то он вызовет его загрузку с самого начала.

Метод start() имеет следующий синтаксис: snd.start(offset, loop)
где:

• snd — объект класса Sound, ссылающийся на звук, который нужно воспроизвести;

• offset — необязательный параметр, определяющий, с какой секунды должно начаться воспроизведение звука (по умолчанию ему соответствует ноль — звуки проигрываются с самого начала).


Например, если вы хотите пропустить первые 3 секунды песни (они обычно «пустые»), то этому параметру нужно присвоить значение 3. Типичный пример использования offset — это реализация кнопки паузы в проигрывателе. При ее нажатии нужно зарегистрировать, какой фрагмент звука в этот момент проигрывался (сделать это позволяет свойство position). Затем, когда пользователь нажмет кнопку, возобновляющую воспроизведение, необходимо задействовать метод start(), передав в качестве параметра offset позицию остановки;

• loop — необязательный параметр, задающий, сколько раз подряд должен быть прокручен звук.

Многократное воспроизведение небольшого музыкального фрагмента можно использовать для создания фона для сайта или игры. В этом случае, чтобы звук неожиданно не оборвался, в качестве параметра loop нужно передать очень большое число (например, 100 000).

Метод start() позволяет начать воспроизведение звука с любого фрагмента. Но параметра, соответствующего точке выхода, у него нет. По умолчанию все звуки проигрываются до конца. Если же вы хотите прервать воспроизведение на определенной секунде, то воспользуйтесь методом stop() в связке со свойством position.

Прекращение воспроизведения звуков.


Метод stop() и функция stopAllSounds()

Метод stop() служит для остановки воспроизведения звуков. Имеется две формы его использования.

• Без параметра. В такой форме метод stop() прекращает воспроизведение всех звуков, связанных с временной диаграммой, к которой относится данный объект класса Sound. To есть он, в отличие от метода start(), останавливает не только проигрывание звука, присоединенного при помощи метода attachSound() или импортированного методом loadMovie(), ной звуков, размещенных на временной диаграмме «вручную», а также динамически присоединенных или импортированных через другие объекты класса Sound, связанные с той же временной диаграммой.

Если метод stop() будет задействован через глобальный объект класса Sound (такой объект будет создан, если конструктору Sound() не передать ссылку на конкретную временную диаграмму), то остановится проигрывание всех звуков в фильме.

Метод stop(), задействованный локальным объектом класса Sound, прекращает воспроизведение потокового звука соответствующей временной диаграммы, но только того его фрагмента, который связан с кадром, проигрывавшимся в момент активизации метода. При переходе на новый кадр звук снова появится.


Однако если воспроизведение потокового звука прерывается вызовом метода stop() через глобальный объект класса Sound, то переход проигрывающей головки на новый кадр не будет сопровождаться восстановлением звучания. При этом единственный способ «включить* воспроизведение звука — начать проигрывание заново.

Стоит воздержаться от применения метода stop() по отношению к звуку, подгружаемому в потоковом режиме. Хотя при атом его воспроизведение действительно прекратится, однако процесс закачки приостановлен не будет. Атак как метод start() не применим к звукам, импортируемым в потоковом режиме, большой объем данных закачается впустую.

• С параметром. В такой форме метод stop() дает возможность отключить воспроизведение конкретного звука из тех, которые были динамически присоединены к временной диаграмме при помощи метода attachSound(). В качестве имени звука используется идентификатор программного экспорта соответствующего символа. Строку с ним необходимо передать методу stop() как параметр.

Если метод stop() вызывается через локальный объект класса Sound, то будет остановлено воспроизведение всех экземпляров указанного звука, связанных с данной временной диаграммой как через этот объект, так и через любой другой.


Если же вызвать метод stop() через глобальный объект класса Sound, то все звуки в фильме, относящиеся к символу, идентификатор экспорта которого был передан в качестве параметра, не остановятся. При этом прекратится воспроизведение лишь тех звуков, которые относятся к временной диаграмме, на которой находится код.

Прекращать воспроизведение всех звуков в фильме можно было уже во Flash 3 (то есть задолго до появления класса Sound). Для этого предназначалась глобальная функция stopAllSounds(). В целях обратной совместимости она поддерживается и в современном ActionScript. Таким образом, остановить проигрывание всех звуков можно двумя способами:
stopAllSounds(); // "Старинный" способ (new Sound()).stop(); // "Современный" способ
Невозможно полностью отключить звук в фильме. Приведенные способы блокируют проигрывание лишь уже воспроизводящихся звуков. Если же звук начинает проигрываться после скриптовой команды, то он будет слышимым. Наиболее универсальный способ обеззвучить фильм — глобально сделать громкость равной нулю:

(new Sound()).setVolume(0);

Событие onSoundComplete
Событие onSoundComplete происходит по завершении проигрывания звука, присоединенного методом attachSound() или импортированного методом loadSound() (как в обычном, так и в потоковом режиме).


Окончание проигрывания звуков, помешенных на временную диаграмму «вручную», событием onSoundComplete не сопровождается.

Обычно событие onSoundComplete используют, чтобы запустить по завершении одной музыкальной композиции другую, Также его можно применить для создания бесконечного музыкального фона на основе небольшого звукового фрагмента:

var sound:Sound=new Sound(this);
sound.attachSound("snd");
sound.start();
sound.onSoundComplete=function():Void {
sound.start();
}

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Action Script на эту тему:
Динамическое присоединение звука. Метод attachSound()
Импортирование внешних МР3-файлов
Операции со звуком без использования программирования
Основные понятия теории цифрового звука
Свойства position и duration

Вернуться в раздел: Action Script / 15. Работа со звуком