オーディオレコーダー(Wave)
TsgcAudioRecorderWave は、Windows の Wave API を通じてマイク音声を取得し、ファイルではなくライブストリームとして配信します。サンプルレート、チャネル数、ビット深度を自分で指定できるため、ストリーミングやリアルタイムの用途に適しています。
TsgcAudioRecorderWave は、Windows の Wave API を通じてマイク音声を取得し、ファイルではなくライブストリームとして配信します。サンプルレート、チャネル数、ビット深度を自分で指定できるため、ストリーミングやリアルタイムの用途に適しています。
ストリーミング方式のマイク録音です。ワーカーがバッファを継続的に準備してキューに積み、ブロックごとのレベルを測定し、設定した時間の無音が続くと区切りを閉じます。
sgcAI は単体で完結しています。このコンポーネントは、土台となる sgcWebSockets Core ランタイムとともに sgcAI に同梱されているため、基本ライセンスを購入する必要はありません。
サンプル形式を選び、無音のしきい値を設定して開始します。音声はディスク上のファイルではなくストリームとして届きます。
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 上のレベルメーターを動かすのにもそのまま使える値です。