Pull to refresh

Звуки при событиях — это просто

Reading time3 min
Views2.1K
Современные проекты всё больше и больше персонализируются. Один из последних проектов предполагал постоянное присутствие пользователя на сайте. Пользователь является диспетчером и отслеживает появление новых заказов, участвует в аукционах итп. Помимо уже стандартных SMS уведомлений итп, хотелось сделать звук, т.к. пользователи действительно постоянно находятся на проекте. Самым простым способом показался флеш. Флеш уже есть почти у всех, все смотрят ютуб, играют в фермера и так далее. И не смотря на мои антифлешевские взгляды, решил что для проигрывания звука флеш подходит лучше всего.
Однако при попытке написать флешку для проигрывания звуков я вдруг вспомнил, что не работал с флешем уже лет 5 =( и вместо того, чтобы написать свой компонент, стал искать готовые…

Почти сразу я нашел статью «Управляем Flash-объектом на Javascript», где apelsyn достаточно наглядно показывал как строить интерфейсы между JS и Flash как раз на примере подобного мини проигрывателя звуков, мелодий итп. Со времен моего изучения флеша многое изменилось. Action Script из примитивного языка макросов превратился в мощный скриптовой язык. И не смотря на то, что apelsyn достаточно подробно разжевал как и что и даже выложил исходники, повторить его опыт в среде Flash CS4 я не смог =( Решил использовать его SWF без своих правок, однако и тут меня ждала засада. Путь до директории с рингтонами apelsyn прописал в коде и что самое ужасное — он относительный. В итоге на главной странице его флешка без проблем воспроизводила звук, но стоило зайти по глубже на сайт, флешка выплёвывала ошибку.
На тот момент идея «прикрутить звук за 5 минут» реализовывалась уже несколько часов. Очень хотелось получить звук, однако чувствовал себя роботом, потерявшим ориентацию и бьющимся об стену. С одной стороны бизнесмен внутри меня говорил «Забей и делай дальше, в крайнем случаем закажешь на free-lance.ru», но программист не уставал повторять «Ну ты и ламер, флешку для проигрывания звука написать не можешь».
В итоге я окончательно разозлился, открыл новый flash проект и таки написал этот проигрыватель, причем чёрт действительно оказался не таким страшным. При всём уважении к apelsyn, код получился раз в 10 меньше и он работал, что главное.

Flash файл:
import flash.external.ExternalInterface;
ExternalInterface.addCallback("playMusic", playMusic);
ExternalInterface.addCallback("stopMusic", stopMusic);

import flash.media.Sound;
import flash.media.SoundChannel;
import flash.net.URLRequest;

var _sound:Sound;
var _channel:SoundChannel;

function playMusic(file:String='', count:int=0)
{
  _sound = new Sound(new URLRequest(file));
  _channel=_sound.play(0,count);  
}
function stopMusic() {
  _channel.stop();
}


* This source code was highlighted with Source Code Highlighter.


и JS код:
function musicLoad()
{
  swfobject.embedSWF("/swf/music.swf", "sound", "0", "0", "9.0.0");
}
function musicPlay (file, count)
{
  if (!file)
  {
    file='/sound/default.mp3';
  }
  if (!count)
  {
    count=1;
  }
  document.getElementById('sound').playMusic(file, count);
}
function musicStop ()
{
  document.getElementById('sound').stopMusic();
}


* This source code was highlighted with Source Code Highlighter.


Соответственно, для работы скрипта надо подключить swfobject.js, юзать примерно так:
musicPlay('/sound/123.mp3');
musicStop();


* This source code was highlighted with Source Code Highlighter.


Вот вроде и всё =)
p.s. я не претендую на звание гуру флеша, наоборот, буду рад любой критике и исправлю все неточности в коде.
Tags:
Hubs:
Total votes 9: ↑7 and ↓2+5
Comments17

Articles