Код, который вы предоставили, - это пример использования функции sndPlaySound для воспроизведения ресурса WAV в приложении Windows.
Вот разбивка на части того, что каждый шаг делает:
Файл SOUND.RC: В этом файле содержится строка, которая определяет ресурс с именем MY_WAVE, который ссылается на файл TEST.WAV.
Скомпилирование: Файл SOUND.RC компилируется для создания файла .RES, который содержит определения ресурсов.
В коде:
{$R полное_имя_файла_с_ресурсом}: Эта строка включает в программу скомпилированный файл ресурсов (RES).
var WaveHandle, WavePointer: pointer;: Эти переменные используются для управления и указания на ресурс WAV.
WaveHandle := FindResource(hInstance, 'MY_WAV', RT_RCDATA);: Эта строка ищет ресурс с именем 'MY_WAV' в текущем модуле (hInstance) и возвращает его handle. Второй параметр specifies тип ресурса (RT_RCDATA, что означает "Raw Data").
if WaveHandle <> 0 then begin ... end;: Если ресурс найден, то это блок кода выполняется.
WaveHandle := LoadResource(hInstance, WaveHandle);: Эта строка загружает ресурс с данным handle в память.
if WaveHandle <> 0 then begin ... end;: Если ресурс загружен успешно, то это блок кода выполняется.
WavePointer := LockResource(WaveHandle);: Эта строка блокирует ресурс в памяти, позволяя доступ к нему и воспроизведению.
PlayResourceWave := sndPlaySound(WavePointer, snd_Memory or SND_ASYNC);: Эта строка воспроизводит ресурс WAV с помощью функции sndPlaySound. Первый параметр - указатель на данные ресурса, а второй параметр specifies, как звук должен быть воспроизведен (в этом случае, асинхронно).
UnlockResource(WaveHandle); FreeResource(WaveHandle);: Эти строки разблокируют ресурс в памяти и освободят его handle.
Вот альтернативное решение с использованием встроенной поддержки Delphi для воспроизведения файлов WAV:
procedure TForm1.PlayWavFile;
var
WaveFile: TResourceStream;
begin
WaveFile := TResourceStream.Create(HInstance, 'MY_WAV', RT_RCDATA);
try
WaveFile.Position := 0; // Reset the file position to 0
Sound1.Open(0, '', True); // Open a new sound device
Sound1.Load(WaveFile); // Load the WAV file into the sound device
Sound1.Play; // Play the loaded WAV file
finally
WaveFile.Free;
end;
end;
В этом коде используется класс TResourceStream для загрузки ресурса WAV, а затем воспроизводит его с помощью компонента Sound1. Обратите внимание, что вам нужно иметь компонент Sound1 на вашем форме для того, чтобы этот код работал.
Помните заменить 'MY_WAV' на имя вашего ресурса WAV в файле ресурсов.
В статье Serg Vostrikov описывается шаги по проигрыванию Wave-ресурса в программе, включая создание файла SOUND.RC, компиляцию ресурсов и использование функций FindResource, LoadResource, LockResource, PlayResourceWave и FreeResource.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.