// - "Talk to me like I'm a 3 year old!" Programming Lessons -
//
// $Author: Ben Humphrey digiben@gametutorials.com
//
// $Program: PlaySound
//
// $Description: Shows how to play a wav file
//
// $Date: 6/25/00
//
// Перевод © 2004 Евгений Казеко
// www.gamecoder.kazeko.com
// evgeniy@kazeko.com
#include <windows.h> // Необходима для использования PlaySound()
#include <stdio.h> // Необходима для подключения всех стандартных функций С
// Главная функция main() - начало нашей программы
void main()
{
int i = 0; // Счетчик
// Отображаем сообщение о первом звуке
printf("Playing synchronous sound...\n");
/* PlaySound() это функция, которую мы используем для воспроизведения звука.
Первый параметр это имя wav файла. Второй параметр NULL, если только
файл не находится в файле ресурсов. В этом случае мы бы указали второй
параметр SND_RESOURCE. Третий параметр наиболее важен. Как видите,
я поместил в него два параметра. Используя оператор |, мы указываем,
что нам нужно несколько опций. Другим примером такого параметра может
быть "SND_FILENAME | SND_SYNC | SND_LOOP"
Первая опция, "SND_FILENAME", указывает функции, что мы используем звук
из файла. Вторая опция, "SND_SYNC", указывает, что мы хотим воспроизвести
звук синхронно. Синхронное воспроизведение означает, что программа не
будет продолжать выполнение, до тех пор, пока не закончится воспроизведение
звука.
*/
PlaySound("mysound.wav", NULL, SND_FILENAME | SND_SYNC);
Sleep(1500); // Останавливаем программу на 3 секунды
/* Код, приведенный выше, воспроизводит звук, и продолжает выполнение, когда звук
закончится. Вы можете спросить... а что если мы хотим, чтобы звук проигрывался,
когда происходит что-то еще? Хороший вопрос. Все, что нужно сделать, это
использовать SND_ASYNC вместо SND_SYNC. В этом случае, звук проигрывается
асинхронно, то есть в фоновом режиме.
*/
PlaySound("mysound2.wav", NULL, SND_FILENAME | SND_ASYNC);
// Это сообщение будет отображаться, пока проигрывается звук
printf("Playing asynchronous sound");
// Создадим простой цикл for, чтобы показать, что мы делаем что-либо,
// пока воспроизводится звук.
for(i = 0; i < 50; i++)
{
printf("."); // Печатаем точку при каждом выполнении цикла
Sleep(50); // Останавливаем программу на 1/20 секунды (1000 = 1 секунда)
}
printf("\n"); // Помещаем курсор на следующую строку
} // Конец программы
//////////////////////////// Примечание ///////////////////////////////////////////////
//
// Это простейший пример, показывающий, как воспроизводить звуки в ваших программах.
// Это можно делать в консольном приложении или в Win32. В этой программе показывается,
// как проигрывать звук синхронно (SND_SYNC). Конечно, это не позволит программе
// продолжаться до тех пор, пока звук не закончится. Если вы хотите воспроизводить
// звук в фоне, или асинхронно, тогда используйте SND_ASYNC.
//
// Вам может захотеться загрузить огромный 3х-минутный звук и воспроизводить его
// в вашей игре. С этим есть одна проблема. PlaySound() - очень простая, примитивная
// функция. Если вы сделаете так, то потребуется время, чтобы загрузить звук, и затем
// он будет "прыгать". Если вы хотите проигрывать долгую музыку, вам лучше либо
// использовать MIDI, либо исследовать DirectSound. MP3 также будет хорошей идеей.
// В основном, PlaySound() лучше использовать для звуковых эффектов небольших
// вступлений. Если вы хотите, чтобы звук повторялся, добавьте SND_LOOP. Он будет
// воспроизводиться до тех пор, пока вы не вызовете PlaySound() еще раз с этими
// параметрами: PlaySound(NULL, NULL, SND_PURGE);
// Это остановит воспроизведение.
//
// ///////////////////////// Подключение библиотеки к проекту ///////////////////////////
//
// Когда вы будете создавать свои программы, вам понадобится добавить в ваш проект
// библиотеку (файл .lib). Это файл с именем "winmm.lib".
// Чтобы сделать это, выполните следующие действия:
//
// 1) Перейдите в меню Project и выберите Settings (Alt-F7)
// 2) Теперь нажмите на вкладку "Link"
// 3) В поле "Object/Library modules:" наберите в любом месте: winmm.lib
// 4) Произведите повторную сборку проекта (Build - Rebuild All - прим.переводчика)
// и вы сможете использовать PlaySound
//
// *внимание* Если у вас появляется сообщение об ошибке: Unresolved External: PlaySound(),
// вы неправильно подключили библиотеку, или не подключили windows.h
//
// Если вы посмотрите установки этого проекта, вы найдете winmm.lib. Библиотека это просто
// некоторый код, который помещается в файл, который вы можете подключить, вместо того,
// чтобы добавлять дополнительные .c файлы. Вы можете создавать собственные библиотеки.
// Просто выберите при создании проекта "Static Library", вместо Console Application.
// Обычно, библиотеки используются, когда у вас есть код, который вы больше не хотите
// изменять. Например, графические библиотеки, 3D библиотеки, или математические библиотеки.
//
// © 2001 GameTutorials
// Перевод © 2004 Евгений Казеко
// www.gamecoder.kazeko.com
// evgeniy@kazeko.com
|