オーディオの録音と再生
システム上のオーディオ入出力デバイスから、MATLAB® での処理用にオーディオ データを録音して再生します。MATLAB Online™ および MATLAB Web App Server™ でのオーディオの再生と録音は、Google Chrome® でサポートされています。
オーディオの録音
システムに接続されたマイクなどのオーディオ入力デバイスからデータを録音します。
audiorecorder
オブジェクトを作成します。record
メソッドまたはrecordblocking
メソッドを呼び出します。record
では、録音が進行中でも、呼び出し元の関数やコマンド プロンプトに対する即時制御が返されます。録音の長さを秒単位で指定するか、またはstop
メソッドを使って録音を終了します。オプションとして、pause
メソッドとresume
メソッドを呼び出します。録音が非同期実行されます。recordblocking
では録音が完了するまで制御が保留されます。録音の長さを秒単位で指定します。録音が同期実行されます。
getaudiodata
メソッドを使用して、信号データに対応する数値配列を作成します。
次の例では、recordblocking
メソッドおよび record
メソッドの使用方法を説明します。
マイク入力の録音
この例では、マイク入力の録音、録音の再生、録音したオーディオ信号の数値配列への格納を行う方法を説明します。まず、マイクをシステムに接続しなければなりません。
オーディオ入力を録音するために、recObj
という名前の、既定のプロパティをもつ audiorecorder
オブジェクトを作成します。
recObj = audiorecorder
recObj = audiorecorder with properties: SampleRate: 8000 BitsPerSample: 8 NumChannels: 1 DeviceID: -1 CurrentSample: 1 TotalSamples: 0 Running: 'off' StartFcn: [] StopFcn: [] TimerFcn: [] TimerPeriod: 0.0500 Tag: '' UserData: [] Type: 'audiorecorder'
audiorecorder
は、8000 Hz、8 ビット、1 チャネルの audiorecorder
オブジェクトを作成します。
音声を 5 秒間録音します。
recDuration = 5; disp("Begin speaking.") recordblocking(recObj,recDuration); disp("End of recording.")
録音を再生します。
play(recObj);
データを倍精度配列 y
に格納します。
y = getaudiodata(recObj);
オーディオ サンプルをプロットします。
plot(y);
異なるサウンド カードからの 2 チャネルの録音
2 つの異なるサウンド カードにそれぞれマイクを接続し、各オーディオを個別に録音するには、次の手順に従います。
audiodevinfo
を呼び出して、使用可能なサウンド カードをリストします。たとえば、次のコードは、システム上にある入力および出力オーディオ デバイスをすべて含む構造体配列を返します。使用するサウンド カードの名前を特定して、そのinfo = audiodevinfo;
ID
値を書き留めます。2 つの
audiorecorder
オブジェクトを作成します。たとえば、次のコードは、デバイス 3 の単一チャネルを 44.1 kHz、サンプルあたり 16 ビットで録音するためのaudiorecorder
オブジェクトrecorder1
を作成します。コードでは次に、デバイス 4 の単一チャネルを 48 kHz で録音するためのaudiorecorder
オブジェクトrecorder2
を作成します。recorder1 = audiorecorder(44100,16,1,3); recorder2 = audiorecorder(48000,16,1,4);
各オーディオ チャネルを個別に録音します。
最初のrecord(recorder1); record(recorder2); pause(5);
record
の呼び出しがブロックされないため、複数の録音が同時に実行されます。録音を停止します。
stop(recorder1); stop(recorder2);
録音の音質の指定
既定では、audiorecorder
オブジェクトによって 8000 Hz のサンプル レート、8 ビットの深度 (サンプルあたり 8 ビット)、および単一のオーディオ チャネルが使用されます。これらの設定を用いると、必要なデータ ストレージの量は小さなものとなります。録音の音質を上げるには、サンプル レートまたはビット深度の値を増やします。
たとえば、CD では 44,100 Hz のサンプル レート、16 ビットの深度、および 2 つのオーディオ チャネルが使用されます。audiorecorder
オブジェクトを作成して、上記の設定で録音を行います。
myRecObj = audiorecorder(44100,16,2);
利用可能なプロパティと値の詳細は、audiorecorder
のリファレンス ページを参照してください。
オーディオの再生
オーディオのインポートまたは録音を行った後、そのデータを再生するために MATLAB ではいくつかの方法がサポートされています。
単一の関数呼び出しを使用する単純な再生には、
sound
またはsoundsc
を使用します。たとえば、信号とサンプル レートのデータを含むサンプル用 MAT ファイルを読み込み、オーディオを再生します。load chirp.mat sound(y,Fs)
一時停止、再開、コールバックの定義など、再生に柔軟性をもたせるには、関数
audioplayer
を使用します。audioplayer
オブジェクトを作成してから、メソッドを呼び出してオーディオを再生します。たとえば、gong
サンプル ファイルを再生します。load gong.mat gong = audioplayer(y,Fs); play(gong);
その他の例は、関数内でのオーディオの録音と再生を参照してください。
サンプル レートを指定しない場合、sound
は 8192 Hz で再生を行います。任意の再生において、ゆっくり再生するには小さなサンプル レートを、速く再生するには大きなサンプル レートを指定します。
メモ
ほとんどのサウンド カードでは、およそ 5000 ~ 192,000 Hz のサンプル レートがサポートされます。この範囲外のサンプル レートを指定すると、予期せぬ結果が発生する場合があります。
関数内でのオーディオの録音と再生
関数内で audioplayer
オブジェクトまたは audiorecorder
オブジェクトを作成する場合、そのオブジェクトが存続するのは関数の持続時間のみとなります。たとえば、playFile
というプレーヤー関数と単純なコールバック関数 showSeconds
を作成します。
function playFile(myfile) load(myfile) obj = audioplayer(y,Fs); obj.TimerFcn = 'showSeconds'; obj.TimerPeriod = 1; play(obj); end function showSeconds disp("tick") end
コマンド プロンプトから playFile
を呼び出して、ファイル handel.mat
を再生します。
playFile("handel.mat")
毎秒 8192 サンプルのサンプル レートで録音した場合、ファイル内の 73,113 サンプルの再生には約 8.9 秒がかかります。ただし、関数 playFile
は通常、再生が完了する前に終了し、audioplayer
オブジェクト obj
は消去されます。
再生や録音を完了させるには、以下のオプションを検討してください。
play
やrecord
の代わりにplayblocking
やrecordblocking
を使用します。ブロック メソッドでは、再生や録音が完了するまで制御が保留されます。制御をブロックすると、再生や録音の間は他のコマンドやメソッド (pause
やresume
など) を一切発行できません。使用する関数に、ベース ワークスペースでオブジェクトを作成する出力引数を作成します。たとえば、関数
playFile
を変更して出力引数を含めます。function obj = playFile(myfile)
関数を呼び出します。
h = playFile("handel.mat");
h
はベース ワークスペースにあるため、コマンド プロンプトから再生を一時停止できます。pause(h)
参考
audioplayer
| sound
| soundsc
| audiorecorder