Этот сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Звуки в «Виоле»

Как я уже писал, анимацию в «Виоле» можно получить, задействовав скриптовый язык, а что же со звуком?

Из скриптового языка доступны только две функции — bell() издаёт системный «бип» и bellVolume(), позволяющая задавать или получать громкость этого «бипа» в процентах. Функций немного, но и их пришлось чинить — они обе используют вызов XBell(), который на «МакОСи» не работает испокон веков.

Пришлось примотать небольшой код на Objective-C, который вызывает фреймворк AVFoundation, через который я теперь проигрываю системный звук Tink.aiff с заданной громкостью.

Что касается HTML, отдельного тега нет, но небольшими ухищрениями можно заставить проиграть браузер любой файл, имя которого кончается на .au — этот файл передаётся маковской утилите afplay, а она умеет играть файл в целой куче аудиоформатов.

Каноничнее, конечно, использовать именно формат au, тем более, что в него аудио можно преобразовать большинством современных утилит, той же ffmpeg, например.

Так как же проиграть звук из HTML?

Самый простой способ — поставить на аудиофайл ссылку. При переходе на неё файл проигрывается, а не скачивается. Способ позанятнее — использование тега INSERT, аналога современного IFRAME. Он проиграет файл при открытии страницы, а если использовать атрибут AFTER, то ещё и зациклит его с указанной в миллисекундах задержкой.

Так как звук играется асинхронно, в теории, можно было писать игры или делать сайты с фоновой музыкой, для этого уже всё было готово. А если учесть, что скриптовый язык позволяет запускать что угодно (с безопасностью у этого браузера явные проблемы), то можно, запуская ту же утилиту afplay, организовать звуковые эффекты.