今回の目的は無線機(受信機)で受信した音声を使い慣れたWindowsでフリーズすることなく安定して録音することです。
やりたいこと
- 受信音声を安定して録音する
- 無音時でファイルを分割する
- 分割録音した音声ファイルを自動で整理する
- 出先でも聞けるようにする
PCの選定
私の場合は録音に専念してもらいたいので普段使いのメイン機とは別にPCを用意しました。Windowsが動けばいいので余っているPCでも全然OKなのですが、私は業務用デスクトップのFUJITSU ESPRIMO D588シリーズを選択しました。ノートPCでもいいですが停電復帰時に自動電源ONが可能なデスクトップにしました。その他理由は下記の通りです。
- 業務用なので堅牢に作られている
- Windows 10(11) Proのライセンスが付いている
- 整備性もよくプラスドライバーがあればM.2 SSDの搭載やCPU換装もOK(トルクス等ではない)
値段も安くなってきていて私が買ったときはヤフオクで1万円はしていましたが、最近だとCore i3 8100搭載機あたりなら本体8,000円ぐらいで買えるようです。もしWindows 11に対応しなくてもいいという場合はESPRIMO D586(第6世代)やD587(第7世代)なども選択肢に入るかと思います。また録音だけならほとんどアイドル状態なのでもっとコンパクトな筐体のPCを選ぶのもアリかと思います。


録音デバイスの選定
PC本体にあるライン入力でもいいですが、私は3台程度の受信機を接続して録音したかったのでUSB接続のオーディオキャプチャデバイスを使用しました。なんでもよいと思いますが私はサンワサプライの400-MEDI017を選択しました。3.5mmステレオミニジャックがあるのでそのまま受信機のイヤホン端子やスピーカー端子に接続できて便利です。

録音環境の構築
録音環境を構築していきます。
録音デバイスの準備
サンワサプライの400-MEDI017を接続したら、Windowsのサウンド設定から従来の「サウンド」を開き「録音」タブから録音デバイスの設定をします。デフォルトでは「マイク配列」などとなっていますが、複数台つなぐ場合区別がつかないので「DJX11」など受信機の型番などにして判別できるようにします。


この例では録音デバイスの「マイク配列」を受信機の型番「DJX11」に変更しました。
入力レベルの調整
受信機ごとに音量のバラツキがありますのでなるべく均一になるように音量を調整します。ライン入力の場合Windowsの入力レベルは最大で受信機でボリュームを調整するのが良いかと思います。
後述するSoXで入力レベルの確認が可能ですが、私はSoundEngine Freeをインストールしてこちらで調整していました。
SoX 録音ソフトのインストール
録音ソフトもいろいろありますがフリーで安定して使えたのはSoX – Sound eXchangeというコマンドラインで使用するソフトでした。最初に出会ったのはubuntuを使用しているときでしたがWindows用もあったので使ってみたところ安定して長期間録音することが可能でした。
まず下記のURLからSoXをダウンロードします。
ダウンロードされたsox-14.4.2-win32.exeを実行しインストールします。インストール先は所定の「C:\Program Files (x86)\sox-14-4-2」で問題ありません。パスを通してもいいですが今回はこのままいきます。
SoXを起動してみる
これで録音準備が整いましたので実際に録音してみます。まずはファイル出力せず正常に動作するか確かめます。Windowsのコマンドプロンプトを起動して下記のコマンドを入力します。ここでは先ほどサウンドで設定したDJX11という名前のデバイスを使用していますが、各々使いたい入力デバイスの名前に変えてください。
"C:\Program Files (x86)\sox-14-4-2\sox.exe" -c 1 -t waveaudio "DJX11" -n
コマンド実行後以下のような画面が出て最下行の時間等が増えていけばとりあえず動いています。
C:\Users\User>"C:\Program Files (x86)\sox-14-4-2\sox.exe" -c 1 -t waveaudio "DJX11" -n
Input File : 'DJX11' (waveaudio)
Channels : 1
Sample Rate : 48000
Precision : 16-bit
Sample Encoding: 16-bit Signed Integer PCM
In:0.00% 00:00:11.26 [00:00:00.00] Out:81.9k [ | ] Clip:0
続いて録音レベルを確認していきます。
[ =|= ] Clip:0
最下行のこの部分で現在の入力レベルLRを確認できます。
[ | ] Clip:0
無音だとこのようになります。
[!=====|=====!] Hd:0.0 Clip:2
ボリュームを上げすぎるとこのようにメーターが振り切れたりClip(音割れ)が発生します。
[ =====|===== ] Hd:4.0 Clip:0
FMのザーという音が流れるようにスケルチを開放してこのぐらいの表示になるように無線機のボリュームを調整します。最終的には録音結果を聞いて調整した方がいいです。
動作を止める場合はCtrl+Cを押下します。
SoXで録音してみる
先ほどのコマンドから-nを削除して代わりに出力ファイルを指定すると録音になります。フォルダは自動では作成されないのでエクスプローラなどからあらかじめ作成しておきます。
"C:\Program Files (x86)\sox-14-4-2\sox.exe" -c 1 -t waveaudio "DJX11" "C:\Rec\TEST.ogg"
10秒ほど録音したらCtrl+Cで停止します。この場合C:¥Recの中にTEST.oggが作成されているか確認しTEST.oggが再生できればOKです。
SoXを無線録音に最適化する
基本的な動作が大丈夫なら無線の録音に最適化をしていきます。まず先ほどのコマンドをベースにオプション等を追加していきます。
"C:\Program Files (x86)\sox-14-4-2\sox.exe" -c 1 -r 8000 -t waveaudio "DJX11" "C:\Rec\%DATE:~-10,4%%DATE:~-5,2%%DATE:~-2,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%.ogg" silence 1 00:00:00.5 -40d 1 00:00:04 -45d : newfile : restart
ちょっとコマンドが長くなりましたがそれほど難しいことはやっていません。
-c 1は録音するチャンネル数を指定します。この場合モノラルになります。
-r 8000はサンプリングレート(Hz)を指定します。8kと書いてもOKです。音楽ファイルに比べてかなり低めになっていますが無線なので音声帯域が録音できれば十分です。
-t waveaudio “DJX11″で入力デバイスを指定します。この場合先ほど「サウンド」で設定したDJX11という名称の入力デバイスから録音します。
“C:\Rec\%DATE:~-10,4%%DATE:~-5,2%%DATE:~-2,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%.ogg”は出力フォルダとファイル名を指定しています。同じファイル名がある場合上書きされてしまうので%DATE%と%TIME%の環境変数をもとに、コマンドを実行した日付時刻がファイル名になるようにして万が一の上書き事故に備えています。また無線機ごとにフォルダを用意してC:¥Rec\DJX11\などと指定してフォルダ別に録音するのもよいかと思います。
silence 1 00:00:00.5 -40d 1 00:00:04 -45d : newfile : restartは無音部分で分割しながら録音を続けるために必要です。この場合-40デシベル以上が0.5秒継続したら録音を開始して、-45デシベル以下が4秒継続したら録音を停止する設定になります。この辺りは各々の環境に応じて調整してください。最後の: newfile : restartをつけると無音部分で分割し新しいファイルを作りながら録音を継続します。
バッチファイルとして保存する
上記のSoXコマンドを毎回入力するのは面倒なのでバッチファイルとして保存します。メモ帳などで先ほどのコマンド一式を「Rec_DJX11.bat」などとして「C:¥Rec」へ保存します。次回からはこのバッチファイルをダブルクリックで起動すれば録音が開始されます。またタスクスケジューラなどで起動時に自動的に実行されるようにしてもいいかと思います。
とりあえずこれで通話ごとに分割された音声ファイルが作成されていきます。ファイル形式や音質などは好みがあると思うので慣れてきたらSoXの説明書を見て調整してください。
ファイル名を録音時刻にして日付別に分ける
録音が順調にできるようになると録音ファイルを整理したくなってきます。しかし手動でやっていては大変面倒なのでバッチファイルとPowerShellで自動的に整理できるようにします。あまりスマートな方法ではないかもしれませんが一応公開します。
SoXの録音ファイル名
まずSoXで生成される録音ファイル名の頭にxを足します。これはリネーム前の印でなんでもよいのですが、後述のバッチファイルでC:¥Rec\のサブフォルダを含めたx*.oggにヒットするファイルをファイル名変更処理の対象とするためです。
"C:\Program Files (x86)\sox-14-4-2\sox.exe" -c 1 -r 8000 -t waveaudio "DJX11" "C:\Rec\x%DATE:~-10,4%%DATE:~-5,2%%DATE:~-2,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%.ogg" silence 1 00:00:00.5 -40d 1 00:00:04 -45d : newfile : restart
バッチファイル
メモ帳などを使って「C:\Rec\更新日時バッチ.bat」に保存してください。
@echo off
SET FOLDER_PATH=C:\Rec
setlocal ENABLEDELAYEDEXPANSION
:loop
for /r %FOLDER_PATH% %%a in (x*.ogg) do (
set size=%%~za
if not %%~za == 0 (
for /f "usebackq tokens=*" %%i in (`powershell -NoProfile -ExecutionPolicy Unrestricted -Command "& { (Get-ItemProperty '%%a').LastWriteTime.ToString('yyyyMMdd-HHmmss_')+(Get-Random -Minimum 10 -Maximum 99) }"`) do (set DATETIME=%%i)
echo %%~fa %%~dpa!DATETIME:~0,8!\!DATETIME!%%~xa
md %%~dpa!DATETIME:~0,8!
move "%%a" %%~dpa!DATETIME:~0,8!\!DATETIME!%%~xa
)
)
timeout /t 30 > nul
goto :loop
30秒ごとにループしてx*.oggにヒットするファイルを処理します。ファイルの更新日時の取得にはPowerShellを呼び出して取得しています。処理対象がたまりすぎていると結構時間がかかりますので録音開始と同時に起動しておくのがいいかと思います。
Zelloを使って出先でも聞く
せっかく録音専用PCを用意したので出先でも聞けるようにします。WindowsにZelloをインストールしてスマホにもZelloをインストールしてネット環境があればどこでも聞けるようにします。ちょっと音質は悪いですが簡単なのでなかなか便利です。
これについても解説しようかと思ったのですが私の使ってるPC用Zelloはレガシーアプリ扱いで以前のように簡単にダウンロードできなくなっていました。最新の事情がちょっと分からないのでこれについては今回扱いません。
最後に
この記事は私の忘備録の一面があります。というのも最近UbuntuでRTLSDR-Airbandを使ったUSBドングルを使用したエアバンドの受信が軌道に乗ったので、従来のWindowsでのアナログ録音を廃止してUbuntuでの録音に移行しました。しかしながらせっかく何年もかけて構築したWindowsでの録音ノウハウを捨ててしまうのは惜しいので記事として残しました。各種ツールは一式バックアップがありますが、時間が経てばやり方などを忘れてしまいそうなので、若干一般向けな文章として書き上げてみました。役に立つかはわかりませんが何かの参考になれば幸いです。
コメント