Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как проиграть Wave-ресурс

Delphi , Файловая система , Ресурсы

Как проиграть Wave-ресурс

Автор: Serg Vostrikov

Сначала делаешь файл SOUND.RC, в нем строка вида: MY_WAV RCDATA TEST.WAV Компилишь чем-нибyдь в *.RES

Далее в тексте:

{$R полное_имя_файла_с_ресурсом}

var
  WaveHandle: THandle;
  WavePointer: pointer;
...
  WaveHandle := FindResource(hInstance, 'MY_WAV', RT_RCDATA);
  if WaveHandle <> 0 then
  begin
    WaveHandle := LoadResource(hInstance, WaveHandle);
    if WaveHandle <> 0 then
    begin
      ;
      WavePointer := LockResource(WaveHandle);
      PlayResourceWave := sndPlaySound(WavePointer, snd_Memory or

        SND_ASYNC);
      UnlockResource(WaveHandle);
      FreeResource(WaveHandle);
    end;
  end;

Here is the translation of the text into Russian:

Код, который вы предоставили, - это пример использования функции sndPlaySound для воспроизведения ресурса WAV в приложении Windows.

Вот разбивка на части того, что каждый шаг делает:

  1. Файл SOUND.RC: В этом файле содержится строка, которая определяет ресурс с именем MY_WAVE, который ссылается на файл TEST.WAV.
  2. Скомпилирование: Файл SOUND.RC компилируется для создания файла .RES, который содержит определения ресурсов.
  3. В коде:
    • {$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




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


:: Главная :: Ресурсы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-27 01:17:52/0.0033500194549561/0