2


5

Delphiでの音声録音/保存

以下を可能にするコンポーネントまたはコードはありますか:話し言葉を記録し、再生可能なファイルに保存します。 ファイルはXP、Vista、およびWindows 7で再生できる必要があります。 ファイルはスタンドアロンでも、データソースに保存することもできます。

[XPでアプリを作成し、Absolute Databaseを使用するためにDelphi 7を使用。]

1 Answer


5


MMSystem.pasの関数を使用すると、Windows APIを使用してこれを行うことができます。 MCI functionsやhttp://msdn.microsoft.com/などの高レベル関数を使用できます。 en-us / library / dd743680(VS.85).aspx [PlaySound]、またはhttp://msdn.microsoft.com/en-us/library/dd743847(VS.85).aspxなどの低レベル関数waveInOpen]、http://msdn.microsoft.com/en-us/library/dd743848(VS.85).aspx [waveInPrepareHeader]、http://msdn.microsoft.com/en-us/library/dd743849(VS .85).aspx [waveInProc]など

高度な制御が必要な場合は、実際に低レベル関数を使用する必要があります。 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;