我知道我可以通过Media Player组件录制声音,但是在录制之后我必须保存它然后播放它。但有没有办法立即播放或自定义延迟播放?
答案 0 :(得分:3)
您可以使用LakeofSoft VC components轻松完成此操作。他们的voice recording demo就像你想要的那样。
答案 1 :(得分:2)
“BASS”DLL可以与Windows Xp和Win 7一起使用。它们可以免费用于非商业用途。下载包括一个简单的Delphi录音机示例,它允许人们“录音”,然后“保存”为音频文件或立即“播放”文件而不保存音频文件仍在内存中的音频文件。 “BASS”与Delphi 2007非常合作。它可能非常适合您的目的。
答案 2 :(得分:1)
以下是如何使用http://www.un4seen.com/
中的bass.dll来完成此操作您可以使用un4seen中的RecordTest示例并修改以下函数,如下所示:
function RecordingCallback(Handle: HRECORD; buffer: Pointer; length: DWORD; user: Pointer): boolean; stdcall;
begin
BASS_StreamPutData(chan, buffer, length); // added: pass the captured data to the push stream
// Copy new buffer contents to the memory buffer
Form1.WaveStream.Write(buffer^, length);
// Allow recording to continue
Result := True;
Form1.WaveStream.Write(WaveHdr, SizeOf(WAVHDR));
chan := BASS_StreamCreate(44100, 2, 0, STREAMPROC_PUSH, nil); // added: create a push stream
BASS_ChannelPlay(chan, False); // added: start it
// start recording @ 44100hz 16-bit stereo
end;
procedure TForm1.StopRecording;
var
i: integer;
begin
BASS_ChannelStop(rchan);
BASS_StreamFree(chan); // added: free the push stream
bRecord.Caption := 'Record';
// complete the WAV header
WaveStream.Position := 4;
i := WaveStream.Size - 8;
WaveStream.Write(i, 4);
i := i - $24;
WaveStream.Position := 40;
WaveStream.Write(i, 4);
WaveStream.Position := 0;
// create a stream from the recorded data
chan := BASS_StreamCreateFile(True, WaveStream.Memory, 0, WaveStream.Size, 0);
if chan <> 0 then
begin
// enable "Play" & "Save" buttons
bPlay.Enabled := True;
bSave.Enabled := True;
end
else
MessageDlg('Error creating stream from recorded data!', mtError, [mbOk], 0);
end;
修改后按录制时,录制时会同时播放声音。
我在论坛上从Ian那里得到了这段代码。