Перейти к содержанию
Fire Monkey от А до Я
  • 0

как разобрать файл wav


leon2009

Вопрос

Здравствуйте! как разобрать звуковой файл wav, можно другой, какие mediaPlayer поддерживает...

в архиве ехе - только пример для windows

если кто боится открывать ехе = вот видео = https://rutube.ru/video/27d89237909c7c44bf2cbef677edea66/

сам звук https://disk.yandex.ru/d/wvBuxzZsCl2sXA = сюда не закачался.

звук проигрывает в мемо частота записывается можно и в график.

если частота низкая (барабан играет), то пишет что барабан, если скрипка то скрипка....

Спасибо!

 

Project1.zip

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
В 17.03.2023 в 13:24, leon2009 сказал:

Здравствуйте! как разобрать звуковой файл wav

Читаете файл, разбираете заголовок файла, определяете позицию начала данных, обрабатываете данные так как вам нужно . 

Ссылка на комментарий
  • 0

Здравствуйте!

Для разбора звукового файла WAV в Delphi можно использовать стандартные средства работы с аудиофайлами из библиотеки Windows API или сторонние библиотеки, такие как BASS или FMOD.

Пример чтения и воспроизведения звукового файла WAV с использованием Windows API можно найти в следующем коде:

var
  WaveFormat: TWAVEFORMATEX;
  MMResult: MMRESULT;
  HWaveOut: HWAVEOUT;
  WaveHeader: TWAVEHDR;
  WaveData: Pointer;
  WaveSize: DWORD;
begin
  MMResult := waveInOpen(@HWaveOut, WAVE_MAPPER, @WaveFormat, 0, 0, CALLBACK_NULL);
  if MMResult <> MMSYSERR_NOERROR then
    raise Exception.CreateFmt('Error opening audio device. Error code: %d', [MMResult]);

  try
    WaveData := LoadWaveData('audio.wav', WaveSize); // функция загрузки данных из WAV файла
    ZeroMemory(@WaveHeader, SizeOf(TWAVEHDR));
    WaveHeader.dwBufferLength := WaveSize;
    WaveHeader.lpData := WaveData;
    MMResult := waveOutPrepareHeader(HWaveOut, @WaveHeader, SizeOf(TWAVEHDR));
    if MMResult <> MMSYSERR_NOERROR then
      raise Exception.CreateFmt('Error preparing audio data. Error code: %d', [MMResult]);
      
    try
      MMResult := waveOutWrite(HWaveOut, @WaveHeader, SizeOf(TWAVEHDR));
      if MMResult <> MMSYSERR_NOERROR then
        raise Exception.CreateFmt('Error playing audio. Error code: %d', [MMResult]);
        
      while waveOutUnprepareHeader(HWaveOut, @WaveHeader, SizeOf(TWAVEHDR)) = WAVERR_STILLPLAYING do
        Sleep(10);
    finally
      FreeMem(WaveData);
    end;
  finally
    waveOutClose(HWaveOut);
  end;
end;

Для анализа звукового файла можно использовать сторонние библиотеки, такие как BASS или FMOD. Например, для работы с BASS можно использовать следующий код:

uses
  Bass;

var
  Stream: HSTREAM;
  Info: BASS_CHANNELINFO;
  Frequency: Integer;
begin
  if not BASS_Init(-1, 44100, 0, 0, nil) then
    raise Exception.Create('Error initializing audio system');

  try
    Stream := BASS_StreamCreateFile(False, 'audio.wav', 0, 0, BASS_SAMPLE_FLOAT or BASS_STREAM_DECODE);
    if Stream = 0 then
      raise Exception.Create('Error creating audio stream');

    try
      BASS_ChannelGetInfo(Stream, Info);
      Frequency := Info.freq;
      // далее можно использовать функции BASS для анализа звукового файла
    finally
      BASS_StreamFree(Stream);
    end;
  finally
    BASS_Free();
  end;
end;

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...