2.1 はじめての録音

Problem

HARK を使って音声を録音してみたいが,やり方が分からない. HARK を初めて使うので,なにをすればいいか分からない.

Solution

HARK をオンラインで動かそうとすると, マイクからの音声入力は避けられない. また,録音はHARK の基本でもあるので, 初めて HARK を使う人は,ここから試していこう. ただし,単純に録音をするだけなら録音/再生ツール wios  を使えば良い. 使い方は HARK ドキュメントか,レシピ: 多チャネル録音したい を参照.

録音デバイス

:
まずは,録音デバイスを用意しよう. 音源定位や音源分離には多チャネルの録音デバイスを用意する必要がある. ただし,単に録音するだけなら,マイクをコンピュータのマイク端子に差せばよい. 録音デバイスの詳細は HARK ドキュメントの デバイスの章を参照.

ここでは,ALSA デバイスを前提とする. ターミナルで, arecord -l を実行してみよう.たとえば,このような出 力が得られるはずだ.card から始まる行に,接続したデバイス名がある ことを確認しよう.

card 0: Intel [HDA Intel], device 0: AD198x Analog [AD198x Analog]
  Subdevices: 2/2
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
card 1: ** [***], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

ALSAでは,デバイス名は,card と subdevice の二つで指定する. 例えば,card 0 の subdevice 1 に対応するデバイス名は plughw:0,1 である.良く分からない場合は,plughw:0,0 を使っておこう.

Windows版ではDirectSound,およびASIOに対応したデバイスが利用できる. [スタート] – [すべてのプログラム] – [HARK] – [Sound Device List]を起動するとHARKで利用可能な サウンドデバイス名の一覧が表示される.使用したいデバイスがリストアップされていることを確認する. コマンドプロンプトで, SoundDeviList と入力し,実行してもよい.

DirectSound対応のデバイスを利用する場合はAudioStreamFromMicノードのパラメータ,DEVICETYPEをDSに設定し, DEVICEにデバイス名を入力する.マルチバイト文字列には非対応であるが 部分一致検索されるのでマルチバイト文字を除くデバイス名の一部を入力すればよい.

ASIO対応デバイスを利用する場合は,ASIO Plugin for HARKをインストールし, AudioStreamFromASIOノードを用いる. AudioStreamFromMicと同様に,パラメータにデバイス名を入力すればよい.

HARK DesignerのNode ListにAudioStreamFromASIOが見当たらない場合は メニューの[Preference] –\.[Packages]でlibasio-plugin.defのチェックを有効にする.

\includegraphics[width=10cm]{fig/recipes/libasio}
Figure 2.1: ASIO Plugin for HARKの利用
録音ネットワーク

:
次に,録音ネットワークを作成しよう. 図 2.2と 図 2.3 を参考に作っていこ う.パラメータのほとんどはデフォルト値でよいが,表 2.1 に示したパラメータだけは自分で設定しよう.

デバイスのチャネル数,サンプリング周波数は使用するデバイスの 仕様を確認して決めよう.デバイス名は,上で決めた名前を使おう. 録音フレーム数(frames)は,次の録音時間(duration)の計算式から逆算できる.

  $\displaystyle Recording~ time = (LENGTH + (frames- 1) * ADVANCE)/SAMPLING\_ RATE $   (1)

ただし,上記の変数たちは AudioStreamFromMic のパラメータ. 例えば,すべてデフォルト,サンプリング周波数 16000Hz で,5秒録 音したいなら,以下の計算から,498にすればよい.

  $\displaystyle 5[sec] $ $\displaystyle = $ $\displaystyle (512+(frames - 1) * 160)/16000 $   (2)
\includegraphics{fig/recipes/demo-RecordALSA1ch-MAIN}
Figure 2.2: MAIN (subnet サブネットワーク)
\includegraphics[width=14cm]{fig/recipes/demo-RecordALSA1ch-MAIN_LOOP-SaveWavePCM}
Figure 2.3: MAIN_LOOP (iterator サブネットワーク)
Table 2.1: 録音ネットワークのパラメータ

ノード名

パラメータ名

意味と設定値

Iterate

MAX_ITER

int 

録音フレーム数 (498)

AudioStreamFromMic 

CHANNEL_COUNT

int 

デバイスのチャネル数 (8)

AudioStreamFromMic 

SAMPLING_RATE

int 

デバイスのサンプリング周波数 (16000)

AudioStreamFromMic 

DEVICETYPE

string 

使用するデバイスの種類 (ALSA)

AudioStreamFromMic 

DEVICE

string 

使用するデバイス名 (plughw:0,0)

録音の実行

:
完成したネットワークを実行してみよう. 録音できれば,チャネルの数だけファイル sep_0.wav, sep_1.wav...ができているはずだ. 適当なプレーヤーで再生しよう.たとえば,次のようにすればよい.

    aplay sep_0.wav
トラブルシューティング

:
これでうまくいけばよいが,失敗する場合は,次のことを確認しよう. また,レシピ うまく録音できない も確認しよう.

マイク接続

:
プラグが抜けていたり,緩んでいないかを確認し,しっかり接続する.

プラグインパワー

:
録音デバイスがプラグインパワーに対応している時問題ないが, そうでない時は,外部電源を供給する必要がある.電池の残量や 電源スイッチを確認しよう.

別の録音ソフトで確認

:
他のソフトウェアでも録音できない場合は,OS やドライバの設 定,録音デバイスの接続または設定を調べよう.

デバイス名が間違い

:
デバイスを複数使用しているときは,名前を間違えている可能性 も考えよう.arecord -l でもう一度確認しよう(Windows版ではSound Device List).あるい は,いろいろ別のデバイスも試してみよう.

Discussion

SaveWavePCM が最も簡単だが, ヘッダが不要な場合は,SaveRawPCM を使うと 16bit リトルエンディアンで書き込まれた raw ファイルとして保存もできる. その場合のネットワークを図 2.4 に示す. この場合,録音ファイルの拡張子は .sw になる.

\includegraphics{fig/recipes/demo-RecordALSA1ch-MAIN_LOOP-SaveRawPCM}
Figure 2.4: MAIN_LOOP (iterator サブネットワーク)

raw ファイルの読み込みと表示は,python の numpy,pylab モジュールを使って 次のように実現できる.

        import numpy, pylab
        waveform = numpy.fromfile("sep_0.sw", numpy.int16)   
        pylab.plot(waveform)
        pylab.show()

raw ファイルの再生は, aplay に,ファイル形式とサンプリング周波数 を与えれば可能だ.

        aplay -c 1  -r 16000 -f S16_LE sep_0.sw 

raw ファイルにヘッダを付加すれば,wav ファイルへの変換もできる. soxを使えば簡単だ. 例えば,16kHz で録音したファイル sep_0.swsep_0.wav に 変換するには,次のようにすればよい.

        sox -r 16000 -c 1 --bits 16 -s sep_0.sw sep_0.wav

See Also

HARK のデバイスの章,レシピ: うまく録音できない などが関連した文章である. 録音ツール wios  による録音は 多チャネル録音したい を参照.

ネットワークファイルのノードやパラメータは,HARK ドキュメントを参照.