Python sounddeviceをASIO対応させる

Windowsは音を扱いにくい!そんな中でもASIOを使えば多チャンネル低レイテンシーで嬉しい!
どうやらimport sounddeviceするだけでPythonでもASIOデバイスを扱えるらしい。やってみた。できないじゃないか!!

現状

私の環境 Windows11Home23H2, Python3.13.1, Visual Studio Code1.96.2
sounddevice.query_devices() してもASIOデバイスが表示されない。

解決方法

まずはsounddeviceをインストールします。

pip install sounddevice

ここで躓いているのなら「pip インストール」とかで検索して他サイトを参照してください。あと、再起動とかすると意外とできたりしますよ。

次に、インストールされたらへんのディレクトリを参照します。私の場合は以下の通りでした。
C:\Users\(myId)\AppData\Local\Programs\Python\Python313\Lib\site-packages\_sounddevice_data\portaudio-binaries

この中に以下の3つのファイルが入っています。
・libportaudio64bit.dll
・libportaudio64bit-asio.dll
・README.md

readmeを読めばわかるのですが、1つめのdllがasio以外をサポートするportaudio、-asioありのdllがasioを含めたホストAPIをサポートするportaudioです。
我々はASIOを使いたいので、元のlibportaudio64bit.dllを適当な名前に変えておいて、libportaudio64bit-asio.dllのファイル名をlibportaudio64bit.dllに変更します。
これだけでsounddeviceがASIOをサポートしたportaudioを認識し、pythonでASIOを利用できるようになります。
sounddevice.query_devices() でASIOデバイスも表示されるようになりました。

原因

モジュール「sounddevice」は、クロスプラットフォームのオーディオ入出力ライブラリ「portaudio」をpythonで使えるようにするためのものです。このportaudioがASIOをサポートしていたりしていなかったりすることが原因です。たぶん。

従来手法


このサイトからASIO対応したPortAudioのバイナリファイルをダウンロードして使え~というのが様々なサイトで言われていました。

https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio

しかし、現時点(2024/12/20)で公開停止されているんですよね。
どのサイトを探しても結局この公開停止ページに誘導されて、困っていました。

さらにインターネッツでいろいろ調べると、steinberg公式からASIO SDKをダウンロードするとか、portaudioをVisual Studioでコンパイルするとか、難しいことがいろいろ出てきます。しかも英語だしわからん。

しかしpip installしたsounddeviceに元からASIO対応したPortAudioのバイナリファイルが入っていたとは。
思わぬところで解決!

まとめ

私の場合は今回の方法だけで目的を達成することができました。
こういうのに詳しいわけではないので間違っている可能性もありますが、できたものはできたので備忘録として書き残しておきます。

いいなと思ったら応援しよう!