オーディオの録音と再生
システム上のオーディオ入出力デバイスから、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