[PD-cvs] pd/portaudio/pa_mac_core notes.txt, 1.3, 1.4 pa_mac_core.c, 1.11, 1.12
Miller Puckette
millerpuckette at users.sourceforge.net
Sat Jun 3 21:13:08 CEST 2006
Update of /cvsroot/pure-data/pd/portaudio/pa_mac_core
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12672/pd/portaudio/pa_mac_core
Modified Files:
notes.txt pa_mac_core.c
Log Message:
FFT package selection
Zmoelnig's multi-'$' patch
big-soundfile support
Patch to set open directories (openpanel, savepanel)
patch to allow funny characters in extern names
fixed makefile.in to support intel mac
Index: notes.txt
===================================================================
RCS file: /cvsroot/pure-data/pd/portaudio/pa_mac_core/notes.txt,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** notes.txt 6 Sep 2004 20:44:39 -0000 1.3
--- notes.txt 3 Jun 2006 19:13:06 -0000 1.4
***************
*** 1,7 ****
! Notes on Core Audio Implementation of PortAudio
by Phil Burk and Darren Gibbs
! Document last updated March 20, 2002
WHAT WORKS
--- 1,22 ----
! Notes on status of CoreAudio Implementation of PortAudio
!
! Document Last Updated December 9, 2005
!
! There are currently two implementations of PortAudio for Mac Core Audio.
!
! The original is in pa_mac_core_old.c, and the newer, default implementation
! is in pa_mac_core.c.
! Only pa_mac_core.c is currently developed and supported as it uses apple's
! current core audio technology. To select use the old implementation, replace
! pa_mac_core.c with pa_mac_core_old.c (eg. "cp pa_mac_core_auhal.c
! pa_mac_core.c"), then run configure and make as usual.
!
! ----------------------------------------
!
! Notes on Original implementation:
by Phil Burk and Darren Gibbs
! Last updated March 20, 2002
WHAT WORKS
***************
*** 19,23 ****
devices. Note that some CoreAudio devices like the Roland UH30 look
like one device but are actually two different CoreAudio devices. The
! BuiltIn audio is typically one CoreAudio device.
Mono doesn't work.
--- 34,38 ----
devices. Note that some CoreAudio devices like the Roland UH30 look
like one device but are actually two different CoreAudio devices. The
! Built-In audio is typically one CoreAudio device.
Mono doesn't work.
***************
*** 33,34 ****
--- 48,145 ----
we scan the list and add a PortAudio device for each CoreAudio device
that supports input. Then we make a scan for output devices.
+
+ -------------------------------------------
+
+ Notes on Newer/Default AUHAL implementation:
+
+ by Bjorn Roche
+
+ Last Updated December 9, 2005
+
+ Principle of Operation:
+
+ This implementation uses AUHAL for audio I/O. To some extent, it also
+ operates at the "HAL" Layer, though this behavior can be limited by
+ platform specific flags (see pa_mac_core.h for details). The default
+ settings should be reasonable: they don't change the SR of the device and
+ don't cause interruptions if other devices are using the device.
+
+ Major Software Elements Used: Apple's HAL AUs provide output SR
+ conversion transparently, however, only on output, so this
+ implementation uses AudioConverters to convert the sample rate on input.
+ A PortAudio ring buffer is used to buffer input when sample rate
+ conversion is required or when separate audio units are used for duplex
+ IO. Finally, a PortAudio buffer processor is used to convert formats and
+ provide additional buffers if needed. Internally, interleaved floating
+ point data streams are used exclusively - the audio unit converts from
+ the audio hardware's native format to interleaved float PCM and
+ PortAudio's Buffer processor is used for conversion to user formats.
+
+ Simplex Input: Simplex input uses a single callback. If sample rate
+ conversion is required, a ring buffer and AudioConverter are used as
+ well.
+
+ Simplex output: Simplex output uses a single callback. No ring buffer or
+ audio converter is used because AUHAL does its own output SR conversion.
+
+ Duplex, one device (no SR conversion): When one device is used, a single
+ callback is used. This achieves very low latency.
+
+ Duplex, separate devices or SR conversion: When SR conversion is
+ required, data must be buffered before it is converted and data is not
+ always available at the same times on input and output, so SR conversion
+ requires the same treatment as separate devices. The input callback
+ reads data and puts it in the ring buffer. The output callback reads the
+ data off the ring buffer, into an audio converter and finally to the
+ buffer processor.
+
+ Platform Specific Options:
+
+ By using the flags in pa_mac_core.h, the user may specify several options.
+ For example, the user can specify the sample-rate conversion quality, and
+ the extent to which PA will attempt to "play nice" and to what extent it
+ will interrupt other apps to improve performance. For example, if 44100 Hz
+ sample rate is requested but the device is set at 48000 Hz, PA can either
+ change the device for optimal playback ("Pro" mode), which may interrupt
+ other programs playing back audio, or simple use a sample-rate coversion,
+ which allows for friendlier sharing of the device ("Play Nice" mode).
+
+
+ Known issues:
+
+ - Latency: Latency settings are ignored in most cases. Exceptions are when
+ doing I/O between different devices and as a hint for selecting a realtively
+ low or relatively high latency in conjunction with
+ paHostFramesPerBufferUnspecified. Latency settings are always automatically
+ bound to "safe" values, however, so setting extreme values here should not be
+ an issue.
+
+ - Buffer Size: paHostFramesPerBufferUnspecified and specific host buffer sizes
+ are supported. paHostFramesPerBufferUnspecified works best in "pro" mode,
+ where the buffer size and sample rate of the audio device is most likely
+ to match the expected values.
+
+ - Timing info. It reports on stream time, but I'm probably doing something
+ wrong since patest_sine_time often reports negative latency numbers.
+
+ - xrun detection: The only xrun detection performed is when reading
+ and writing the ring buffer. There is probably more that can be done.
+
+ - abort/stop issues: stopping a stream is always a complete operation,
+ but latency should be low enough to make the lack of a separate abort
+ unnecessary. Apple clarifies its AudioOutputUnitStop() call here:
+ http://lists.apple.com/archives/coreaudio-api/2005/Dec/msg00055.html
+
+ - blocking interface: Not implemented.
+
+ - multichannel: It has been tested successfully on multichannel hardware
+ from MOTU: traveler and 896HD.
+
+ - sample rate conversion quality: By default, SR conversion is the maximum
+ available. This can be tweaked using flags pa_mac_core.h. Note that the AU
+ render quyality property is used to set the sample rat conversion quality
+ as "documented" here:
+ http://lists.apple.com/archives/coreaudio-api/2004/Jan/msg00141.html
+
+ - x86: I haven't tested it on an x86 Mac myself, but users have reported
+ being able to comiple and run it.
Index: pa_mac_core.c
===================================================================
RCS file: /cvsroot/pure-data/pd/portaudio/pa_mac_core/pa_mac_core.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** pa_mac_core.c 6 Nov 2005 01:49:43 -0000 1.11
--- pa_mac_core.c 3 Jun 2006 19:13:06 -0000 1.12
***************
*** 1,12 ****
/*
! * $Id$
! * pa_mac_core.c
! * Implementation of PortAudio for Mac OS X CoreAudio
! *
! * PortAudio Portable Real-Time Audio Library
! * Latest Version at: http://www.portaudio.com
*
! * Authors: Ross Bencina and Phil Burk
! * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
[...2928 lines suppressed...]
! error:
! if( macCoreHostApi ) {
! CleanUp(macCoreHostApi);
! }
!
! return result;
}
--- 2094,2105 ----
static signed long GetStreamWriteAvailable( PaStream* s )
{
! PaMacCoreStream *stream = (PaMacCoreStream*)s;
! VVDBUG(("GetStreamWriteAvailable()\n"));
! /* suppress unused variable warnings */
! (void) stream;
! /* IMPLEMENT ME, see portaudio.h for required behavior*/
! return 0;
}
More information about the Pd-cvs
mailing list