☆ PIPE 録音

サウンドデバイスから送られてきた音声データを、ハードディスクに保存せず に名前なしパイプを作成して他プロセスの標準入力(stdin)へと渡す事が可能です。

この機能を使うには「setup」の「録音の設定」の録音モードを「PIPE」にセッ トし、パイプの「設定」で標準入力としてデータを渡すコマンドとそのオプシ ョンを設定し、ラジオボタンをチェックして下さい。

コマンドでは置換文字を指定することもできます。詳しくは 置換規則一覧 を参照してください。

次に録音サイズに(WAVE 形式で保存した場合の)最大 データサイズをセットして下さい。ここで録音サイズを 0 にすると 「無限録音モード」となり停止ボタンを押すか、又は 起動したツールがパイプを切断するまで録音を停止しません。なお仮のデータ サイズとして 2000 M が起動したツールに送られますので、場合によっては 起動したツール側でヘッダを無視する等のオプション指定が必要になります。 その場合はPIPE 設定ダイアログの「ヘッダ非送信」をチェックしてヘッダを送信 しないようにします。

あとは録音ボタンを押せば録音を開始します。

PIPE 録音の具体的な使用方法については応用のページを参照して下さい。

なお録音中に表示される録音サイズは「パイプにロック音が出力したデータサイズ」 であり「ファイルのサイズ」ではありません。したがって実際のファイルサイズは 表示と異なる場合があります。

(注意 1)
起動したツールが停止して応答が無くなった場合は Shift キーを押し ながら録音停止ボタンを押すと録音の強制停止をします。

(注意 2)
ヘッダの関係でサイズを 2 G バイト以上に設定するとエラーが出るツールもあ ります。その場合には録音サイズを 2G 以下にして下さい。

(注意 3)
うまくデータが送信されない場合には、高度な設定のパイプのバッファサイズの ところを変えてみたり、起動したツールの読 み込み用のバッファサイズを変更してみて下さい。

(注意 4)
PIPE 設定ダイアログの「ヘッダ非送信」をチェックすると、 WAVE ヘッダ をコマンド側に送信せずに生の WAVE データだけをコマンド側に 渡します。


☆ MP3 録音

パイプ録音機能の応用として中間ファイルを作成せずに MP3 録音が可能です。

ここでは外部エンコーダを使用する方法を説明します。 ACM を使用する方法については こちらを 参照してください。

外部エンコーダとして標準入力からデータを渡す事が出来るもの を使用します。その様なエンコーダとしては

(新旧)午後のこ〜だ

LAME

SCMPX

等があります。

・LAME を用いて録音する例

(1) lame.exe を lockon.exe と同じフォルダに置く
(2)「setup」の「録音の設定」の録音モードを「PIPE」にする
(3) パイプの設定に

lame.exe - "%a"

の様に書いてラジオボタンをチェック。("%a" の前の - を忘れない様に)

(4) ファイル(*.mp3)と録音サイズを設定して録音開始。
lame のオプションに関しては lame のヘルプを参照して下さい。

・SCMPX を用いて録音する例

(1) scmpx.exe 、lockon.exe, fstdin.exe  が同じフォルダにあるのを確認する。
(2)「setup」の「録音の設定」の録音モードを「PIPE」にする
(3) パイプの設定に

scmpx /e /b9 /f stdin "%a"

の様に書いてラジオボタンをチェック。

(4) ファイル(*.mp3)と録音サイズを設定して録音開始。

SCMPX のオプションについては SCMPX のヘルプを参照してください。

(補足説明)

SCMPX は標準では標準入力からのデータ入力を受け付けないので、 ロック音に付属のFSTDIN を用いて標準入力化して利用しています。例えば上の例の様に PIPE 設定をした場合は

fstdin -dos -hide -command "scmpx /e /b9 /f dummy.dat %^%a%^"

を実行しています。 FSTDIN の詳細はFSTDIN のマニュアルを 参照してください。

・(新旧)午後のこ〜だ を用いて録音する例

DLL 版の旧午後のこ〜だ(GOGO.DLL) とロック音サービスパック内の 午後のこ〜だ DLL アダプター(gogodll.exe)を用いて録音します。

コンソール版の午後のこ〜だを使用する場合は下の説明の gogodll.exe の部分を gogo.exe に読み替えてください。なお、午後のこ〜だ DLL アダプターは新午後のこ〜だには 対応していませんので、新午後のこ〜だを使用する場合はコンソール版を使用してください。

(1) GOGO.DLL,gogodll.exe を lockon.exe と同じフォルダに置く
(2)「setup」の「録音の設定」の録音モードを「PIPE」にする
(3) パイプの設定に

gogodll.exe -b 128 -nopsy stdin "%a"

の様に書いてラジオボタンをチェック。

(4) ファイル(*.mp3)と録音サイズ((注) 2G 以下)を設定して録音開始。
午後のこ〜だ、及び午後のこ〜だ DLL アダプターの オプションに関してはそれぞれの説明書を参照して下さい。


☆ Ogg Vorbis 録音

Ogg Vorbis 形式でリアルタイム録音 をする場合は PIPE の設定の所に

oggenc.exe - -o "%a"

みたいに書きます。


☆ WMA 録音

・WMA8 で録音する例

WMA8 エンコーダ(Windows Media 8 Encoding Utility: wm8eutil.exe) でダイレクト WMA 録音を行えます。

(1) wm8eutil.exe, lockon.exe, fstdin.exe  が同じフォルダにあるのを確認する。
(2)「setup」の「録音の設定」の録音モードを「PIPE」にする
(3) パイプの設定に

wm8eutil -input stdin -output "%a"

の様に PIPE 設定をする。

(3) ファイル名(*.wma)と(wave で録音した場合のトータルの)録音サイズを設定
wm8eutil のオプションについては wm8eutil のヘルプを参照してください。 なお、wm8eutil は英語版のツール なので日本語のファイル名を使うと文字化けするので注意してください。

(補足説明)

wm8eutil は標準では標準入力からのデータ入力を受け付けないので、 ロック音に付属の FSTDIN を用いて標準入力化して利用しています。例えば上の例の様に PIPE 設定をした場合は

fstdin -v -dos -command "wm8eutil -input dummy.dat -output %^%a%^"

を実行しています。 FSTDIN の詳細は FSTDIN の マニュアルを 参照してください。

・旧バージョンの WMA で録音する例

waveIn のソースの一部を使用させて頂いて作成したロック音サービスパック内の wmastdin.exe を使用して録音します。なお、これを 使用するためには wmaudioredist.exe を導入する必要があります。 wmaudioredist.exe は、例えば デルタソフトさんのページなどで配布されています。

(1) インストールしていない場合は wmaudioredist.exe  をインストールする。
(2) PIPE の設定に

wmastdin 64 "%a" 

の様に書く。

(3) ファイル名(*.wma)と(wave で録音した場合のトータルの)録音サイズを設定


☆ ACM

付属のツール ACMCONV を使って ACM を使用する事が出来ます。 ACMCONV のマニュアルは こちらです。

(例) MP3 形式に変換(要 codec)

PIPE に

acmconv -mp3 stdin "%a"

と設定


☆ フィルタリング録音

付属の Wave フィルタツール WAVEFLT2 を用いてフィルタリングしながら 録音することが可能です。ここでは幾つかの簡単な例を示します。

WAVEFLT2 についての詳しい事は WAVEFLT2 の マニュアル を参照してください。

・ローパスフィルタ

10000 hz 以上の音をローパスフィルタにかけて取り除きつつ録音する場合は次のようにします。

(1) waveflt2.exe が lockon.exe と同じフォルダにあるのを確認する。
(2)「setup」の「録音の設定」の録音モードを「PIPE」にする。
(3) パイプの設定に

waveflt2.exe  -fir_lpf 10000 stdin "%a"

と書いてラジオボタンをチェックする。

(4) ファイルと録音サイズを設定して録音開始

・フィルタリング+OGG 録音

フィルタリング(この例ではローパスフィルタ) しつつ OGG 形式にダイレクトエンコードする場合

(1) waveflt2.exe, oggenc.exe が lockon.exe 
と同じフォルダにあるのを確認する。
(2)「setup」の「録音の設定」の録音モードを「PIPE」にする。
(3) waveflt2.exe と同じフォルダに

# config.txt
-silent
-fir_lpf 10000
-bit32float
-pipeout "oggenc.exe - -o %^%a%^"
# config.txt ここまで

と設定ファイル(ここでは config.txt)に書いて保存する。

(4) パイプの設定に

waveflt2.exe -cfg "config.txt" stdin "%a"

と書いてラジオボタンをチェックする。

(5) ファイル(*.ogg)と(Wave 形式で保存した場合の)録音サイズを設定して録音開始。

☆ 無音部検出分割録音

付属の Wave フィルタツール WAVEFLT2 の -nosound オプションを用いて入力音声の無音部分を 検知して自動的に保存ファイルを切り替える処理が可能です。 WAVEFLT2 の各オプションについての詳しいことは WAVEFLT2 の マニュアルを参照してください。

・wave ファイルに分割する例

録音時に無音部分が 0.5 秒続いた場合に分割する例です。 うまく分割できない場合は -nosound オプションの数字を変えてみてください。

waveflt2.exe -autoofs 300 -nosound 500 -60 stdin "%a"

この場合、例えばファイル名を output.wav とした場合は最初は output-0.wav にデータを出力し、 0.5 秒の無音部分を検知すると順番に output-1.wav , output-2.wav,... にデータを出力していきます。

・OGG 形式ファイルで分割録音する例

WAVEFLT2 の -pipeout オプションと組み合わせて OGG 形式で分割録音することが可能です。

(1) waveflt2.exe, oggenc.exe が lockon.exe と同じフォルダにあるのを確認する。
(2)「setup」の「録音の設定」の録音モードを「PIPE」にする。
(3) waveflt.exe と同じフォルダに

# config.txt ここから
-silent
-autoofs 300
-nosound 500 -60
-pipeout "oggenc.exe - -o %^%a%^"
# config.txt ここまで

と設定ファイル(ここでは config.txt)に書いて保存する。

(4) パイプの設定に

waveflt2.exe -cfg "config.txt" stdin "%a"

と書いてラジオボタンをチェック。

(5) ファイル(*.ogg)と(Wave 形式で保存した場合のトータルの)
録音サイズを設定して録音開始。
すると、例えばファイル名を output.ogg とした場合は最初は output-0.ogg にデータを出力し、 0.5 秒の無音部分を検知すると順番に output-1.ogg , output-2.ogg,... にデータを出力していきます。

・ファイルを分割した後、ノーマライズして OGG 形式で保存する例

入力音声の無音部を判定してファイルを分割し、 さらにノーマライズして OGG にエンコードする例です。

WAVEFLT2 の仕様上、 -nosound オプションと -normal オプションは同時に使用できない ので一旦 -nosound で分割した中間 WAVE ファイルを作成して -exec オプションで 2 段目の WAVEFLT2 を起動して改めてノーマライズ + OGG 化します。

-exec オプションで起動した 2 段目の WAVEFLT では中間ファイルを作成せずに直接 OGG エンコードを行います。

(1) oggenc.exe を waveflt2.exe ,lockon.exe と同じフォルダに置く
(2) waveflt2.exe と同じフォルダに下の config.txt 、config2.txt 
という 2 つの設定ファイルを作成する。

--------

## config.txt ここから
## 1 段目の WAVEFLT2 の設定ファイル
## 分割を行って 2 段目の WAVEFLT2 を起動
-autoofs 300
-nosound 500 -60 
-exec "waveflt2 -cfg %^config2.txt%^ %^%a%^ %^%a%^"
## config.txt ここまで


--------

## config2.txt ここから
## config.txt の -exec オプションで起動する 2 段
## 目の WAVEFLT2 の設定ファイル
## ノーマライズして OGG エンコード して中間ファイル削除
-silent
-normal -1
-bit32float
-pipeout "oggenc - -o %^%a%^"
-del
## config2.txt  ここまで

--------

(3) パイプの設定に

waveflt2.exe -cfg "config.txt" stdin "%a"

と書いてラジオボタンをチェック。

(5) ファイル(*.ogg)と(Wave 形式で保存した場合のトータルの)
録音サイズを設定して録音開始。
すると、例えばファイル名を output.ogg とした場合は最初は output-0.ogg にデータを出力し、 0.5 秒の無音部分を検知すると順番に output-1.ogg , output-2.ogg,... にデータを出力していきます。

うまく分割されない場合は config.txt の -nosound の数字を 調整してみてください。

config2.txt の -del オプションをコメントアウトすると 中間ファイルを削除しません。中間ファイルは上の例の場合は output000.bkp , output001.bkp … というファイルになります。 この中間ファイルの拡張子を .wav に変更すると(ノーマライズしていない) WAVE 形式ファイルになります。

また OGG 形式にエンコードしない場合は config2.txt の -pipeout オプション をコメントアウトして下さい。

(詳細説明)

1 段目の WAVEFLT で -nosound オプションで無音分割されて output000.ogg , output001.ogg …という「WAVE 形式の」 中間ファイルが作成されます。ここで分割されて ファイルが切り替わる度に -exec オプションによって 2 段目の WAVEFLT が起動されるのですが、 %^%a%^ %^%a%^ の様に入力と出力ファイル名を同じに指定しているので 中間ファイルが output000.bkp , output001.bkp …とリネームされます。 後はノーマライズ + OGG 化 して -del オプションで中間ファイルが 削除されます。


☆ 時間毎に分割録音

付属の Wave フィルタツール WAVEFLT2 の -split オプションを使うと 指定した時間毎にファイルを区切って連続して録音していきます。 WAVEFLT2 の -split オプションについての詳しいことは WAVEFLT2 の マニュアルを参照してください。

・wave ファイルに分割する例

10 分(600 秒)ごとに分割する場合

waveflt2.exe -split 600 stdin "%a"

この場合、例えばファイル名を output.wav とした場合は最初は output-0.wav にデータを出力し、 あとは 順番に output-1.wav , output-2.wav,... にデータを出力していきます。

・ エンドレス分割録音

1 時間(3600 秒)毎にファイルを分割して OGG 形式でエンドレスに録音する例です。

(1) waveflt2.exe, oggenc.exe が lockon.exe と同じフォルダにあるのを確認する。
(2)「setup」の「録音の設定」の録音モードを「PIPE」にする。
(3) 録音サイズを 0 とし「無限録音モード」にする。
(4) waveflt2.exe と同じフォルダに

# config.txt
-silent
-split 3600
-pipeout "oggenc - -o %^%a%^"
# config.txt ここまで

と設定ファイル(ここでは config.txt)に書いて保存する。

(5) パイプの設定に

waveflt2.exe -cfg "config.txt" stdin "%a"

と書いてラジオボタンをチェック。

(6) ファイルを設定して録音開始
すると、例えばファイル名を output.ogg とした場合は最初は output-0.ogg にデータを出力し、 一時間毎に output-1.ogg , output-2.ogg,... とファイルを切り替えてエンドレスにデータ を出力していきます。


☆ プラグインの作成

自前でフィルタ等のプラグインを作成される方は下の資料を参考にして下さい。

PIPE 録音開始時に標準入力から送られてくるヘッダの形式は以下の通りです。この ヘッダに続いて Wave のデータが送られてきます。

4 bytes: "RIFF"
4 bytes: (データサイズ+44)-8 (DWORD)
4 bytes: "WAVE"
4 bytes: "fmt "
4 bytes: fmt のサイズ = 16 (DWORD)
2 bytes: エンコード形式(PCM) = 1 (WORD)
2 bytes: チャンネル数 1 or 2 (WORD)
4 bytes: サンプルレート 11025 or 22050 or 44100 (DWORD)
4 bytes: バイト/秒 = レート*ブロック長 (DWORD)
2 bytes: ブロック長 = チャンネル*ビット/8 (WORD)
2 bytes: ビット深度 = 8 or 16 (WORD)
4 bytes: "data"
4 bytes: データサイズ (DWORD)

以下データ列(リトルエンディアン)
ここでデータサイズは「録音の設定」で指定した録音サイズが(ダミーとして) 入り、録音途中で停止ボタンを押すと EOF が送られてきます。従って ヘッダ のデータサイズと実際の録音サイズは異なる場合があるのに気をつけて下さい。

また、パイプのバッファサイズはデフォルトで 512k 取っています(設定で変更 可能です)。

詳しくはプラグインのサンプルコードを 参照して下さい。