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ファイルと同じディレクトリに移動します。

PortAudioダウンロードページ

ASIO SDKをダウンロードする

Steinberg公式サイトから。なんか登録とかする必要がありますが無料。
フォルダ名を「ASIOSDK2」に変更し、先ほど作ったプロジェクトの.slnファイルと同じディレクトリに移動します。

ASIO SDKダウンロードページ

ここでディレクトリを見ておきましょう。
Visual Studio の今回作成したソリューションディレクトリに以下の3点が含まれていることを確認します。
・.slnファイル(私はPortAudioASIO.slnと名付けました)
・portaudioフォルダ
・ASIOSDK2フォルダ

私の環境の場合…
C
└Users
 └(わたくし)
  └source
   └repos
    └PortAudioASIO
     ├PortAudioASIO.sln
     ├PortAudioASIOフォルダ
     ├PortAudioフォルダ
     ├ASIOSDK2フォルダ
     └x64

プロジェクトを開き(slnをダブルクリックし)、必要なファイルを追加していきます。
ソースファイルに以下を追加します。

ソースファイル追加方法


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

次に、プロジェクト自体を選択した状態で…

プロジェクト->プロパティ->C/C++->プリプロセッサ->プリプロセッサ定義
に「PA_USE_ASIO=1」を追加します。手入力で以下に変更しましょう。
PortAudioでASIOを使用します、という設定です。

WIN32;_DEBUG;_CONSOLE;PA_USE_ASIO=1;%(PreprocessorDefinitions)

同じ画面の
プロジェクト->プロパティ->C/C++->全般->追加のインクルードディレクトリ に以下を入力します。
portaudioとASIOSDK2を先ほど述べた場所以外に保存した場合は適宜変更してください。

..\portaudio\include;..\portaudio\src\common;..\portaudio\src\os\win;..\asiosdk2\common;..\asiosdk2\host;..\asiosdk2\host\pc;%(AdditionalIncludeDirectories)

プロジェクト->プロパティ->構成プロパティ->詳細->文字セット
マルチバイト文字セットを使用する
ASIO SDK の一部のソース コードは、Win32 API UNICODE モードと互換性が無いためです。

プロジェクト->プロパティ->構成プロパティ->C/C++->詳細設定->指定の警告を無効にする
4996を追加
strcpy()が非推奨となったためstrcpy_s()を使ってくださいという警告を無効にします。

プロジェクト->プロパティ->構成プロパティ->(右上のボタン)厚生マネージャー
プラットフォームをWin32に変更

これでエラーは全て消えるはずです。ビルドすると、build\msvc\x64\Releaseとかに目的のファイルportaudio_x64.dllとかが出力されているはずです。

急にnoteの執筆が雑になりましたが、私の当初の目的「Python SounddeviceをASIO対応させる」を別の方法で達成してしまいやる気がなくなったからです。

誰かの役に立つといいな~(投稿ボタンぽちっ

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