Delphi中的录音/保存

时间:2010-08-09 15:33:03

标签: delphi delphi-7 wav record microphone

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

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

1 个答案:

答案 0 :(得分:5)

MMSystem.pas中的功能允许您使用Windows API执行此操作。您可以使用高级功能,例如MCI functionsPlaySound,也可以使用低级功能,例如waveInOpenwaveInPrepareHeaderwaveInProc等。< / p>

如果你想要高控制,你真的应该使用低级功能。除PlaySound外,我从未使用过高级MCI接口。

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;