2023年8月3日木曜日

Pythonでアプリが再生する音を録音する方法

 ステレオミキサーを利用してPCが再生している音をプログラムから録音する方法のご紹介です。Windows 11をベースに説明していますが、基本的なところはWindows 10でも同じです。ステレオミキサーの設定と、音声出力デバイスが複数ある場合の注意をご案内します。

■はじめに

 接続されているサウンド入力デバイス、出力デバイスを最小限にしてから設定を行うことをお勧めします。ヘッドセットや外部スピーカーの他、ディスプレイケーブルだけが接続されているディスプレイもサウド出力デバイスになるので、極力外しておきましょう。

■Windows 11の設定

 スクリーン右下にあるスピーカーアイコンを右クリックして"サウンドの設定"を開きます。出力デバイスと入力デバイスを設定できるので、入力デバイスをステレオミキサーに変更し、画面からはみ出てますが、マイクボリュームを最大にしておきましょう。


 もしステレオミキサーが選択できないようなら、デバイスマネージャーで設定を確認します。"オーディオの入力および出力"のツリーを展開してください。ステレオミキサーが選択できない場合はツリー配下にステレオミキサーが無いと思います。メニューの表示→非表示のデバイスを表示をチェックすることで表示されたら、ドライバーの更新、有効化、インストールしなおし等順番に操作してみてください。ここでうまくステレオミキサーを有効にできない場合はPCそのものを変えてみるとか大胆な手を打ってください。

■デバイスIDを確認する

 自分が利用しているPCのステレオミキサーのインデックスを確認します。pythonのライブラリ"sounddevice"もしくは"pyaudio"を利用してステレオミキサーのインデックスを確認するサンプルを掲載しておきます。
import sounddevice as sd
print (sd.query_devices())
import pyaudio
p = pyaudio.PyAudio()
for index in range(0, p.get_device_count()):
    print("{index}:{name}".format(**p.get_device_info_by_index(index)))
こちらは"sounddevice"のライブラリを利用して筆者の利用しているPCのデバイスインデックスを確認した結果です。ステレオミキサーはインデックス1番であることがわかります。1点ポイントですが、このRealtekのステレオミキサーで録音できる音は、Realtekのサウンドデバイスから音が出ている必要があります。ステレオミキサーの設定が正しくても別のデバイスから音が出ていても録音できません。また、実際にマイクから音を拾っているわけではありませんが、ミュートしていると録音できません。この2点気づいていないと、"昨日は動いたのに・・・"となります。
 ちなみに、不等号がデフォルトデバイス、行末のin,outの前の数字がチャンネル数になります。マイクとスピーカーは1セットしか付いていませんが、マイクがやたら多く出てきているのは設定をいじくりすぎておかしくなっているのかもしれません。

■Pythonで録音する

ここまでくれば後は簡単です。入力デバイスに先ほどのインデックスを指定すればOK。"sounddevicve"ライブラリの場合は、このような感じで指定すれば良いです。ライブラリの説明を見るよりサンプルソースを探せば早いかと。
sd.default.channels = 1, 2  #Different values for input and output:

0 件のコメント:

コメントを投稿