ASIO-README.txt (4807B)
1 ASIO-README.txt 2 3 This document contains information to help you compile PortAudio with 4 ASIO support. If you find any omissions or errors in this document 5 please notify us on the PortAudio mailing list. 6 7 NOTE: The Macintosh sections of this document are provided for historical 8 reference. They refer to pre-OS X Macintosh. PortAudio no longer 9 supports pre-OS X Macintosh. Steinberg does not support ASIO on Mac OS X. 10 11 12 Building PortAudio with ASIO support 13 ------------------------------------ 14 15 To build PortAudio with ASIO support you need to compile and link with 16 pa_asio.c, and files from the ASIO SDK (see below), along with the common 17 PortAudio files from src/common/ and platform specific files from 18 src/os/win/ (for Win32). 19 20 If you are compiling with a non-Microsoft compiler on Windows, also 21 compile and link with iasiothiscallresolver.cpp (see below for 22 an explanation). 23 24 For some platforms (MingW, Cygwin/MingW), you may simply 25 be able to type: 26 27 ./configure --with-host_os=mingw --with-winapi=asio [--with-asiodir=/usr/local/asiosdk2] 28 make 29 30 and life will be good. Make sure you update the above with the correct local 31 path to the ASIO SDK. 32 33 34 For Microsoft Visual C++ there is an build tutorial here: 35 http://www.portaudio.com/trac/wiki/TutorialDir/Compile/WindowsASIOMSVC 36 37 38 39 Obtaining the ASIO SDK 40 ---------------------- 41 42 In order to build PortAudio with ASIO support, you need to download 43 the ASIO SDK (version 2.0 or later) from Steinberg. Steinberg makes the ASIO 44 SDK available to anyone free of charge, however they do not permit its 45 source code to be distributed. 46 47 NOTE: In some cases the ASIO SDK may require patching, see below 48 for further details. 49 50 http://www.steinberg.net/en/company/developer.html 51 52 If the above link is broken search Google for: 53 "download steinberg ASIO SDK" 54 55 56 57 Building the ASIO SDK on Windows 58 -------------------------------- 59 60 To build the ASIO SDK on Windows you need to compile and link with the 61 following files from the ASIO SDK: 62 63 asio_sdk\common\asio.cpp 64 asio_sdk\host\asiodrivers.cpp 65 asio_sdk\host\pc\asiolist.cpp 66 67 You may also need to adjust your include paths to support inclusion of 68 header files from the above directories. 69 70 The ASIO SDK depends on the following COM API functions: 71 CoInitialize, CoUninitialize, CoCreateInstance, CLSIDFromString 72 For compilation with MinGW you will need to link with -lole32, for 73 Borland compilers link with Import32.lib. 74 75 76 77 Non-Microsoft (MSVC) Compilers on Windows including Borland and GCC 78 ------------------------------------------------------------------- 79 80 Steinberg did not specify a calling convention in the IASIO interface 81 definition. This causes the Microsoft compiler to use the proprietary 82 thiscall convention which is not compatible with other compilers, such 83 as compilers from Borland (BCC and C++Builder) and GNU (gcc). 84 Steinberg's ASIO SDK will compile but crash on initialization if 85 compiled with a non-Microsoft compiler on Windows. 86 87 PortAudio solves this problem using the iasiothiscallresolver library 88 which is included in the distribution. When building ASIO support for 89 non-Microsoft compilers, be sure to compile and link with 90 iasiothiscallresolver.cpp. Note that iasiothiscallresolver includes 91 conditional directives which cause it to have no effect if it is 92 compiled with a Microsoft compiler, or on the Macintosh. 93 94 If you use configure and make (see above), this should be handled 95 automatically for you. 96 97 For further information about the IASIO thiscall problem see this page: 98 http://www.rossbencina.com/code/iasio-thiscall-resolver 99 100 101 102 Building the ASIO SDK on (Pre-OS X) Macintosh 103 --------------------------------------------- 104 105 To build the ASIO SDK on Macintosh you need to compile and link with the 106 following files from the ASIO SDK: 107 108 host/asiodrivers.cpp 109 host/mac/asioshlib.cpp 110 host/mac/codefragements.cpp 111 112 You may also need to adjust your include paths to support inclusion of 113 header files from the above directories. 114 115 116 117 (Pre-OS X) Macintosh ASIO SDK Bug Patch 118 --------------------------------------- 119 120 There is a bug in the ASIO SDK that causes the Macintosh version to 121 often fail during initialization. Below is a patch that you can apply. 122 123 In codefragments.cpp replace getFrontProcessDirectory function with 124 the following one (GetFrontProcess replaced by GetCurrentProcess). 125 126 127 bool CodeFragments::getFrontProcessDirectory(void *specs) 128 { 129 FSSpec *fss = (FSSpec *)specs; 130 ProcessInfoRec pif; 131 ProcessSerialNumber psn; 132 133 memset(&psn,0,(long)sizeof(ProcessSerialNumber)); 134 // if(GetFrontProcess(&psn) == noErr) // wrong !!! 135 if(GetCurrentProcess(&psn) == noErr) // correct !!! 136 { 137 pif.processName = 0; 138 pif.processAppSpec = fss; 139 pif.processInfoLength = sizeof(ProcessInfoRec); 140 if(GetProcessInformation(&psn, &pif) == noErr) 141 return true; 142 } 143 return false; 144 } 145 146 147 ###