ドキュメンテーション

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

オーディオの録音と再生

オーディオの録音

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

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

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

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

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

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

次の例では、recordblocking および record メソッドの使用方法を説明します。

マイク入力の録音

この例では、マイク入力の録音、録音の再生、録音したオーディオ信号の数値配列への格納を行う方法を説明します。まず、マイクをシステムに接続しなければなりません。

オーディオ入力を録音するための audiorecorder オブジェクト recObj を作成します。

recObj = audiorecorder
recObj = 

  audiorecorder with properties:

          SampleRate: 8000
       BitsPerSample: 8
    NumberOfChannels: 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 つの異なるサウンド カードにそれぞれマイクを接続し、各オーディオを個別に録音するには、次の手順に従います。

  1. audiodevinfo を呼び出して、使用可能なサウンド カードをリストします。たとえば、次のコードは、システム上にある入力および出力オーディオ デバイスをすべて含む構造体配列を返します。

    info = audiodevinfo;
    使用するサウンド カードの名前を特定して、その ID 値を書き留めます。

  2. 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);
    

  3. 各オーディオ チャンネルを個別に録音します。

    record(recorder1);
    record(recorder2); 
    pause(5);
    最初の record の呼び出しがブロックされないため、複数の録音が同時に実行されます。

  4. 録音を停止します。

    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 は消去されます。

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

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

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

    function obj = playFile(myfile)

    関数を呼び出します。

    h = playFile('handel.mat');

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

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