このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
オーディオの録音と再生
システム上のオーディオ入出力デバイスから、MATLAB® での処理用にオーディオ データを録音して再生します。R2020b 以降、オーディオ再生が MATLAB Online™ でサポートされています。
オーディオの録音
システムに接続されたマイクなどのオーディオ入力デバイスからデータを録音します。
audiorecorder
オブジェクトを作成します。record
またはrecordblocking
のメソッドを呼び出します。record
では、録音が進行中でも、関数呼び出しやコマンド プロンプトに対する制御が直ちに返されます。録音の長さを秒単位で指定するか、またはstop
メソッドを使用して録音を終了します。オプションとして、pause
およびresume
のメソッドを呼び出すこともできます。録音が非同期実行されます。recordblocking
では録音が終了するまで制御を保留します。録音の長さを秒単位で指定します。録音が同期実行されます。
getaudiodata
メソッドを使用して、信号データに対応する数値配列を作成します。
次の例では、recordblocking
および record
メソッドの使用方法を説明します。
マイク入力の録音
この例では、マイク入力の録音、録音の再生、録音したオーディオ信号の数値配列への格納を行う方法を説明します。まず、マイクをシステムに接続しなければなりません。
オーディオ入力を録音するための audiorecorder
オブジェクト recObj
を作成します。
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 秒間録音します。
disp('Start speaking.') recordblocking(recObj, 5); disp('End of Recording.');
録音を再生します。
play(recObj);
データを倍精度配列 y
に格納します。
y = getaudiodata(recObj);
オーディオ サンプルをプロットします。
plot(y);
異なるサウンド カードからの 2 チャネルの録音
2 つの異なるサウンド カードにそれぞれマイクを接続し、各オーディオを個別に録音するには、次の手順に従います。
audiodevinfo
を呼び出して、使用可能なサウンド カードをリストします。たとえば、次のコードは、システム上にある入力および出力オーディオ デバイスをすべて含む構造体配列を返します。使用するサウンド カードの名前を特定して、そのinfo = audiodevinfo;
ID
値を書き留めます。2 つの
audiorecorder
オブジェクトを作成します。たとえば、次のコードはaudiorecorder
オブジェクトrecorder1
を作成します。このオブジェクトは、デバイス 3 の単一チャネルを 44.1 kHz、サンプルあたり 16 ビットで録音するためのものです。audiorecorder
オブジェクトrecorder2
は、デバイス 4 の単一チャネルを 48 kHz で録音するためのものです。recorder1 = audiorecorder(44100,16,1,3); recorder2 = audiorecorder(48000,16,1,4);
各オーディオ チャネルを個別に録音します。
最初のrecord(recorder1); record(recorder2); pause(5);
record
の呼び出しがブロックされないため、複数の録音が同時に実行されます。録音を停止します。
stop(recorder1); stop(recorder2);
録音の音質の指定
既定の設定により、audiorecorder
オブジェクトでは 8,000 Hz のサンプル レート、8 ビットの深度 (サンプルごとに 8 ビット)、および単一のオーディオ チャネルが使用されます。これらの設定により、必要なデータ ストレージの量は最小化されます。録音の音質を上げるには、サンプル レートまたはビット深度の値を増やします。
たとえば、通常の CD では 44,100 Hz のサンプル レートと 16 ビットの深度が使用されています。audiorecorder
オブジェクトを作成して、上記の設定でステレオ (2 チャネル) の録音を行います。
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
では 8,192 Hz で再生されます。任意の再生において、ゆっくり再生するには小さなサンプル レートを、速く再生するには大きなサンプル レートを指定します。
メモ
ほとんどのサウンドカードで、およそ 5,000 ~ 48,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')
サンプル数が毎秒 8,192 のサンプル レートで録音した場合、ファイル内のサンプル 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