Audio Recorder (Wave)
TsgcAudioRecorderWave 通过 Windows Wave API 采集麦克风,并以实时流而非文件的形式提供音频。采样率、声道数和位深度都由您控制,这正是流式和实时场景所需要的。
TsgcAudioRecorderWave 通过 Windows Wave API 采集麦克风,并以实时流而非文件的形式提供音频。采样率、声道数和位深度都由您控制,这正是流式和实时场景所需要的。
流式麦克风采集。一个工作线程持续准备并排队缓冲区、测量每个数据块的电平,并在可配置的静音时长之后结束当前片段。
sgcAI 是自包含的。该组件随 sgcAI 一同交付,并附带它所基于的 sgcWebSockets Core 运行时,因此无需购买基础授权。
选择采样格式,设置静音阈值,然后开始。音频以流的形式到达,而不是磁盘上的文件。
uses
sgcAI, sgcAI_AudioRecorder_Wave;
var
oRecorder: TsgcAudioRecorderWave;
begin
oRecorder := TsgcAudioRecorderWave.Create(nil);
oRecorder.WaveOptions.SampleRate := 16000;
oRecorder.WaveOptions.Channels := 1;
oRecorder.WaveOptions.BitsPerSample := 16;
// Silence detection on the measured block level.
oRecorder.WaveOptions.LevelMin := 300;
oRecorder.WaveOptions.StopAfter := 1200;
oRecorder.WaveOptions.WaitForAudio := 100;
oRecorder.Start; // Stop ends capture
end;
// includes: sgcAI.hpp, sgcAI_AudioRecorder_Wave.hpp
TsgcAudioRecorderWave *oRecorder = new TsgcAudioRecorderWave(NULL);
oRecorder->WaveOptions->SampleRate = 16000;
oRecorder->WaveOptions->Channels = 1;
oRecorder->WaveOptions->BitsPerSample = 16;
oRecorder->WaveOptions->LevelMin = 300;
oRecorder->WaveOptions->StopAfter = 1200;
oRecorder->Start();
您最常使用的成员。
SampleRate、Channels 和 BitsPerSample 精确设定采集格式,因此您可以匹配下游模型或编解码器所要求的任何格式。
LevelMin 是低于该值即把数据块视为静音的 RMS 电平,StopAfter 是该静音持续多久后结束片段,WaitForAudio 则是留给每个缓冲区填充的时长。
采集过程中音频即以流的形式提供,因此可以转发到实时端点或即时编码,而不必等待文件关闭。
Start 开始采集,Stop 结束采集。采集循环运行在自己的工作线程上,因此 UI 线程永远不会被阻塞。
当您需要特定的采样格式或实时流时,请使用这一个。当您只需要每句话生成一个 WAV 文件时,请使用 TsgcAudioRecorderMCI。
RMS 电平是按数据块从 16 位采样计算得出的,这也正是您在 UI 中驱动电平表所用的数据。