delphi - Delphi 中的录音/保存

标签 delphi delphi-7 wav record microphone

是否有组件或代码允许执行以下操作: 录制一个或多个口语单词并将其保存到可以播放的文件中。 该文件必须能够在 XP、Vista 和 Windows 7 上播放。 该文件可以是独立的,也可以保存到数据源。

[使用 Delphi 7 在 XP 上创建应用程序并使用绝对数据库。]

最佳答案

MMSystem.pas 中的函数允许您使用 Windows API 来执行此操作。您可以使用高级函数,例如 MCI functionsPlaySound ,或低级函数,例如 waveInOpen , waveInPrepareHeader , waveInProc等等

如果你想要高级控制,你真的应该使用低级函数。除了PlaySound之外,我从未使用过高级MCI接口(interface)。

MCI

这是工作代码:

procedure TForm1.FormCreate(Sender: TObject);
var
  op: TMCI_Open_Parms;
  rp: TMCI_Record_Parms;
  sp: TMCI_SaveParms;
begin

  // Open
  op.lpstrDeviceType := 'waveaudio';
  op.lpstrElementName := '';
  if mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT or MCI_OPEN_TYPE, cardinal(@op)) <> 0 then
    raise Exception.Create('MCI error');

  try

    // Record
    rp.dwFrom := 0;
    rp.dwTo := 5000; // 5000 ms = 5 sec
    rp.dwCallback := 0;
    if mciSendCommand(op.wDeviceID, MCI_RECORD, MCI_TO or MCI_WAIT, cardinal(@rp)) <> 0 then
      raise Exception.Create('MCI error. No microphone connected to the computer?');

    // Save
    sp.lpfilename := PChar(ExtractFilePath(Application.ExeName) + 'test.wav');
    if mciSendCommand(op.wDeviceID, MCI_SAVE, MCI_SAVE_FILE or MCI_WAIT, cardinal(@sp)) <> 0 then
      raise Exception.Create('MCI error');

  finally
    mciSendCommand(op.wDeviceID, MCI_CLOSE, 0, 0);
  end;

end;

关于delphi - Delphi 中的录音/保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3441613/

相关文章:

delphi - 删除有关已声明但未使用的符号的编译器警告

delphi - 为什么我在 IDE 中得到了另一个尺寸的组件?

delphi - 拦截TAB键并抑制它

delphi - 将 _Recordset 结果与 TADOConnection.Execute 函数结合使用

android - 在Android上将FloatArray音频缓冲区保存到WAV文件

java - 使用 TARSOS DSP 从 WavFiles JAVA 中提取 MFCC 的困难

delphi - 通过集合/列表/其他容器使用 AWE Memory 进行数据存储

windows - 从 Delphi 启动 Windows 优化应用程序 (Windows 10)

c++ - 准确的跨平台声音处理

delphi - 如何分离面板并将其显示在单独的窗口中?