次のことを可能にするコンポーネントまたはコードはありますか? ファイルは、XP、Vista、および Windows 7 で再生できる必要があります。ファイルは、スタンドアロンにすることも、データソースに保存することもできます。
[Delphi 7 を使用して XP でアプリを作成し、Absolute Database を使用します。]
次のことを可能にするコンポーネントまたはコードはありますか? ファイルは、XP、Vista、および Windows 7 で再生できる必要があります。ファイルは、スタンドアロンにすることも、データソースに保存することもできます。
[Delphi 7 を使用して XP でアプリを作成し、Absolute Database を使用します。]
MMSystem.pas の関数を使用すると、Windows API を使用してこれを行うことができます。MCI 関数やPlaySoundなどの高レベル関数、またはwaveInOpen、waveInPrepareHeader、waveInProcなどの低レベル関数を使用できます。
高度な制御が必要な場合は、低レベルの関数を使用する必要があります。PlaySound を除いて、私は高レベルの 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;