playrecインストールメモ(English Version Available)


概要

MATLAB用のマルチチャンネルオーディオ信号の同時入出力ライブラリplayrecの最新インストール方法についてご紹介します。
#2025年07月16日時点情報
#テスト環境: Windows 11, Intel 64-bit, MATLAB 2023a, Visual Studio 2019
#          macOS 15.5, AppleSilicon 64-bit, MATLAB 2024a, Xcode 15

背景

playrecは2015前後に開発を停止し,それ以来win64への対応問題や,最近ではPortAudio/Windows SDK/macOSの仕様にアップデートできていないため,
公式情報のみでインストールができなく,さらにネット情報を手掛かりにインストールすることも大変時間と手間がかかるので,本サイトで情報をまとめました。
なお,現在MATLABのAudioToolboxはplayrecとほぼ同様な機能(audioPlayerRecorder)をサポートしていますので,
アカデミア版や個人版MATLABユーザでしたら代わりにAudioToolboxの使用をおすすめします。
一方で企業用ライセンスに関してはAudioToolboxが高価なので,筆者と同様に困っている方に一助になれば幸いです。

インストール手順(OS共通)

まず,playrec公式の最新情報を参考に準備します。
最新版ファイルはGitHubからダウンロードできます
またOSと関わらず最新版PortAudio(v19.7.0 stable release)のダウンロードが必要となります。

それからplayrecの.mスクリプトに少し修正を加える必要があります。
64-bit Windowsへの対応は羽田陽一先生のサイト,PortAudio仕様変更への対応はGitHub上alastairhmooreさんのスレッドを参考に

playrec-master/m_files/compile_playrec_func.m
    line 42-56: 'src/os/mac_osx'を削除
修正前 pa_include_dirs = {'src/common',... 'src/hostapi/alsa',... 'src/hostapi/asihpi',... 'src/hostapi/asio',... 'src/hostapi/coreaudio',... 'src/hostapi/dsound',... 'src/hostapi/jack',... 'src/hostapi/oss',... 'src/hostapi/wasapi',... 'src/hostapi/wdmks',... 'src/hostapi/wmme',... 'src/os/mac_osx',... 'src/os/unix',... 'src/os/win',... 'include'}; %just include all possibilities! 修正後 pa_include_dirs = {'src/common',... 'src/hostapi/alsa',... 'src/hostapi/asihpi',... 'src/hostapi/asio',... 'src/hostapi/coreaudio',... 'src/hostapi/dsound',... 'src/hostapi/jack',... 'src/hostapi/oss',... 'src/hostapi/wasapi',... 'src/hostapi/wdmks',... 'src/hostapi/wmme',... 'src/os/unix',... 'src/os/win',... 'include'}; %just include all possibilities! line 78-80: 'src/os/mac_osx/pa_mac_hostapis.c'を'src/os/unix/pa_unix_hostapis.c'へ変更
修正前 pa_os_specific_files = [pa_os_specific_files, ... {'src/os/mac_osx/pa_mac_hostapis.c', ... 'src/os/unix/pa_unix_util.c'}]; 修正後 pa_os_specific_files = [pa_os_specific_files, ... {'src/os/unix_osx/pa_unix_hostapis.c', ... 'src/os/unix/pa_unix_util.c'}]; (optional, mac版ASIO未テストのため) line 84-93: macOS ASIO用修正
修正前 api_include_dirs = [api_include_dirs, ... resolve_paths(asio_path,... {'common',... 'host',... 'host/mac'})]; api_files = [api_files,... resolve_paths(asio_path,... {'host/asiodrivers.cpp',... 'host/mac/asioshlib.cpp',... 'host/mac/codefragements.cpp'})]; 修正後 api_include_dirs = [api_include_dirs, ... resolve_paths(asio_path,... {'common',... 'host'})]; api_files = [api_files,... resolve_paths(asio_path,... {'host/asiodrivers.cpp'})]; line 104: macOS CoreAudio用修正
修正前 compiler_flags = [compiler_flags, {'PA_USE_COREAUDIO'}]; 修正後 compiler_flags = [compiler_flags, {'PA_USE_COREAUDIO=1',... '__MACOSX_CORE__'}]; line 114: WIN64用修正
修正前 compiler_flags = [compiler_flags, {'WIN32'}]; 修正後 if strcmp(computer, 'PCWIN64') compiler_flags = [compiler_flags, {'WIN64'}]; else %strcmp(computer, 'PCWIN32') compiler_flags = [compiler_flags, {'WIN32'}]; end
playrec-master/m_files/build_mex.m
    line 94: WIN64用修正
修正前 build_args = {build_args{:}, ['LIB#', cell2mat(lib_dirs(n)), ';$LIB']}; 修正後 if strcmp(computer, 'PCWIN64') build_args = {build_args{:}, ['-L', cell2mat(lib_dirs(n))]}; else %strcmp(computer, 'PCWIN32') build_args = {build_args{:}, ['LIB#', cell2mat(lib_dirs(n)), ';$LIB']}; end
羽田先生のサイトに記述されている他の修正点について,GitHub最新版ではアップデートされているので修正は不要です。

インストール手順(Windows)

Windowsの場合,C++コンパイラ(筆者はVisual Studio 2019),Windows SDK(筆者は10.0.26100.0)をダウンロードする必要があります。
また,ASIOを使用する場合は,ASIO SDKをあらかじめ用意してください。
DirectSoundサポートは以前されていましたが,筆者は現在のSDKでインストールできませんでした。

playrec-master/compile_playrec.mを実行し,指示通りに進めばインストールはできるはず。
#前述の通り,DirectSoundのチェックボックスを外してください。
#PortAudioとASIOのフォルダをplayrec-master/libに入れると実行時自動にパスを探してくれます。
#Platform SDK DirectoryはC:\Program Files (x86)\Windows Kits\10となります。
#フォルダにplayrec.mexw64が生成されたら多分インストールはできています。

インストール手順(macOS)

macOSの場合,インストールはかなり大変で,筆者は何度も心が折れましたが,CoreAudioのみでしたら下記の通りをやればできると思います。

Windowsと同様にplayrec-master/compile_playrec.mを実行し,指示通りに進めます。
#ASIOのチェックをいれるとC++のコンパイラ(Xcode Clang++)が使用されて,portaudioのコンパイルが通らなくなるので外してください。
#Jack Audio Connection Kitも,途中でファイルが見つからないというエラーが出るので外してください。
#DebugとVerboseは必ずチェックを入れてください。

途中でエラーが発生し,コンパイルが終了されますが,フォルダに.oファイル(mex_dll_core.oなど)が10個ほど生成されているであれば次に進みます。
このタイミングでコマンドウィンドウのログを遡ります。エラーコード直前の一行とさらに一行前のコマンドをコピーします。
環境によって内容が異なる場合もあると思いますが,下記のようなログが出ていると思います。([USERNAME]はログインしているユーザ名となります)
    コマンドA
    
        /Applications/MATLAB_R2024a.app/bin/maca64/usResourceCompiler3 --manifest-add 
        /private/var/folders/4t/wrqf688j0tldphxlqcl8nggc0000gn/T/mex_20302766153414_11620//mw_mex_tempmex_manifest.json 
        --bundle-name mexVersioning --out-file 
        /private/var/folders/4t/wrqf688j0tldphxlqcl8nggc0000gn/T/mex_20302766153414_11620//mw_mex_tempmex_bundle.zip
    
    コマンドB
    
        /usr/bin/xcrun -sdk macosx15.5 clang -Wl,-twolevel_namespace  -arch arm64 -mmacosx-version-min=11.0 -Wl,
        -syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.5.sdk 
        -bundle  -Wl,-exported_symbols_list,"/Applications/MATLAB_R2024a.app/extern/lib/maca64/mexFunction.map" 
        mex_dll_core.o pa_dll_playrec.o pa_allocation.o pa_converters.o pa_cpuload.o pa_debugprint.o pa_dither.o 
        pa_front.o pa_process.o pa_ringbuffer.o pa_hostapi_skeleton.o pa_stream.o pa_trace.o pa_mac_core.o pa_mac_core_utilities.o 
        pa_mac_core_blocking.o pa_unix_hostapis.o pa_unix_util.o c_mexapi_version.o  -g -Wl,-exported_symbols_list,
        "/Applications/MATLAB_R2024a.app/extern/lib/maca64/c_exportsmexfileversion.map"  -L"/Applications/MATLAB_R2024a.app/bin/maca64" 
        -lmx -lmex -lmat -lc++ -o /Users/[USERNAME]/Documents/MATLAB/playrec-master/playrec.mexmaca64 -Wl,
        -sectcreate,__TEXT,us_resources,/private/var/folders/4t/wrqf688j0tldphxlqcl8nggc0000gn/T/mex_20282859537241_11620//mw_mex_tempmex_bundle.zip 
    
これらをテキスト編集ソフトにペーストし,編集します。

まず,コマンドB(実際1行しかありませんが)3行目にあるmex_dll_core.oの直前に下記の内容を追加します。
    
        -framework CoreAudio -framework AudioToolbox -framework AudioUnit -framework CoreFoundation -framework CoreServices
    
次に,コマンドAの2行目,4行目とコマンドB最後にある/private/var/...というパスを適当なアクセスできるフォルダに書き換えます。例えば:
    
        /Users/[USERNAME]/Downloads/mw_mex_tempmex_manifest.json 
    
    
        /Users/[USERNAME]/Downloads/mw_mex_tempmex_bundle.zip 
    
#この.zipファイルは一時的に生成されます。インストール完了後は手動で削除してください。
編集後のコマンドはこんな形になります。
    コマンドA
    
        /Applications/MATLAB_R2024a.app/bin/maca64/usResourceCompiler3 --manifest-add 
        /Users/[USERNAME]/Downloads/mw_mex_tempmex_manifest.json  
        --bundle-name mexVersioning --out-file 
        /Users/[USERNAME]/Downloads/mw_mex_tempmex_bundle.zip 
    
    コマンドB
    
        /usr/bin/xcrun -sdk macosx15.5 clang -Wl,-twolevel_namespace  -arch arm64 -mmacosx-version-min=11.0 -Wl,
        -syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.5.sdk 
        -bundle  -Wl,-exported_symbols_list,"/Applications/MATLAB_R2024a.app/extern/lib/maca64/mexFunction.map" 
        -framework CoreAudio -framework AudioToolbox -framework AudioUnit -framework CoreFoundation -framework CoreServices 
        mex_dll_core.o pa_dll_playrec.o pa_allocation.o pa_converters.o pa_cpuload.o pa_debugprint.o pa_dither.o 
        pa_front.o pa_process.o pa_ringbuffer.o pa_hostapi_skeleton.o pa_stream.o pa_trace.o pa_mac_core.o pa_mac_core_utilities.o 
        pa_mac_core_blocking.o pa_unix_hostapis.o pa_unix_util.o c_mexapi_version.o  -g -Wl,-exported_symbols_list,
        "/Applications/MATLAB_R2024a.app/extern/lib/maca64/c_exportsmexfileversion.map"  -L"/Applications/MATLAB_R2024a.app/bin/maca64" 
        -lmx -lmex -lmat -lc++ -o /Users/[USERNAME]/Documents/MATLAB/playrec2025/playrec.mexmaca64 -Wl,
        -sectcreate,__TEXT,us_resources,/Users/[USERNAME]/Downloads/mw_mex_tempmex_bundle.zip
    
ターミナルを開きます。.oファイルが生成されたフォルダに移動します。
    
        cd /Users/[USERNAME]/Documents/MATLAB/playrec-master
    
編集後のコマンドAをターミナルで実行します。エラーが出るが無視します。
この段階で上述のmw_mex_tempemx_bundle.zipは生成されているはずです。
コマンドBをターミナルで実行します。
終了後,.oファイルのフォルダにplayrec.mexmaca64が出来上がったらインストールは完了となります。
#.oファイルは終了後削除しても問題ないです。