Показать сообщение отдельно
  #1  
Старый 21.10.2023, 11:30
Trogov Trogov вне форума
Прохожий
 
Регистрация: 10.05.2023
Сообщения: 3
Версия Delphi: Delphi XE 10
Репутация: 10
По умолчанию Как записать звук с микрофона в wav файл

Приветствую форумчани!

Возникла проблема =( Решил добавить в свой проект печаталку текста через микрофон.
Но никак не получается записать звук и отсейвить это в wav(ик).

Нужен примерчик именно для VCL =( для FMX много разных. Но весь огромный проект на VCL так что без вариантов.

Я пробовал использовать HWaveIn и TMemoryStream/TFileStream.
Поглядите может вы поймёте в чём дело:



Код:
var
  WaveIn: HWaveIn;
  WaveFormat: TWaveFormatEx;
  WaveHeader: TWaveHdr;
  Buffer: array[0..1023] of Byte;
  FileStream: TFileStream;


// старт записи
procedure TForm1.Button1Click(Sender: TObject);
begin
  WaveFormat.wFormatTag := WAVE_FORMAT_PCM;
  WaveFormat.nChannels := 1;
  WaveFormat.nSamplesPerSec := 44100;
  WaveFormat.nAvgBytesPerSec := WaveFormat.nSamplesPerSec * WaveFormat.nChannels * 2;
  WaveFormat.nBlockAlign := 2;
  WaveFormat.wBitsPerSample := 16;
  WaveFormat.cbSize := 0;

  WaveInOpen(@WaveIn, WAVE_MAPPER, @WaveFormat, 0, 0, 0);

  WaveInStart(WaveIn);

  WaveInPrepareHeader(WaveIn, @WaveHeader, SizeOf(WaveHeader));

  WaveInAddBuffer(WaveIn, @WaveHeader, SizeOf(WaveHeader));
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  FileStream := TFileStream.Create('c:\wav\sound.wav', fmCreate);
  try
    WaveInUnprepareHeader(WaveIn, @WaveHeader, SizeOf(WaveHeader));
    WaveInStop(WaveIn);
    WaveInClose(WaveIn);

    FileStream.WriteBuffer(WaveFormat, SizeOf(WaveFormat));
    FileStream.WriteBuffer(WaveHeader.lpData^, WaveHeader.dwBufferLength);

    ShowMessage('Звук успешно сохранен!');
  finally
    FileStream.Free;
  end;
end;

Кстати очень удивило что нет ни одного рабочего примера в интернете. Вроде ведь часто кому может потребоваться.
TMediaPlayer тоже не сейвит у меня звуки почему-то =(

так как везде примеры с MediaPlayer1.DeviceType := dtAudioIn; или MediaPlayer1.DeviceType := dMicrophone;
а в моей дельфи 2020года есть только dtWaveAudio который почему то не хочет писать и сейвить вавики =(

пОмОхИте чем сможите))
Спасибо
Ответить с цитированием