如何录制声音并延迟播放?

时间:2011-06-21 07:51:19

标签: delphi delphi-7

我知道我可以通过Media Player组件录制声音,但是在录制之后我必须保存它然后播放它。但有没有办法立即播放或自定义延迟播放?

3 个答案:

答案 0 :(得分:3)

您可以使用LakeofSoft VC components轻松完成此操作。他们的voice recording demo就像你想要的那样。

答案 1 :(得分:2)

您可以在http://www.un4seen.com/

尝试音频库

“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那里得到了这段代码。