148 lines
4.7 KiB
Plaintext
148 lines
4.7 KiB
Plaintext
ASIO-README.txt
|
|
|
|
This document contains information to help you compile PortAudio with
|
|
ASIO support. If you find any omissions or errors in this document
|
|
please notify us on the PortAudio mailing list.
|
|
|
|
NOTE: The Macintosh sections of this document are provided for historical
|
|
reference. They refer to pre-OS X Macintosh. PortAudio no longer
|
|
supports pre-OS X Macintosh. Steinberg does not support ASIO on Mac OS X.
|
|
|
|
|
|
Building PortAudio with ASIO support
|
|
------------------------------------
|
|
|
|
To build PortAudio with ASIO support you need to compile and link with
|
|
pa_asio.c, and files from the ASIO SDK (see below), along with the common
|
|
PortAudio files from src/common/ and platform specific files from
|
|
src/os/win/ (for Win32).
|
|
|
|
If you are compiling with a non-Microsoft compiler on Windows, also
|
|
compile and link with iasiothiscallresolver.cpp (see below for
|
|
an explanation).
|
|
|
|
For some platforms (MingW, Cygwin/MingW), you may simply
|
|
be able to type:
|
|
|
|
./configure --with-host_os=mingw --with-winapi=asio [--with-asiodir=/usr/local/asiosdk2]
|
|
make
|
|
|
|
and life will be good. Make sure you update the above with the correct local
|
|
path to the ASIO SDK.
|
|
|
|
|
|
For Microsoft Visual C++ there is an build tutorial here:
|
|
http://www.portaudio.com/trac/wiki/TutorialDir/Compile/WindowsASIOMSVC
|
|
|
|
|
|
|
|
Obtaining the ASIO SDK
|
|
----------------------
|
|
|
|
In order to build PortAudio with ASIO support, you need to download
|
|
the ASIO SDK (version 2.0 or later) from Steinberg. Steinberg makes the ASIO
|
|
SDK available to anyone free of charge, however they do not permit its
|
|
source code to be distributed.
|
|
|
|
NOTE: In some cases the ASIO SDK may require patching, see below
|
|
for further details.
|
|
|
|
http://www.steinberg.net/en/company/developer.html
|
|
|
|
If the above link is broken search Google for:
|
|
"download steinberg ASIO SDK"
|
|
|
|
|
|
|
|
Building the ASIO SDK on Windows
|
|
--------------------------------
|
|
|
|
To build the ASIO SDK on Windows you need to compile and link with the
|
|
following files from the ASIO SDK:
|
|
|
|
asio_sdk\common\asio.cpp
|
|
asio_sdk\host\asiodrivers.cpp
|
|
asio_sdk\host\pc\asiolist.cpp
|
|
|
|
You may also need to adjust your include paths to support inclusion of
|
|
header files from the above directories.
|
|
|
|
The ASIO SDK depends on the following COM API functions:
|
|
CoInitialize, CoUninitialize, CoCreateInstance, CLSIDFromString
|
|
For compilation with MinGW you will need to link with -lole32, for
|
|
Borland compilers link with Import32.lib.
|
|
|
|
|
|
|
|
Non-Microsoft (MSVC) Compilers on Windows including Borland and GCC
|
|
-------------------------------------------------------------------
|
|
|
|
Steinberg did not specify a calling convention in the IASIO interface
|
|
definition. This causes the Microsoft compiler to use the proprietary
|
|
thiscall convention which is not compatible with other compilers, such
|
|
as compilers from Borland (BCC and C++Builder) and GNU (gcc).
|
|
Steinberg's ASIO SDK will compile but crash on initialization if
|
|
compiled with a non-Microsoft compiler on Windows.
|
|
|
|
PortAudio solves this problem using the iasiothiscallresolver library
|
|
which is included in the distribution. When building ASIO support for
|
|
non-Microsoft compilers, be sure to compile and link with
|
|
iasiothiscallresolver.cpp. Note that iasiothiscallresolver includes
|
|
conditional directives which cause it to have no effect if it is
|
|
compiled with a Microsoft compiler, or on the Macintosh.
|
|
|
|
If you use configure and make (see above), this should be handled
|
|
automatically for you.
|
|
|
|
For further information about the IASIO thiscall problem see this page:
|
|
http://www.rossbencina.com/code/iasio-thiscall-resolver
|
|
|
|
|
|
|
|
Building the ASIO SDK on (Pre-OS X) Macintosh
|
|
---------------------------------------------
|
|
|
|
To build the ASIO SDK on Macintosh you need to compile and link with the
|
|
following files from the ASIO SDK:
|
|
|
|
host/asiodrivers.cpp
|
|
host/mac/asioshlib.cpp
|
|
host/mac/codefragements.cpp
|
|
|
|
You may also need to adjust your include paths to support inclusion of
|
|
header files from the above directories.
|
|
|
|
|
|
|
|
(Pre-OS X) Macintosh ASIO SDK Bug Patch
|
|
---------------------------------------
|
|
|
|
There is a bug in the ASIO SDK that causes the Macintosh version to
|
|
often fail during initialization. Below is a patch that you can apply.
|
|
|
|
In codefragments.cpp replace getFrontProcessDirectory function with
|
|
the following one (GetFrontProcess replaced by GetCurrentProcess).
|
|
|
|
|
|
bool CodeFragments::getFrontProcessDirectory(void *specs)
|
|
{
|
|
FSSpec *fss = (FSSpec *)specs;
|
|
ProcessInfoRec pif;
|
|
ProcessSerialNumber psn;
|
|
|
|
memset(&psn,0,(long)sizeof(ProcessSerialNumber));
|
|
// if(GetFrontProcess(&psn) == noErr) // wrong !!!
|
|
if(GetCurrentProcess(&psn) == noErr) // correct !!!
|
|
{
|
|
pif.processName = 0;
|
|
pif.processAppSpec = fss;
|
|
pif.processInfoLength = sizeof(ProcessInfoRec);
|
|
if(GetProcessInformation(&psn, &pif) == noErr)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
###
|