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のチェックを有効にする.
:
次に,録音ネットワークを作成しよう. 図 2.2と 図 2.3 を参考に作っていこ う.パラメータのほとんどはデフォルト値でよいが,表 2.1 に示したパラメータだけは自分で設定しよう.
デバイスのチャネル数,サンプリング周波数は使用するデバイスの 仕様を確認して決めよう.デバイス名は,上で決めた名前を使おう. 録音フレーム数(frames)は,次の録音時間(duration)の計算式から逆算できる.
$\displaystyle duration [sec] = ( LENGTH + (frames - 1) * ADVANCE ) / SAMPLING\_ RATE $ | (1) |
ただし,上記の変数たちは AudioStreamFromMic のパラメータ. 例えば,すべてデフォルト,サンプリング周波数 16000Hz で,5秒録 音したいなら,以下の計算から,498にすればよい.
$\displaystyle 5 [sec] $ | $\displaystyle = $ | $\displaystyle (512 + (frames - 1) * 160) / 16000 $ | (2) |
ノード名 |
パラメータ名 |
型 |
意味と設定値 |
Iterate |
MAX_ITER |
int |
録音フレーム数 (498) |
AudioStreamFromMic |
CHANNEL_COUNT |
int |
デバイスのチャネル数 (8) |
AudioStreamFromMic |
SAMPLING_RATE |
int |
デバイスのサンプリング周波数 (1600) |
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 になる.
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.sw を sep_0.wav に 変換するには,次のようにすればよい.
sox -r 16000 -c 1 --bits 16 -s sep_0.sw sep_0.wav
See Also
HARK のデバイスの章,レシピ: うまく録音できない などが関連した文章である. 録音ツール wios による録音は 多チャネル録音したい を参照.
ネットワークファイルのノードやパラメータは,HARK ドキュメントを参照.