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