2010-07-05 66 views
1

對於delphi世界來說,這真的很新鮮。使用TMediaPlayer錄製和保存.wav文件(Delphi 2010)

現在我正在使用TMediaPlayer錄製一些聲音並保存這些聲音。 我爲TMediaPlayer中執行SaveFileDialog的記錄按鈕做了點擊事件。用戶應該輸入一些他想保存的文件名,然後在錄製.wav文件後,他可以點擊停止按鈕並保存他錄製的.wav文件。

其實它不會創建一個文件。

我會告訴我的Delphi代碼

if Button = TMPBtnType.btRecord then 
begin 
SaveDialogSpeichern.Execute; 
MediaPlayerSound.FileName := SaveDialogSpeichern.FileName; 
MediaPlayerSound.StartRecording; 

end 

一些重要的部分代碼和那些保存:

MediaPlayerSound.Stop; 
    MediaPlayerSound.Save; 

我不能使用bass.dll,所以我想以使這個TMediaPlayer如果有可能的方式

回答

2

我找到了解決我的問題。 似乎TMediaPlayer不支持創建聲音文件錄製聲音文件。

有使用WINAPI的方式(使用MMSYSTEM;)

我用這個代碼:

mciSendString(PChar('OPEN NEW TYPE WAVEAUDIO ALIAS mysound'), nil, 0, 
    Handle); 
mciSendString(PChar('SET mysound TIME FORMAT MS ' +  
    'BITSPERSAMPLE 8 ' +     
    'CHANNELS 1 ' +      
    'SAMPLESPERSEC 8000 ' +    
    'BYTESPERSEC 8000'),     
    nil, 0, Handle); 
mciSendString(PChar('RECORD mysound'), nil, 0, Handle); 
mciSendString(PChar('SAVE mysound "' + SaveDialogSpeichern.FileName+'"'), nil, 0, 
    Handle); 
mciSendString(PChar('CLOSE mysound'), nil, 0, Handle) 

希望這將幫助任何人以同樣的問題

2

而且我也想添加這個;您可以使用這種方式開始停止並保存您的記錄

procedure TForm1.Button1Click(Sender: TObject);  // Record 
begin 
    mciSendString('OPEN NEW TYPE WAVEAUDIO ALIAS mysound', nil, 0, Handle); 
    mciSendString('SET mysound TIME FORMAT MS ' +  // set time 
    'BITSPERSAMPLE 8 ' +    // 8 Bit 
    'CHANNELS 1 ' +      // MONO 
    'SAMPLESPERSEC 8192 ' +    // 8 KHz 
    'BYTESPERSEC 8192',    // 8000 Bytes/s 
    nil, 0, Handle); 
    mciSendString('RECORD mysound', nil, 0, Handle); 
end; 


procedure TForm1.Button2Click(Sender: TObject);  // Stop 
begin 
    mciSendString('STOP mysound', nil, 0, Handle) 
end; 


procedure TForm1.Button3Click(Sender: TObject);  // Save 

begin 
mciSendString(PChar('SAVE mysound "' + '/test.wav'+'"'), nil, 0, 
    Handle); 
    mciSendString('CLOSE mysound', nil, 0, Handle) 
end;