Иллюстрированный самоучитель по C++ Builder

Воспроизведение звука

Листинг 4.2. Использование компонента MediaPlayer для воспроизведения звука.

void __fastcall TForml::FormCreate(TObject *Sender)
{
char *wd; // каталог Windows
wd = (char*)AllocMem(MAX_PATH);
GetWindowsDirectory(wd,MAX_PATH);
SoundPath = wd;
// звуковые файлы находятся в подкаталоге Media
SoundPath = SoundPath + "\\Media\\";
// сформируем список звуковых файлов
TSearchRec sr;
if (FindFirst(SoundPath + "*.wav", faAnyFile, sr) == 0)
{
// найден файл с расширением wav
ListBoxl › Items › Add(sr.Name);
// добавим имя файла в список
// еще есть файлы с расширением wav?
while (FindNext(sr) == 0)
ListBoxl › Items › Add(sr.Name);
}
if (FindFirst(SoundPath + "*.mid", faAnyFile, sr) == 0) {
// найден файл с расширением mid
ListBoxl › Items › Add(sr.Name);
// добавим имя файла в список
// еще есть файлы с расширением mid?
while (FindNext(sr} = 0)
ListBoxl › Items › Add(sr.Name); }
if (FindFirstf SoundPath + "*.rmi", faAnyFile, sr) == 0) {
// найден файл с расширением rmi
ListBoxl › Items › Add(sr.Name);
// добавим имя файла в список
// еще есть файлы с расширением rmi?
while (FindNext(sr) == 0)
ListBoxl › Items › Add(sr.Name); }
// воспроизвести первый файл
if (ListBoxl › Items › Count!= 0)
{
Label2 › Caption = ListBoxl › Items › Strings[1];
MediaPlayerl › FileName = SoundPath + ListBoxl › Items › Strings[l];
MediaPlayerl › Open();
MediaPlayerl › Play();
}
 }
// щелчок на элементе списка
void__fastoall TForml::ListBoxlClick(TObject *Sender)
{
Label2 › Caption = ListBoxl › Items › Strings[ListBoxl › ItemIndex];
MediaPlayerl › FileName = SoundPath + Label2 › Caption;
MediaPlayerl › Open();
MediaPlayerl › Play();
 }

Работает программа следующим образом. Сразу после запуска функция обработки события onCreate формирует список звуковых файлов (WAV, MID и RMI), которые находятся в подкаталоге Media главного каталога Windows. Так как на разных компьютерах каталог, в который установлена операционная система, может называться по-разному, то для получения его имени используется API функция GetwindowsDirectory, значением которой является полное имя каталога Windows.

Список звуковых файлов формируется при помощи функций FindFirst и FindNext. функция FindFirst обеспечивает поиск файла, удовлетворяющего критерию поиска, указанному при вызове функции. Функция FindNext продолжает процесс поиска. Обеим функциям в качестве параметра передается структура типа TSearchRec, поле Name которой (в случае успеха) содержит имя файла, удовлетворяющего критерию поиска. После того как список звуковых файлов сформирован, применением метода Play активизируется процесс воспроизведения первого файла.

Щелчок на элементе списка обрабатывается функцией TFom1::ListBox1Click, которая присваивает значение свойству FileName компонента MediaPiayer 1, при помощи метода open открывает выбранный файл и применением метода Play активизирует процесс воспроизведения.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.