Delphi 10 Seattleで音声を録音する方法を紹介します。
FMX.Media.TAudioCaptureDevice
録音には、FMX.Media.TAudioCaptureDeviceクラスを使用します。
TAudioCaptureDeviceオブジェクトは、TCaptureDeviceManagerクラスのDefaultAudioCaptureDeviceメソッドを使用して取得します。
FMicrophone := TCaptureDeviceManager.Current.DefaultAudioCaptureDevice;
録音を開始するには、StartCaptureメソッドを使用します。
FMicrophone.StartCapture;
録音を停止するには、StopCaptureメソッドを使用します。
FMicrophone.StopCapture;
録音中かどうかは、Stateプロパティで判定できます。
サンプルアプリケーション
音声を録音するサンプルアプリケーションを作成します。
フォームに、TMemoコンポーネント・MediaPlayerコンポーネント・TButtonコンポーネントを3つ配置します。
private変数を追加します。
private
{ private 宣言 }
FMicrophone: TAudioCaptureDevice;
音声ファイルのファイル名を取得するメソッドを作成します。
private
{ private 宣言 }
function GetAudioFileName: string;
uses System.IOUtils;
function TForm1.GetAudioFileName: string;
const
{$IF DEFINED(ANDROID) OR DEFINED(IOS)}
AUDIO_FILENAME = 'temp.caf';
{$ELSE}
AUDIO_FILENAME = 'temp.wav';
{$ENDIF}
begin
Result := TPath.Combine(TPath.GetDocumentsPath, AUDIO_FILENAME);
end;
フォームのOnCreateイベントでTAudioCaptureDeviceオブジェクトを作成します。
procedure TForm1.FormCreate(Sender: TObject);
begin
FMicrophone := TCaptureDeviceManager.Current.DefaultAudioCaptureDevice;
if not Assigned(FMicrophone) then
begin
Memo1.Lines.Add('音声キャプチャデバイスを使用できません。');
Exit;
end;
FMicrophone.FileName := GetAudioFileName;
end;
録音ボタンを押すと、録音を開始します。
procedure TForm1.ButtonStartClick(Sender: TObject);
begin
if Assigned(FMicrophone) then
begin
FMicrophone.StartCapture;
Memo1.Lines.Add('録音を開始しました。');
end;
end;
停止ボタンを押すと、録音を停止します。
procedure TForm1.ButtonStopClick(Sender: TObject);
begin
if (Assigned(FMicrophone)) and
(FMicrophone.State = TCaptureDeviceState.Capturing) then
begin
FMicrophone.StopCapture;
Memo1.Lines.Add('録音を終了しました。');
end;
end;
再生ボタンを押すと、録音したファイルを再生します。
procedure TForm1.ButtonPlayClick(Sender: TObject);
begin
if TFile.Exists(GetAudioFileName) then
begin
MediaPlayer1.FileName := GetAudioFileName;
MediaPlayer1.Play;
Memo1.Lines.Add('再生を開始しました。');
end;
end;
Androidで実行するには、権限の追加が必要です。
プロジェクトオプションの「使用する権限」を選択して「音声の録音」にチェックを入れます。
以上で完成です。
実機で実行して動作を確認してください。