Microsoft Visual Studioを用いてPortAudioをビルドする
PythonのsounddeviceモジュールをASIO対応させたい~の試行錯誤の一環でやったのですが、別の方法で簡単に解決できました。初心者のわたくしがせっかくdeeplとかでがんばったんで、インターネットの海に放流しまーす
以下の2つのサイトを参考にします。
Microsoft Visual Studioをダウンロードする
VS Codeではありませんよ。私は別件でインストール済みでした。
Visual C++をダウンロードする
同じくインストール済みでした。
次にMicrosoft Visual Studio上での作業です。
空のプロジェクトを新規作成。プロジェクト名は今回は「PortAudioASIO」にしておきます。
PortAudioをダウンロードする
公式サイトからpa_stable_v190700_20210406.tgz をインストールします。
You probably want this!!と書いてある。その通りです。
解凍したらフォルダ名を「portaudio」にリネームし、先ほど作ったプロジェクトの.slnファイルと同じディレクトリに移動します。
![](https://assets.st-note.com/img/1734507898-H2Si96OvpF0cA8GCLVTtXUW1.png?width=1200)
ASIO SDKをダウンロードする
Steinberg公式サイトから。なんか登録とかする必要がありますが無料。
フォルダ名を「ASIOSDK2」に変更し、先ほど作ったプロジェクトの.slnファイルと同じディレクトリに移動します。
![](https://assets.st-note.com/img/1734507898-PNEWBJHeZo4fdta8KpSbG6zn.png?width=1200)
ここでディレクトリを見ておきましょう。
Visual Studio の今回作成したソリューションディレクトリに以下の3点が含まれていることを確認します。
・.slnファイル(私はPortAudioASIO.slnと名付けました)
・portaudioフォルダ
・ASIOSDK2フォルダ
私の環境の場合…
C
└Users
└(わたくし)
└source
└repos
└PortAudioASIO
├PortAudioASIO.sln
├PortAudioASIOフォルダ
├PortAudioフォルダ
├ASIOSDK2フォルダ
└x64
プロジェクトを開き(slnをダブルクリックし)、必要なファイルを追加していきます。
ソースファイルに以下を追加します。
![](https://assets.st-note.com/img/1734508939-59WPpfC602MirQLsOelvhzBo.png?width=1200)
ASIOSDK2\common
・asio.cpp
ASIOSDK2\host
・asiodrivers.cpp
ASIOSDK2\host\pc
・asiolist.cpp
portaudio\src\hostapi\asio
・pa_asio.cpp
portaudio\src\common
・pa_allocation.c
・pa_converters.c
・pa_cpuload.c
・pa_dither.c
・pa_front.c
・pa_process.c
・pa_ringbuffer.c
・pa_stream.c
・pa_trace.c
portaudio\src\os\win
・pa_win_hostapis.c
・pa_win_util.c
・pa_win_coinitialize.c
・pa_win_waveformat.c
・pa_x86_plain_converters.c
portaudio\examples
・paex_saw.c (またはmain()を含む別のファイル コンソール exe をビルドするため。
また、ヘッダーファイルも追加しておきます。
portaudio\include
・portaudio.h
・pa_asio.h
次に、プロジェクト自体を選択した状態で…
![](https://assets.st-note.com/img/1734509534-5PLF8Z1fudYtm9Jy2WKRl463.png)
プロジェクト->プロパティ->C/C++->プリプロセッサ->プリプロセッサ定義
に「PA_USE_ASIO=1」を追加します。手入力で以下に変更しましょう。
PortAudioでASIOを使用します、という設定です。
WIN32;_DEBUG;_CONSOLE;PA_USE_ASIO=1;%(PreprocessorDefinitions)
![](https://assets.st-note.com/img/1734509602-uUskRVA3cNLZd5lEMgTpF8Pv.png?width=1200)
同じ画面の
プロジェクト->プロパティ->C/C++->全般->追加のインクルードディレクトリ に以下を入力します。
portaudioとASIOSDK2を先ほど述べた場所以外に保存した場合は適宜変更してください。
..\portaudio\include;..\portaudio\src\common;..\portaudio\src\os\win;..\asiosdk2\common;..\asiosdk2\host;..\asiosdk2\host\pc;%(AdditionalIncludeDirectories)
![](https://assets.st-note.com/img/1734629836-ralEFHXgbR7pSqTdD3L8QK1f.png?width=1200)
プロジェクト->プロパティ->構成プロパティ->詳細->文字セット
マルチバイト文字セットを使用する
ASIO SDK の一部のソース コードは、Win32 API UNICODE モードと互換性が無いためです。
![](https://assets.st-note.com/img/1734630281-s7EzqtmcKo6SXHbpyQdrJUNn.png?width=1200)
プロジェクト->プロパティ->構成プロパティ->C/C++->詳細設定->指定の警告を無効にする
4996を追加
strcpy()が非推奨となったためstrcpy_s()を使ってくださいという警告を無効にします。
![](https://assets.st-note.com/img/1734630998-CLFbp4XYRqZsKxUIc7v63GyS.png?width=1200)
プロジェクト->プロパティ->構成プロパティ->(右上のボタン)厚生マネージャー
プラットフォームをWin32に変更
![](https://assets.st-note.com/img/1734630963-O8JBSv4AdQbZqhjV6ngXprHi.png?width=1200)
これでエラーは全て消えるはずです。ビルドすると、build\msvc\x64\Releaseとかに目的のファイルportaudio_x64.dllとかが出力されているはずです。
急にnoteの執筆が雑になりましたが、私の当初の目的「Python SounddeviceをASIO対応させる」を別の方法で達成してしまいやる気がなくなったからです。
誰かの役に立つといいな~(投稿ボタンぽちっ