サウンドデバイスから送られてきた音声データを、ハードディスクに保存せず に名前なしパイプを作成して他プロセスの標準入力(stdin)へと渡す事が可能です。
この機能を使うには「setup」の「録音の設定」の録音モードを「PIPE」にセッ トし、パイプの「設定」で標準入力としてデータを渡すコマンドとそのオプシ ョンを設定し、ラジオボタンをチェックして下さい。
コマンドでは置換文字を指定することもできます。詳しくは 置換規則一覧 を参照してください。
次に録音サイズに(WAVE 形式で保存した場合の)最大 データサイズをセットして下さい。ここで録音サイズを 0 にすると 「無限録音モード」となり停止ボタンを押すか、又は 起動したツールがパイプを切断するまで録音を停止しません。なお仮のデータ サイズとして 2000 M が起動したツールに送られますので、場合によっては 起動したツール側でヘッダを無視する等のオプション指定が必要になります。 その場合はPIPE 設定ダイアログの「ヘッダ非送信」をチェックしてヘッダを送信 しないようにします。
あとは録音ボタンを押せば録音を開始します。
PIPE 録音の具体的な使用方法については応用のページを参照して下さい。
なお録音中に表示される録音サイズは「パイプにロック音が出力したデータサイズ」 であり「ファイルのサイズ」ではありません。したがって実際のファイルサイズは 表示と異なる場合があります。
(注意 1)
起動したツールが停止して応答が無くなった場合は Shift キーを押し
ながら録音停止ボタンを押すと録音の強制停止をします。
(注意 2)
ヘッダの関係でサイズを 2 G バイト以上に設定するとエラーが出るツールもあ
ります。その場合には録音サイズを 2G 以下にして下さい。
(注意 3)
うまくデータが送信されない場合には、高度な設定のパイプのバッファサイズの
ところを変えてみたり、起動したツールの読
み込み用のバッファサイズを変更してみて下さい。
(注意 4)
PIPE 設定ダイアログの「ヘッダ非送信」をチェックすると、
WAVE ヘッダ
をコマンド側に送信せずに生の WAVE データだけをコマンド側に
渡します。
☆ MP3 録音
パイプ録音機能の応用として中間ファイルを作成せずに MP3 録音が可能です。
ここでは外部エンコーダを使用する方法を説明します。
ACM を使用する方法については
こちらを
参照してください。
外部エンコーダとして標準入力からデータを渡す事が出来るもの
を使用します。その様なエンコーダとしては
・LAME
等があります。
・LAME を用いて録音する例
・SCMPX を用いて録音する例
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 アダプターは新午後のこ〜だには
対応していませんので、新午後のこ〜だを使用する場合はコンソール版を使用してください。
Ogg Vorbis 形式でリアルタイム録音
をする場合は PIPE の設定の所に
oggenc.exe - -o "%a"
みたいに書きます。
・WMA8 で録音する例
WMA8 エンコーダ(Windows Media 8 Encoding Utility: wm8eutil.exe)
でダイレクト WMA 録音を行えます。
(補足説明)
wm8eutil は標準では標準入力からのデータ入力を受け付けないので、
ロック音に付属の FSTDIN
を用いて標準入力化して利用しています。例えば上の例の様に
PIPE 設定をした場合は
fstdin -v -dos -command "wm8eutil -input dummy.dat -output %^%a%^"
を実行しています。
FSTDIN の詳細は FSTDIN の マニュアルを
参照してください。
・旧バージョンの WMA で録音する例
waveIn
のソースの一部を使用させて頂いて作成したロック音サービスパック内の
wmastdin.exe を使用して録音します。なお、これを
使用するためには wmaudioredist.exe を導入する必要があります。
wmaudioredist.exe は、例えば
デルタソフトさんのページなどで配布されています。
付属のツール ACMCONV を使って ACM を使用する事が出来ます。
ACMCONV のマニュアルは
こちらです。
(例) MP3 形式に変換(要 codec)
PIPE に
acmconv -mp3 stdin "%a"
と設定
付属の Wave フィルタツール WAVEFLT2 を用いてフィルタリングしながら
録音することが可能です。ここでは幾つかの簡単な例を示します。
WAVEFLT2 についての詳しい事は WAVEFLT2 の
マニュアル
を参照してください。
・ローパスフィルタ
10000 hz 以上の音をローパスフィルタにかけて取り除きつつ録音する場合は次のようにします。
・フィルタリング+OGG 録音
フィルタリング(この例ではローパスフィルタ)
しつつ OGG 形式にダイレクトエンコードする場合
付属の 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 形式で分割録音することが可能です。
・ファイルを分割した後、ノーマライズして OGG 形式で保存する例
入力音声の無音部を判定してファイルを分割し、
さらにノーマライズして OGG にエンコードする例です。
WAVEFLT2 の仕様上、 -nosound オプションと -normal オプションは同時に使用できない
ので一旦 -nosound で分割した中間 WAVE ファイルを作成して
-exec オプションで 2 段目の WAVEFLT2 を起動して改めてノーマライズ + OGG 化します。
-exec オプションで起動した 2 段目の WAVEFLT では中間ファイルを作成せずに直接
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 形式でエンドレスに録音する例です。
自前でフィルタ等のプラグインを作成される方は下の資料を参考にして下さい。
PIPE 録音開始時に標準入力から送られてくるヘッダの形式は以下の通りです。この
ヘッダに続いて Wave のデータが送られてきます。
また、パイプのバッファサイズはデフォルトで 512k 取っています(設定で変更
可能です)。
詳しくはプラグインのサンプルコードを
参照して下さい。
(1) lame.exe を lockon.exe と同じフォルダに置く
(2)「setup」の「録音の設定」の録音モードを「PIPE」にする
(3) パイプの設定に
lame.exe - "%a"
の様に書いてラジオボタンをチェック。("%a" の前の - を忘れない様に)
(4) ファイル(*.mp3)と録音サイズを設定して録音開始。
lame のオプションに関しては lame のヘルプを参照して下さい。
(1) scmpx.exe 、lockon.exe, fstdin.exe が同じフォルダにあるのを確認する。
(2)「setup」の「録音の設定」の録音モードを「PIPE」にする
(3) パイプの設定に
scmpx /e /b9 /f stdin "%a"
の様に書いてラジオボタンをチェック。
(4) ファイル(*.mp3)と録音サイズを設定して録音開始。
(1) GOGO.DLL,gogodll.exe を lockon.exe と同じフォルダに置く
(2)「setup」の「録音の設定」の録音モードを「PIPE」にする
(3) パイプの設定に
gogodll.exe -b 128 -nopsy stdin "%a"
の様に書いてラジオボタンをチェック。
(4) ファイル(*.mp3)と録音サイズ((注) 2G 以下)を設定して録音開始。
午後のこ〜だ、及び午後のこ〜だ DLL アダプターの
オプションに関してはそれぞれの説明書を参照して下さい。
☆ Ogg Vorbis 録音
☆ WMA 録音
(1) wm8eutil.exe, lockon.exe, fstdin.exe が同じフォルダにあるのを確認する。
(2)「setup」の「録音の設定」の録音モードを「PIPE」にする
(3) パイプの設定に
wm8eutil -input stdin -output "%a"
の様に PIPE 設定をする。
(3) ファイル名(*.wma)と(wave で録音した場合のトータルの)録音サイズを設定
wm8eutil のオプションについては wm8eutil のヘルプを参照してください。
なお、wm8eutil は英語版のツール
なので日本語のファイル名を使うと文字化けするので注意してください。
(1) インストールしていない場合は wmaudioredist.exe をインストールする。
(2) PIPE の設定に
wmastdin 64 "%a"
の様に書く。
(3) ファイル名(*.wma)と(wave で録音した場合のトータルの)録音サイズを設定
☆ ACM
☆ フィルタリング録音
(1) waveflt2.exe が lockon.exe と同じフォルダにあるのを確認する。
(2)「setup」の「録音の設定」の録音モードを「PIPE」にする。
(3) パイプの設定に
waveflt2.exe -fir_lpf 10000 stdin "%a"
と書いてラジオボタンをチェックする。
(4) ファイルと録音サイズを設定して録音開始
(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 形式で保存した場合の)録音サイズを設定して録音開始。
☆ 無音部検出分割録音
(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,... にデータを出力していきます。
(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,... にデータを出力していきます。
☆ 時間毎に分割録音
(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,... とファイルを切り替えてエンドレスにデータ
を出力していきます。
☆ プラグインの作成
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 が送られてきます。従って ヘッダ
のデータサイズと実際の録音サイズは異なる場合があるのに気をつけて下さい。