ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

オーディオの録音と再生

オーディオの録音

オーディオ入力デバイス (システムに接続されたマイクなど) からのデータを MATLAB® での処理用に記録するには、以下の手順に従います。

  1. audiorecorder オブジェクトを作成します。

  2. record または recordblocking のメソッドを呼び出します。

    • record では、録音が進行中でも、関数呼び出しやコマンド プロンプトに対する制御が直ちに返されます。録音の長さを秒単位で指定するか、または stop メソッドを使用して録音を終了します。オプションとして、pause および resume のメソッドを呼び出すこともできます。

    • recordblocking では録音が終了するまで制御を保留します。録音の長さを秒単位で指定します。

  3. getaudiodata メソッドを使用して、信号データに対応する数値配列を作成します。

たとえば、マイクをシステムに接続して自分の声を 5 秒間録音します。数値信号データを採取してプロットを作成します。

% Record your voice for 5 seconds.
recObj = audiorecorder;
disp('Start speaking.')
recordblocking(recObj, 5);
disp('End of Recording.');

% Play back the recording.
play(recObj);

% Store data in double-precision array.
myRecording = getaudiodata(recObj);

% Plot the samples.
plot(myRecording);

録音の音質の指定

既定の設定により、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 は消去されます。

再生や録音をすべて確実に完了させるには、以下のオプションを検討してください。

  • playrecord の代わりに playblockingrecordblocking を使用します。ブロック メソッドでは、再生や録音が完了するまで制御が保留されます。制御をブロックすると、再生や録音の間は他のコマンドやメソッド (pauseresume など) を一切実行できません。

  • 使用する関数に、ベース ワークスペースでオブジェクトを作成する出力引数を作成します。たとえば、関数 playFile を変更して次の出力引数を含めます。

    function obj = playFile(myfile)

    関数を呼び出します。

    h = playFile('handel.mat');

    h はベース ワークスペースにあるため、コマンド プロンプトから再生を一時停止できます。

    pause(h)
この情報は役に立ちましたか?