2010-08-09 92 views
1

是否有允許以下內容的組件或代碼: 記錄一個口語單詞(或多個單詞)並將其保存到可以播放的文件中。 該文件必須能夠在XP,Vista和Windows 7上播放。 該文件可以是獨立的或保存到數據源。在德爾福錄音/保存

[用Delphi 7對XP創建應用程序和使用絕對數據庫]

回答

4

在MMSystem.pas的功能讓你這樣做使用Windows API。您可以使用高級功能,如MCI functionsPlaySound,或低級別的功能,如waveInOpenwaveInPrepareHeaderwaveInProc

如果你想要高的控制,你真的應該使用低級別的功能。除了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;