Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование с нуля - это совсем просто! 148) Программирование спрайтовых игр: работа с музыкой


Школа программирования

148) Программирование спрайтовых игр: работа с музыкой

Друзья!
Всех поздравляю с Новым 2007-м годом!
Желаю новых свершений на ниве информационных технологий и программирования - самой востребованной и самой волшебной профессии XXI-го века!

Легендарное издательство "Питер" совместно с издательством "Развитие" предлагает мои новинки - учебные курсы по C# и C++ (в дополнение к учебному курсу по Delphi).
В книгах подробно рассмотрены особенности программирования на Borland C#Builder 2006, Borland C++Builder 2006 и Borland Delphi 2006.
Кстати, в очередной раз переиздан мой бестселлер: учебный курс по Delphi 7.
Прочитать оглавления этих книг и заказать эти курсы на сайте издательства можно тут:
http://shop.piter.com/display.phtml?a_id=17681&web_ok=all


Последний выпуск по Blitzbasic был N 143.

Работа с музыкой

Музыкальные средства BlitzBasic ориентированы на форматы wav, mp3 и ogg. Основная команда подготовки музыкального файла к воспроизведению - это

LoadSound (filename$)

где filename$ - путь к соответствующему файлу.

Команда (функция) возвращает идентификатор музыкального объекта, загруженного в память программы. В дальнейшем к нему нужно обращаться для воспроизведения этого объекта.

* После использования такой объект надо удалить из памяти с помощью команды:

FreeSound идентификатор

Впрочем, если на время работы программы все музыкальные ресурсы должны все время находиться в памяти, вызывать эту команду необязательно, так как после завершения программы BlitzBasic автоматически освободит все отведенные ей ресурсы.

* Загруженная музыка воспроизводится командой

PlaySound ( идентификатор )

Например:

sndPlayer=LoadSound("song.mp3")
PlaySound ( sndPlayer )

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

sndChannel = PlaySound ( sndPlayer )

Важно! Музыка таким образом воспроизводится в фоне работы программы, то есть после выполнения команды PlaySound программа не ожидает прекращения воспроизведения мелодии, а продолжает работу, а мелодия продолжает воспроизводиться до конца автоматически.

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

* Иногда бывает полезно запустить некоторую мелодию в фоне непрерывно, без конца, "в цикле". В этом поможет команда

LoopSound идентификатор

Она ничего не делает, а просто указывает, что при следующем вызове команды PlaySound соответствующая мелодия будет играться без конца.

sndPlayer=LoadSound("song.mp3")
LoopSound sndPlayer ; играть без конца
PlaySound ( sndPlayer )

* Громкость музыки регулируется командой

SoundVolume идентификатор, volume#

где переменная volume# принимает дробные значения от 0 (тишина) до 1 (максимальная громкость).

* Добиться интересных эффектов, изменяя частоту воспроизведения, можно с помощью команды

SoundPitch идентификатор, hertz

где hertz задает новую частоту воспроизведения. Так, если некоторый файл был записан с частотой оцифровки 22050 Гц, то его воспроизведение можно "ускорить" или "замедлить" так:

sndUp = LoadSound("audio.wav")

PlaySound sndUp

SoundPitch sndUp, 22050*2
PlaySound sndUp

SoundPitch sndUp, 22050/2
PlaySound sndUp

* При желании можно изменить распределение мелодии между двумя стереоканалами (правым и левым). Для этого предназначана функция

SoundPan идентификатор, pan#

Параметр pan# принимает значения от -1 (весь звук в левый канал) до +1 (весь звук в правый канал), значение 0 означает равномерное распределение.

Каналы

Управление процессом воспроизводимой музыки осуществляется через каналы. Остановить текущий процесс можно командой

StopChannel идентификатор-канала

Приостановить (например для воспроизведения другого звука) - командой

PauseChannel идентификатор-канала

Начать сначала - командой

ResumeChannel идентификатор-канала

Определить, воспроизводится ли в данный момент мелодия, запущенная ранее командой PlaySound, можно с помощью функции

ChannelPlaying (идентификатор-канала)

Она возвращает true, если музыка по данному каналу еще играет. В следующем примере

chnWave=PlaySound(sndWave)

While ChannelPlaying(chnWave)
Wend

условный цикл будет выполняться, пока не закончится проигрыш музыки.

Управлять громкостью, частотой и стереораспределением канала можно командами

ChannelVolume идентификатор-канала, volume#

Громкость - дробное число в диапазоне от 0 (тишина) до 1 (максимальная громкость).

ChannelPitch идентификатор-канала, hertz
ChannelPan идентификатор-канала, pan#

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

BlitzBasic позволяет также воспроизводить звуки как в стандартных форматах, так и в довольно экзотических (трекерных) raw/mod/s3m/xm/it/mid/rmi/wav/mp2/mp3/ogg/wma/asf. В этом поможет команда

PlayMusic (filename$)

которая схожа с LoadSound, только сразу после загрузки начинает проигрыш файла. Кроме того, в BlitzBasic имеется средство воспроизведения стандартных аудиодорожек музыкального CD-диска (диск должен быть вставлен)

PlayCDTrack( track, mode )

где первый параметр - номер трека, а второй принимает следующие значения:

1 - играть трек один раз;
2 - играть трек без конца;
3 - играть треки с указанного до конца диска.

Обе эти функции возвращают идентификатор канала.

Задание. Напишите программу-музыкальный проигрыватель, которая будет по нажатию разных клавиш начинать воспроизведение загруженной мелодии с начала, делать паузу и динамически менять громкость и частоту сигнала.


(c) 2004-2006 Сергей Бобровский bobrovsky as russianenterprisesolutions.com

Школа программирования с нуля
Все предыдущие выпуски базового курса всегда тут:
http://www.infiltration.ru/p/

Неофициальный сайт поддержки (со срочными вопросами - сюда):
www.prog-begin.net.ru.


Мои учебные курсы "Технологии Delphi/C++/C#. Разработка приложений для бизнеса".
http://shop.piter.com/display.phtml?a_id=17681&web_ok=all

Все эти учебные курсы рассчитаны не только на разработчиков, но и на всех тех, кто хочет стать ИТ-менеджером. Для этого как минимум нужно иметь общее представление о современных технологиях разработки и их истории и владеть соответствующей терминологией.
В книгах описаны десятки технологий, каждой из которых посвящены отдельные книги. Таким образом, купив один учебный курс, вы существенно сэкономите :) В книгах полностью описаны:
- Delphi (версия 2006, полностью совместимая с Turbo Delphi) для обеих платформ - Win32 и .NET;
- C# (новый язык Microsoft, на котором базируется платформа .NET и все новые версии Windows);
- C++ для платформы Win32.
Охвачены также темы работы с файлами на этих платформах, создания файл-серверных, клиент-серверных, распределенных приложений, веб-программ (Indy, ASP.NET, веб-сервисы). Описаны языки SQL и OCL. Немало глав посвящены истории программирования и различных технологий. Особое внимание уделено созданию программ с помощью технологии ECO и языка моделирования UML - программы фактически рисуются, и теперь даже для создания корпоративных приложений и их переноса в Интернет не обязательно знать программирование!
Отдельная часть отведена технологиям организации групповой работы, управления требованиями, контроля версий, локализации и тестирования.
Тут подробнее про книги.

Мои книги, которые пока доступны в продаже:


Дизайн рассылки: Алексей Голубев - Web-дизайн и web-программирование


В избранное