ports/124177: [patch] audio/last.fm: update to 1.4.0.56102

Denise H. G. darcsis at gmail.com
Sun Jun 1 05:40:03 UTC 2008


>Number:         124177
>Category:       ports
>Synopsis:       [patch] audio/last.fm: update to 1.4.0.56102
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Sun Jun 01 05:40:02 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     Denise H. G.
>Release:        FreeBSD 7.0-STABLE amd64
>Organization:
>Environment:
System: FreeBSD pluton.xbsd.name 7.0-STABLE FreeBSD 7.0-STABLE #0: Sat May 31 03:37:33 CST 2008 dhg at pluton.xbsd.name:/opt/obj/usr/src/sys/pluton-SMP-ULE amd64


	
>Description:
update to 1.4.0.56102
Since this is a major release update, there are many changes to the FreeBSD patches.
All patch-* are deleted, and new patches are in this patch. Maybe it is better to use
a shar ball rather than a diff patch?
>How-To-Repeat:
	
>Fix:

	

--- last.fm-1.4.0.diff begins here ---
diff -ruN last.fm/Makefile last.fm-1.4.0/Makefile
--- last.fm/Makefile	2008-04-20 01:46:24.000000000 +0800
+++ last.fm-1.4.0/Makefile	2008-06-01 12:57:13.000000000 +0800
@@ -6,7 +6,7 @@
 #
 
 PORTNAME=	last.fm
-PORTVERSION=	1.3.2.13
+PORTVERSION=	1.4.0.56102
 CATEGORIES=	audio net
 MASTER_SITES=	http://cdn.last.fm/client/src/
 DISTNAME=	${PORTNAME}-${PORTVERSION}.src
@@ -14,6 +14,12 @@
 MAINTAINER=	lofi at FreeBSD.org
 COMMENT=	Official last.fm radio player
 
+RUN_DEPENDS=	bash:${PORTSDIR}/shells/bash
+LIB_DEPENDS=	gpod.3:${PORTSDIR}/audio/libgpod \
+				mad.2:${PORTSDIR}/audio/libmad \
+				samplerate.1:${PORTSDIR}/audio/libsamplerate \
+				fftw3f.4:${PORTSDIR}/math/fftw3-float
+
 PKGINSTALL=	${WRKDIR}/pkg-install
 PKGDEINSTALL=	${WRKDIR}/pkg-deinstall
 SUB_FILES=	pkg-install pkg-deinstall
@@ -32,29 +38,29 @@
 .endif
 
 post-patch:
-	${REINPLACE_CMD} -e 's|bash|sh|g' -e 's|qmake|${QMAKE}|g' \
+	${REINPLACE_CMD} -e 's|/bin/bash|/usr/local/bin/bash|g' -e 's|qmake|${QMAKE}|g' \
 			-E -e 's|(.*"CONFIG-=debug")|\1 ${QMAKEFLAGS}|g' \
-			-e 's|function header|header()|g' \
-			-e 's|function middle|middle()|g' \
 		${WRKSRC}/configure
 	${REINPLACE_CMD} -e 's|linux\*|unix|g' ${WRKSRC}/src/src.pro
 
 post-build:
-	cd ${WRKSRC}/src/output/RtAudio && \
-	${SETENV} ${CONFIGURE_ENV} ${QMAKE} ${QMAKEFLAGS} && make
 	${REINPLACE_CMD} -e 's|`dirname $$0`|${DATADIR}|g' \
-		${WRKSRC}/bin/last.fm
+		${WRKSRC}/bin/last.fm.sh
 
 do-install:
-	${INSTALL_SCRIPT} ${WRKSRC}/bin/last.fm ${PREFIX}/bin/last.fm
+	${INSTALL_SCRIPT} ${WRKSRC}/bin/last.fm.sh ${PREFIX}/bin/last.fm
 	${MKDIR} ${PREFIX}/share/services
 	${INSTALL_DATA} ${FILESDIR}/lastfm.protocol ${PREFIX}/share/services
 	${MKDIR} ${DATADIR}
-	${CP} -Rp ${WRKSRC}/bin/* ${DATADIR}/
+	${CP} -Rp ${WRKSRC}/bin/last.fm ${DATADIR}/
+	${CP} -Rp ${WRKSRC}/bin/data ${DATADIR}/
+	${CP} -Rp ${WRKSRC}/bin/services ${DATADIR}/
+	${CP} -Rp ${WRKSRC}/bin/lib*so* ${DATADIR}/
 
 post-install:
 .if !defined(PACKAGE_BUILDING)
 	@${SETENV} PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL
 .endif
+	@${CAT} ${PKGMESSAGE}
 
 .include <bsd.port.post.mk>
diff -ruN last.fm/distinfo last.fm-1.4.0/distinfo
--- last.fm/distinfo	2007-09-22 02:35:00.000000000 +0800
+++ last.fm-1.4.0/distinfo	2008-06-01 12:46:49.000000000 +0800
@@ -1,3 +1,3 @@
-MD5 (last.fm-1.3.2.13.src.tar.bz2) = a4ec606857e7c1dce3c251741cc7923e
-SHA256 (last.fm-1.3.2.13.src.tar.bz2) = 24178521bbe26e8d1b02a6ebc4a1934f863f4c315b4bd092a389391036b48638
-SIZE (last.fm-1.3.2.13.src.tar.bz2) = 1615081
+MD5 (last.fm-1.4.0.56102.src.tar.bz2) = 56fb831290356f1718795471aa855795
+SHA256 (last.fm-1.4.0.56102.src.tar.bz2) = 007fa34753f7078b762f83f633480df788cd5711060c40823bf0157b4b8ba128
+SIZE (last.fm-1.4.0.56102.src.tar.bz2) = 7292399
diff -ruN last.fm/files/patch-LastFM.pro last.fm-1.4.0/files/patch-LastFM.pro
--- last.fm/files/patch-LastFM.pro	1970-01-01 08:00:00.000000000 +0800
+++ last.fm-1.4.0/files/patch-LastFM.pro	2008-06-01 12:46:49.000000000 +0800
@@ -0,0 +1,19 @@
+--- LastFM.pro.orig	2007-12-05 20:39:27.000000000 +0800
++++ LastFM.pro	2008-06-01 10:21:14.000000000 +0800
+@@ -39,12 +39,12 @@
+     SUBDIRS -= src/mediadevices/ipod
+ }
+ 
+-linux* {
++unix {
+     SUBDIRS -= src/Helper \
+-               src/mediadevices/itunes
++               src/mediadevices/itunes \
++			   src/mediadevices/ipod
+ 
+-    SUBDIRS += src/output/alsa-playback \
+-               src/output/portAudio
++    SUBDIRS += src/output/portAudio
+ }
+ 
+ 
diff -ruN last.fm/files/patch-src-AudioController.cpp last.fm-1.4.0/files/patch-src-AudioController.cpp
--- last.fm/files/patch-src-AudioController.cpp	2007-07-14 16:09:39.000000000 +0800
+++ last.fm-1.4.0/files/patch-src-AudioController.cpp	1970-01-01 08:00:00.000000000 +0800
@@ -1,16 +0,0 @@
---- src/AudioController.cpp.orig	Sat Jul 14 09:50:13 2007
-+++ src/AudioController.cpp	Sat Jul 14 09:50:28 2007
-@@ -160,13 +160,7 @@
-     }
-     m_transcode->setBufferCapacity( kDecodedBufferMinSize );
-     
--    #ifdef WIN32
-         m_output = qobject_cast<OutputInterface*>( loadPlugin( "rtaudioplayback" ) );
--    #elif defined LINUX
--        m_output = qobject_cast<OutputInterface*>( loadPlugin( "output_alsa" ) );
--    #else
--        m_output = qobject_cast<OutputInterface*>( loadPlugin( "output_portaudio" ) );
--    #endif
- 
-     if ( m_output == 0 )
-     {
diff -ruN last.fm/files/patch-src_LastFMHelper-controlinterface.h last.fm-1.4.0/files/patch-src_LastFMHelper-controlinterface.h
--- last.fm/files/patch-src_LastFMHelper-controlinterface.h	2007-09-25 05:52:13.000000000 +0800
+++ last.fm-1.4.0/files/patch-src_LastFMHelper-controlinterface.h	1970-01-01 08:00:00.000000000 +0800
@@ -1,10 +0,0 @@
---- src/LastFMHelper/controlinterface.h.orig	2007-09-24 23:41:54.000000000 +0200
-+++ src/LastFMHelper/controlinterface.h	2007-09-24 23:42:01.000000000 +0200
-@@ -24,6 +24,7 @@
- 
- #include <QObject>
- #include <QMutex>
-+#include <QCoreApplication>
- 
- class ControlInterface : public QObject
- {
diff -ruN last.fm/files/patch-src_output_RtAudio-RtAudio.pro last.fm-1.4.0/files/patch-src_output_RtAudio-RtAudio.pro
--- last.fm/files/patch-src_output_RtAudio-RtAudio.pro	1970-01-01 08:00:00.000000000 +0800
+++ last.fm-1.4.0/files/patch-src_output_RtAudio-RtAudio.pro	2008-06-01 12:46:49.000000000 +0800
@@ -0,0 +1,13 @@
+--- src/output/RtAudio/RtAudio.pro.orig	2008-06-01 03:27:27.000000000 +0800
++++ src/output/RtAudio/RtAudio.pro	2008-06-01 03:27:38.000000000 +0800
+@@ -8,10 +8,6 @@
+ HEADERS = rtaudioplayback.h
+ SOURCES = rtaudioplayback.cpp rtaudio/RtAudio.cpp
+ 
+-unix:!mac {
+-    LIBS += -lasound
+-}
+-
+ win32 {
+    LIBS += -lwinmm -Ldsound -ldsound -lole32 -lgdi32 -luser32 -lshfolder
+    INCLUDEPATH += dsound
diff -ruN last.fm/files/patch-src_output_RtAudio-rtaudioplayback.cpp last.fm-1.4.0/files/patch-src_output_RtAudio-rtaudioplayback.cpp
--- last.fm/files/patch-src_output_RtAudio-rtaudioplayback.cpp	1970-01-01 08:00:00.000000000 +0800
+++ last.fm-1.4.0/files/patch-src_output_RtAudio-rtaudioplayback.cpp	2008-06-01 12:46:49.000000000 +0800
@@ -0,0 +1,20 @@
+--- src/output/RtAudio/rtaudioplayback.cpp.orig	2008-06-01 07:17:53.000000000 +0800
++++ src/output/RtAudio/rtaudioplayback.cpp	2008-06-01 07:18:27.000000000 +0800
+@@ -156,7 +156,7 @@
+     #endif
+ 
+     #ifdef Q_WS_X11
+-        l << "Alsa";
++        l << "OSS";
+     #endif
+ 
+     #ifdef Q_WS_MAC
+@@ -279,7 +279,7 @@
+         int card = internalSoundCardID( m_deviceNum );
+ 
+         #ifdef Q_WS_X11
+-        api = RtAudio::LINUX_ALSA;
++        api = RtAudio::LINUX_OSS;
+         #endif
+ 
+         RtAudioDeviceInfo info = m_audio->getDeviceInfo( card );
diff -ruN last.fm/files/patch-src_output_RtAudio_rtaudio-RtAudio.cpp last.fm-1.4.0/files/patch-src_output_RtAudio_rtaudio-RtAudio.cpp
--- last.fm/files/patch-src_output_RtAudio_rtaudio-RtAudio.cpp	1970-01-01 08:00:00.000000000 +0800
+++ last.fm-1.4.0/files/patch-src_output_RtAudio_rtaudio-RtAudio.cpp	2008-06-01 12:46:49.000000000 +0800
@@ -0,0 +1,28 @@
+--- src/output/RtAudio/rtaudio/RtAudio.cpp.orig	2007-12-05 20:39:28.000000000 +0800
++++ src/output/RtAudio/rtaudio/RtAudio.cpp	2008-06-01 07:30:20.000000000 +0800
+@@ -42,7 +42,7 @@
+ #include <QtGlobal>
+ 
+ #ifdef Q_WS_X11
+-    #define __LINUX_ALSA__
++    #define __LINUX_OSS__
+ #endif
+ #ifdef Q_WS_FREEBSD
+     #define __LINUX_OSS__
+@@ -3417,7 +3417,7 @@
+ #endif
+ 
+ #if defined(__LINUX_ALSA__)
+-
++#if 0
+ #include <alsa/asoundlib.h>
+ #include <unistd.h>
+ #include <ctype.h>
+@@ -4741,6 +4741,7 @@
+ 
+ //******************** End of __LINUX_ALSA__ *********************//
+ #endif
++#endif
+ 
+ #if defined(__WINDOWS_ASIO__) // ASIO API on Windows
+ 
diff -ruN last.fm/files/patch-src_output_portAudio last.fm-1.4.0/files/patch-src_output_portAudio
--- last.fm/files/patch-src_output_portAudio	1970-01-01 08:00:00.000000000 +0800
+++ last.fm-1.4.0/files/patch-src_output_portAudio	2008-06-01 12:46:49.000000000 +0800
@@ -0,0 +1,2437 @@
+diff -ruN src/output/portAudio.orig/PortAudio/common/pa_converters.h src/output/portAudio/PortAudio/common/pa_converters.h
+--- src/output/portAudio.orig/PortAudio/common/pa_converters.h	2007-12-05 20:39:28.000000000 +0800
++++ src/output/portAudio/PortAudio/common/pa_converters.h	2008-06-01 06:43:49.000000000 +0800
+@@ -46,7 +46,7 @@
+ */
+ 
+ 
+-#include "portaudio.h"  /* for PaSampleFormat */
++#include "pa_audio.h"  /* for PaSampleFormat */
+ 
+ #ifdef __cplusplus
+ extern "C"
+diff -ruN src/output/portAudio.orig/PortAudio/common/pa_endianness.h src/output/portAudio/PortAudio/common/pa_endianness.h
+--- src/output/portAudio.orig/PortAudio/common/pa_endianness.h	2007-12-05 20:39:28.000000000 +0800
++++ src/output/portAudio/PortAudio/common/pa_endianness.h	2008-06-01 06:43:49.000000000 +0800
+@@ -85,6 +85,14 @@
+    /* this is not an apple, so first check the existing defines, and, failing that,
+       detect well-known architechtures. */
+ 
++#include <sys/endian.h>
++
++   #if _BYTE_ORDER == _LITTLE_ENDIAN
++   #define	PA_LITTLE_ENDIAN
++   #else
++   #define	PA_BIG_ENDIAN
++   #endif
++
+    #if defined(PA_LITTLE_ENDIAN) || defined(PA_BIG_ENDIAN)
+        /* endianness define has been set externally, such as by autoconf */
+ 
+diff -ruN src/output/portAudio.orig/PortAudio/common/pa_front.c src/output/portAudio/PortAudio/common/pa_front.c
+--- src/output/portAudio.orig/PortAudio/common/pa_front.c	2007-12-05 20:39:28.000000000 +0800
++++ src/output/portAudio/PortAudio/common/pa_front.c	2008-06-01 06:43:49.000000000 +0800
+@@ -77,7 +77,7 @@
+ #include <string.h>
+ #include <assert.h> /* needed by PA_VALIDATE_ENDIANNESS */
+ 
+-#include "portaudio.h"
++#include "pa_audio.h"
+ #include "pa_util.h"
+ #include "pa_endianness.h"
+ #include "pa_types.h"
+diff -ruN src/output/portAudio.orig/PortAudio/common/pa_hostapi.h src/output/portAudio/PortAudio/common/pa_hostapi.h
+--- src/output/portAudio.orig/PortAudio/common/pa_hostapi.h	2007-12-05 20:39:28.000000000 +0800
++++ src/output/portAudio/PortAudio/common/pa_hostapi.h	2008-06-01 06:43:49.000000000 +0800
+@@ -47,7 +47,7 @@
+ */
+ 
+ 
+-#include "portaudio.h"
++#include "pa_audio.h"
+ 
+ #ifdef __cplusplus
+ extern "C"
+diff -ruN src/output/portAudio.orig/PortAudio/common/pa_process.h src/output/portAudio/PortAudio/common/pa_process.h
+--- src/output/portAudio.orig/PortAudio/common/pa_process.h	2007-12-05 20:39:28.000000000 +0800
++++ src/output/portAudio/PortAudio/common/pa_process.h	2008-06-01 06:43:49.000000000 +0800
+@@ -200,7 +200,7 @@
+ */
+ 
+ 
+-#include "portaudio.h"
++#include "pa_audio.h"
+ #include "pa_converters.h"
+ #include "pa_dither.h"
+ 
+diff -ruN src/output/portAudio.orig/PortAudio/common/pa_stream.h src/output/portAudio/PortAudio/common/pa_stream.h
+--- src/output/portAudio.orig/PortAudio/common/pa_stream.h	2007-12-05 20:39:28.000000000 +0800
++++ src/output/portAudio/PortAudio/common/pa_stream.h	2008-06-01 06:43:49.000000000 +0800
+@@ -47,7 +47,7 @@
+ */
+ 
+ 
+-#include "portaudio.h"
++#include "pa_audio.h"
+ 
+ #ifdef __cplusplus
+ extern "C"
+diff -ruN src/output/portAudio.orig/PortAudio/common/pa_util.h src/output/portAudio/PortAudio/common/pa_util.h
+--- src/output/portAudio.orig/PortAudio/common/pa_util.h	2007-12-05 20:39:28.000000000 +0800
++++ src/output/portAudio/PortAudio/common/pa_util.h	2008-06-01 06:43:49.000000000 +0800
+@@ -49,7 +49,7 @@
+ */
+ 
+ 
+-#include "portaudio.h"
++#include "pa_audio.h"
+ 
+ #ifdef __cplusplus
+ extern "C"
+diff -ruN src/output/portAudio.orig/PortAudio/hostapi/oss/pa_unix_oss.c src/output/portAudio/PortAudio/hostapi/oss/pa_unix_oss.c
+--- src/output/portAudio.orig/PortAudio/hostapi/oss/pa_unix_oss.c	2007-12-05 20:39:28.000000000 +0800
++++ src/output/portAudio/PortAudio/hostapi/oss/pa_unix_oss.c	2008-06-01 06:43:49.000000000 +0800
+@@ -74,7 +74,7 @@
+ # define DEVICE_NAME_BASE            "/dev/audio"
+ #endif
+ 
+-#include "portaudio.h"
++#include "pa_audio.h"
+ #include "pa_util.h"
+ #include "pa_allocation.h"
+ #include "pa_hostapi.h"
+diff -ruN src/output/portAudio.orig/PortAudio/include/pa_audio.h src/output/portAudio/PortAudio/include/pa_audio.h
+--- src/output/portAudio.orig/PortAudio/include/pa_audio.h	1970-01-01 08:00:00.000000000 +0800
++++ src/output/portAudio/PortAudio/include/pa_audio.h	2008-06-01 06:43:49.000000000 +0800
+@@ -0,0 +1,1133 @@
++
++#ifndef PORTAUDIO_H
++#define PORTAUDIO_H
++/*
++ * $Id: portaudio.h 1083 2006-08-23 07:30:49Z rossb $
++ * PortAudio Portable Real-Time Audio Library
++ * PortAudio API Header File
++ * Latest version available at: http://www.portaudio.com/
++ *
++ * Copyright (c) 1999-2002 Ross Bencina and Phil Burk
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files
++ * (the "Software"), to deal in the Software without restriction,
++ * including without limitation the rights to use, copy, modify, merge,
++ * publish, distribute, sublicense, and/or sell copies of the Software,
++ * and to permit persons to whom the Software is furnished to do so,
++ * subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be
++ * included in all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
++ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
++ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
++ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ */
++
++/*
++ * The text above constitutes the entire PortAudio license; however, 
++ * the PortAudio community also makes the following non-binding requests:
++ *
++ * Any person wishing to distribute modifications to the Software is
++ * requested to send the modifications to the original developer so that
++ * they can be incorporated into the canonical version. It is also 
++ * requested that these non-binding requests be included along with the 
++ * license above.
++ */
++
++/** @file
++ @brief The PortAudio API.
++*/
++
++
++#ifdef __cplusplus
++extern "C"
++{
++#endif /* __cplusplus */
++
++ 
++/** Retrieve the release number of the currently running PortAudio build,
++ eg 1900.
++*/
++int Pa_GetVersion( void );
++
++
++/** Retrieve a textual description of the current PortAudio build,
++ eg "PortAudio V19-devel 13 October 2002".
++*/
++const char* Pa_GetVersionText( void );
++
++
++/** Error codes returned by PortAudio functions.
++ Note that with the exception of paNoError, all PaErrorCodes are negative.
++*/
++
++typedef int PaError;
++typedef enum PaErrorCode
++{
++    paNoError = 0,
++
++    paNotInitialized = -10000,
++    paUnanticipatedHostError,
++    paInvalidChannelCount,
++    paInvalidSampleRate,
++    paInvalidDevice,
++    paInvalidFlag,
++    paSampleFormatNotSupported,
++    paBadIODeviceCombination,
++    paInsufficientMemory,
++    paBufferTooBig,
++    paBufferTooSmall,
++    paNullCallback,
++    paBadStreamPtr,
++    paTimedOut,
++    paInternalError,
++    paDeviceUnavailable,
++    paIncompatibleHostApiSpecificStreamInfo,
++    paStreamIsStopped,
++    paStreamIsNotStopped,
++    paInputOverflowed,
++    paOutputUnderflowed,
++    paHostApiNotFound,
++    paInvalidHostApi,
++    paCanNotReadFromACallbackStream,      /**< @todo review error code name */
++    paCanNotWriteToACallbackStream,       /**< @todo review error code name */
++    paCanNotReadFromAnOutputOnlyStream,   /**< @todo review error code name */
++    paCanNotWriteToAnInputOnlyStream,     /**< @todo review error code name */
++    paIncompatibleStreamHostApi,
++    paBadBufferPtr
++} PaErrorCode;
++
++
++/** Translate the supplied PortAudio error code into a human readable
++ message.
++*/
++const char *Pa_GetErrorText( PaError errorCode );
++
++
++/** Library initialization function - call this before using PortAudio.
++ This function initialises internal data structures and prepares underlying
++ host APIs for use. This function MUST be called before using any other
++ PortAudio API functions.
++
++ If Pa_Initialize() is called multiple times, each successful 
++ call must be matched with a corresponding call to Pa_Terminate(). 
++ Pairs of calls to Pa_Initialize()/Pa_Terminate() may overlap, and are not 
++ required to be fully nested.
++
++ Note that if Pa_Initialize() returns an error code, Pa_Terminate() should
++ NOT be called.
++
++ @return paNoError if successful, otherwise an error code indicating the cause
++ of failure.
++
++ @see Pa_Terminate
++*/
++PaError Pa_Initialize( void );
++
++
++/** Library termination function - call this when finished using PortAudio.
++ This function deallocates all resources allocated by PortAudio since it was
++ initializied by a call to Pa_Initialize(). In cases where Pa_Initialise() has
++ been called multiple times, each call must be matched with a corresponding call
++ to Pa_Terminate(). The final matching call to Pa_Terminate() will automatically
++ close any PortAudio streams that are still open.
++
++ Pa_Terminate() MUST be called before exiting a program which uses PortAudio.
++ Failure to do so may result in serious resource leaks, such as audio devices
++ not being available until the next reboot.
++
++ @return paNoError if successful, otherwise an error code indicating the cause
++ of failure.
++ 
++ @see Pa_Initialize
++*/
++PaError Pa_Terminate( void );
++
++
++
++/** The type used to refer to audio devices. Values of this type usually
++ range from 0 to (Pa_DeviceCount-1), and may also take on the PaNoDevice
++ and paUseHostApiSpecificDeviceSpecification values.
++
++ @see Pa_DeviceCount, paNoDevice, paUseHostApiSpecificDeviceSpecification
++*/
++typedef int PaDeviceIndex;
++
++
++/** A special PaDeviceIndex value indicating that no device is available,
++ or should be used.
++
++ @see PaDeviceIndex
++*/
++#define paNoDevice ((PaDeviceIndex)-1)
++
++
++/** A special PaDeviceIndex value indicating that the device(s) to be used
++ are specified in the host api specific stream info structure.
++
++ @see PaDeviceIndex
++*/
++#define paUseHostApiSpecificDeviceSpecification ((PaDeviceIndex)-2)
++
++
++/* Host API enumeration mechanism */
++
++/** The type used to enumerate to host APIs at runtime. Values of this type
++ range from 0 to (Pa_GetHostApiCount()-1).
++
++ @see Pa_GetHostApiCount
++*/
++typedef int PaHostApiIndex;
++
++
++/** Retrieve the number of available host APIs. Even if a host API is
++ available it may have no devices available.
++
++ @return A non-negative value indicating the number of available host APIs
++ or, a PaErrorCode (which are always negative) if PortAudio is not initialized
++ or an error is encountered.
++
++ @see PaHostApiIndex
++*/
++PaHostApiIndex Pa_GetHostApiCount( void );
++
++
++/** Retrieve the index of the default host API. The default host API will be
++ the lowest common denominator host API on the current platform and is
++ unlikely to provide the best performance.
++
++ @return A non-negative value ranging from 0 to (Pa_GetHostApiCount()-1)
++ indicating the default host API index or, a PaErrorCode (which are always
++ negative) if PortAudio is not initialized or an error is encountered.
++*/
++PaHostApiIndex Pa_GetDefaultHostApi( void );
++
++
++/** Unchanging unique identifiers for each supported host API. This type
++ is used in the PaHostApiInfo structure. The values are guaranteed to be
++ unique and to never change, thus allowing code to be written that
++ conditionally uses host API specific extensions.
++
++ New type ids will be allocated when support for a host API reaches
++ "public alpha" status, prior to that developers should use the
++ paInDevelopment type id.
++
++ @see PaHostApiInfo
++*/
++typedef enum PaHostApiTypeId
++{
++    paInDevelopment=0, /* use while developing support for a new host API */
++    paDirectSound=1,
++    paMME=2,
++    paASIO=3,
++    paSoundManager=4,
++    paCoreAudio=5,
++    paOSS=7,
++    paALSA=8,
++    paAL=9,
++    paBeOS=10,
++    paWDMKS=11,
++    paJACK=12,
++    paWASAPI=13,
++    paAudioScienceHPI=14
++} PaHostApiTypeId;
++
++
++/** A structure containing information about a particular host API. */
++
++typedef struct PaHostApiInfo
++{
++    /** this is struct version 1 */
++    int structVersion;
++    /** The well known unique identifier of this host API @see PaHostApiTypeId */
++    PaHostApiTypeId type;
++    /** A textual description of the host API for display on user interfaces. */
++    const char *name;
++
++    /**  The number of devices belonging to this host API. This field may be
++     used in conjunction with Pa_HostApiDeviceIndexToDeviceIndex() to enumerate
++     all devices for this host API.
++     @see Pa_HostApiDeviceIndexToDeviceIndex
++    */
++    int deviceCount;
++
++    /** The default input device for this host API. The value will be a
++     device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice
++     if no default input device is available.
++    */
++    PaDeviceIndex defaultInputDevice;
++
++    /** The default output device for this host API. The value will be a
++     device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice
++     if no default output device is available.
++    */
++    PaDeviceIndex defaultOutputDevice;
++    
++} PaHostApiInfo;
++
++
++/** Retrieve a pointer to a structure containing information about a specific
++ host Api.
++
++ @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1)
++
++ @return A pointer to an immutable PaHostApiInfo structure describing
++ a specific host API. If the hostApi parameter is out of range or an error
++ is encountered, the function returns NULL.
++
++ The returned structure is owned by the PortAudio implementation and must not
++ be manipulated or freed. The pointer is only guaranteed to be valid between
++ calls to Pa_Initialize() and Pa_Terminate().
++*/
++const PaHostApiInfo * Pa_GetHostApiInfo( PaHostApiIndex hostApi );
++
++
++/** Convert a static host API unique identifier, into a runtime
++ host API index.
++
++ @param type A unique host API identifier belonging to the PaHostApiTypeId
++ enumeration.
++
++ @return A valid PaHostApiIndex ranging from 0 to (Pa_GetHostApiCount()-1) or,
++ a PaErrorCode (which are always negative) if PortAudio is not initialized
++ or an error is encountered.
++ 
++ The paHostApiNotFound error code indicates that the host API specified by the
++ type parameter is not available.
++
++ @see PaHostApiTypeId
++*/
++PaHostApiIndex Pa_HostApiTypeIdToHostApiIndex( PaHostApiTypeId type );
++
++
++/** Convert a host-API-specific device index to standard PortAudio device index.
++ This function may be used in conjunction with the deviceCount field of
++ PaHostApiInfo to enumerate all devices for the specified host API.
++
++ @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1)
++
++ @param hostApiDeviceIndex A valid per-host device index in the range
++ 0 to (Pa_GetHostApiInfo(hostApi)->deviceCount-1)
++
++ @return A non-negative PaDeviceIndex ranging from 0 to (Pa_GetDeviceCount()-1)
++ or, a PaErrorCode (which are always negative) if PortAudio is not initialized
++ or an error is encountered.
++
++ A paInvalidHostApi error code indicates that the host API index specified by
++ the hostApi parameter is out of range.
++
++ A paInvalidDevice error code indicates that the hostApiDeviceIndex parameter
++ is out of range.
++ 
++ @see PaHostApiInfo
++*/
++PaDeviceIndex Pa_HostApiDeviceIndexToDeviceIndex( PaHostApiIndex hostApi,
++        int hostApiDeviceIndex );
++
++
++
++/** Structure used to return information about a host error condition.
++*/
++typedef struct PaHostErrorInfo{
++    PaHostApiTypeId hostApiType;    /**< the host API which returned the error code */
++    long errorCode;                 /**< the error code returned */
++    const char *errorText;          /**< a textual description of the error if available, otherwise a zero-length string */
++}PaHostErrorInfo;
++
++
++/** Return information about the last host error encountered. The error
++ information returned by Pa_GetLastHostErrorInfo() will never be modified
++ asyncronously by errors occurring in other PortAudio owned threads
++ (such as the thread that manages the stream callback.)
++
++ This function is provided as a last resort, primarily to enhance debugging
++ by providing clients with access to all available error information.
++
++ @return A pointer to an immutable structure constaining information about
++ the host error. The values in this structure will only be valid if a
++ PortAudio function has previously returned the paUnanticipatedHostError
++ error code.
++*/
++const PaHostErrorInfo* Pa_GetLastHostErrorInfo( void );
++
++
++
++/* Device enumeration and capabilities */
++
++/** Retrieve the number of available devices. The number of available devices
++ may be zero.
++
++ @return A non-negative value indicating the number of available devices or,
++ a PaErrorCode (which are always negative) if PortAudio is not initialized
++ or an error is encountered.
++*/
++PaDeviceIndex Pa_GetDeviceCount( void );
++
++
++/** Retrieve the index of the default input device. The result can be
++ used in the inputDevice parameter to Pa_OpenStream().
++
++ @return The default input device index for the default host API, or paNoDevice
++ if no default input device is available or an error was encountered.
++*/
++PaDeviceIndex Pa_GetDefaultInputDevice( void );
++
++
++/** Retrieve the index of the default output device. The result can be
++ used in the outputDevice parameter to Pa_OpenStream().
++
++ @return The default output device index for the defualt host API, or paNoDevice
++ if no default output device is available or an error was encountered.
++
++ @note
++ On the PC, the user can specify a default device by
++ setting an environment variable. For example, to use device #1.
++<pre>
++ set PA_RECOMMENDED_OUTPUT_DEVICE=1
++</pre>
++ The user should first determine the available device ids by using
++ the supplied application "pa_devs".
++*/
++PaDeviceIndex Pa_GetDefaultOutputDevice( void );
++
++
++/** The type used to represent monotonic time in seconds that can be used
++ for syncronisation. The type is used for the outTime argument to the
++ PaStreamCallback and as the result of Pa_GetStreamTime().
++     
++ @see PaStreamCallback, Pa_GetStreamTime
++*/
++typedef double PaTime;
++
++
++/** A type used to specify one or more sample formats. Each value indicates
++ a possible format for sound data passed to and from the stream callback,
++ Pa_ReadStream and Pa_WriteStream.
++
++ The standard formats paFloat32, paInt16, paInt32, paInt24, paInt8
++ and aUInt8 are usually implemented by all implementations.
++
++ The floating point representation (paFloat32) uses +1.0 and -1.0 as the
++ maximum and minimum respectively.
++
++ paUInt8 is an unsigned 8 bit format where 128 is considered "ground"
++
++ The paNonInterleaved flag indicates that a multichannel buffer is passed
++ as a set of non-interleaved pointers.
++
++ @see Pa_OpenStream, Pa_OpenDefaultStream, PaDeviceInfo
++ @see paFloat32, paInt16, paInt32, paInt24, paInt8
++ @see paUInt8, paCustomFormat, paNonInterleaved
++*/
++typedef unsigned long PaSampleFormat;
++
++
++#define paFloat32        ((PaSampleFormat) 0x00000001) /**< @see PaSampleFormat */
++#define paInt32          ((PaSampleFormat) 0x00000002) /**< @see PaSampleFormat */
++#define paInt24          ((PaSampleFormat) 0x00000004) /**< Packed 24 bit format. @see PaSampleFormat */
++#define paInt16          ((PaSampleFormat) 0x00000008) /**< @see PaSampleFormat */
++#define paInt8           ((PaSampleFormat) 0x00000010) /**< @see PaSampleFormat */
++#define paUInt8          ((PaSampleFormat) 0x00000020) /**< @see PaSampleFormat */
++#define paCustomFormat   ((PaSampleFormat) 0x00010000)/**< @see PaSampleFormat */
++
++#define paNonInterleaved ((PaSampleFormat) 0x80000000)
++
++/** A structure providing information and capabilities of PortAudio devices.
++ Devices may support input, output or both input and output.
++*/
++typedef struct PaDeviceInfo
++{
++    int structVersion;  /* this is struct version 2 */
++    const char *name;
++    PaHostApiIndex hostApi; /* note this is a host API index, not a type id*/
++    
++    int maxInputChannels;
++    int maxOutputChannels;
++
++    /* Default latency values for interactive performance. */
++    PaTime defaultLowInputLatency;
++    PaTime defaultLowOutputLatency;
++    /* Default latency values for robust non-interactive applications (eg. playing sound files). */
++    PaTime defaultHighInputLatency;
++    PaTime defaultHighOutputLatency;
++
++    double defaultSampleRate;
++} PaDeviceInfo;
++
++
++/** Retrieve a pointer to a PaDeviceInfo structure containing information
++ about the specified device.
++ @return A pointer to an immutable PaDeviceInfo structure. If the device
++ parameter is out of range the function returns NULL.
++
++ @param device A valid device index in the range 0 to (Pa_GetDeviceCount()-1)
++
++ @note PortAudio manages the memory referenced by the returned pointer,
++ the client must not manipulate or free the memory. The pointer is only
++ guaranteed to be valid between calls to Pa_Initialize() and Pa_Terminate().
++
++ @see PaDeviceInfo, PaDeviceIndex
++*/
++const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceIndex device );
++
++
++/** Parameters for one direction (input or output) of a stream.
++*/
++typedef struct PaStreamParameters
++{
++    /** A valid device index in the range 0 to (Pa_GetDeviceCount()-1)
++     specifying the device to be used or the special constant
++     paUseHostApiSpecificDeviceSpecification which indicates that the actual
++     device(s) to use are specified in hostApiSpecificStreamInfo.
++     This field must not be set to paNoDevice.
++    */
++    PaDeviceIndex device;
++    
++    /** The number of channels of sound to be delivered to the
++     stream callback or accessed by Pa_ReadStream() or Pa_WriteStream().
++     It can range from 1 to the value of maxInputChannels in the
++     PaDeviceInfo record for the device specified by the device parameter.
++    */
++    int channelCount;
++
++    /** The sample format of the buffer provided to the stream callback,
++     a_ReadStream() or Pa_WriteStream(). It may be any of the formats described
++     by the PaSampleFormat enumeration.
++    */
++    PaSampleFormat sampleFormat;
++
++    /** The desired latency in seconds. Where practical, implementations should
++     configure their latency based on these parameters, otherwise they may
++     choose the closest viable latency instead. Unless the suggested latency
++     is greater than the absolute upper limit for the device implementations
++     should round the suggestedLatency up to the next practial value - ie to
++     provide an equal or higher latency than suggestedLatency wherever possibe.
++     Actual latency values for an open stream may be retrieved using the
++     inputLatency and outputLatency fields of the PaStreamInfo structure
++     returned by Pa_GetStreamInfo().
++     @see default*Latency in PaDeviceInfo, *Latency in PaStreamInfo
++    */
++    PaTime suggestedLatency;
++
++    /** An optional pointer to a host api specific data structure
++     containing additional information for device setup and/or stream processing.
++     hostApiSpecificStreamInfo is never required for correct operation,
++     if not used it should be set to NULL.
++    */
++    void *hostApiSpecificStreamInfo;
++
++} PaStreamParameters;
++
++
++/** Return code for Pa_IsFormatSupported indicating success. */
++#define paFormatIsSupported (0)
++
++/** Determine whether it would be possible to open a stream with the specified
++ parameters.
++
++ @param inputParameters A structure that describes the input parameters used to
++ open a stream. The suggestedLatency field is ignored. See PaStreamParameters
++ for a description of these parameters. inputParameters must be NULL for
++ output-only streams.
++
++ @param outputParameters A structure that describes the output parameters used
++ to open a stream. The suggestedLatency field is ignored. See PaStreamParameters
++ for a description of these parameters. outputParameters must be NULL for
++ input-only streams.
++
++ @param sampleRate The required sampleRate. For full-duplex streams it is the
++ sample rate for both input and output
++
++ @return Returns 0 if the format is supported, and an error code indicating why
++ the format is not supported otherwise. The constant paFormatIsSupported is
++ provided to compare with the return value for success.
++
++ @see paFormatIsSupported, PaStreamParameters
++*/
++PaError Pa_IsFormatSupported( const PaStreamParameters *inputParameters,
++                              const PaStreamParameters *outputParameters,
++                              double sampleRate );
++
++
++
++/* Streaming types and functions */
++
++
++/**
++ A single PaStream can provide multiple channels of real-time
++ streaming audio input and output to a client application. A stream
++ provides access to audio hardware represented by one or more
++ PaDevices. Depending on the underlying Host API, it may be possible 
++ to open multiple streams using the same device, however this behavior 
++ is implementation defined. Portable applications should assume that 
++ a PaDevice may be simultaneously used by at most one PaStream.
++
++ Pointers to PaStream objects are passed between PortAudio functions that
++ operate on streams.
++
++ @see Pa_OpenStream, Pa_OpenDefaultStream, Pa_OpenDefaultStream, Pa_CloseStream,
++ Pa_StartStream, Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive,
++ Pa_GetStreamTime, Pa_GetStreamCpuLoad
++
++*/
++typedef void PaStream;
++
++
++/** Can be passed as the framesPerBuffer parameter to Pa_OpenStream()
++ or Pa_OpenDefaultStream() to indicate that the stream callback will
++ accept buffers of any size.
++*/
++#define paFramesPerBufferUnspecified  (0)
++
++
++/** Flags used to control the behavior of a stream. They are passed as
++ parameters to Pa_OpenStream or Pa_OpenDefaultStream. Multiple flags may be
++ ORed together.
++
++ @see Pa_OpenStream, Pa_OpenDefaultStream
++ @see paNoFlag, paClipOff, paDitherOff, paNeverDropInput,
++  paPrimeOutputBuffersUsingStreamCallback, paPlatformSpecificFlags
++*/
++typedef unsigned long PaStreamFlags;
++
++/** @see PaStreamFlags */
++#define   paNoFlag          ((PaStreamFlags) 0)
++
++/** Disable default clipping of out of range samples.
++ @see PaStreamFlags
++*/
++#define   paClipOff         ((PaStreamFlags) 0x00000001)
++
++/** Disable default dithering.
++ @see PaStreamFlags
++*/
++#define   paDitherOff       ((PaStreamFlags) 0x00000002)
++
++/** Flag requests that where possible a full duplex stream will not discard
++ overflowed input samples without calling the stream callback. This flag is
++ only valid for full duplex callback streams and only when used in combination
++ with the paFramesPerBufferUnspecified (0) framesPerBuffer parameter. Using
++ this flag incorrectly results in a paInvalidFlag error being returned from
++ Pa_OpenStream and Pa_OpenDefaultStream.
++
++ @see PaStreamFlags, paFramesPerBufferUnspecified
++*/
++#define   paNeverDropInput  ((PaStreamFlags) 0x00000004)
++
++/** Call the stream callback to fill initial output buffers, rather than the
++ default behavior of priming the buffers with zeros (silence). This flag has
++ no effect for input-only and blocking read/write streams.
++ 
++ @see PaStreamFlags
++*/
++#define   paPrimeOutputBuffersUsingStreamCallback ((PaStreamFlags) 0x00000008)
++
++/** A mask specifying the platform specific bits.
++ @see PaStreamFlags
++*/
++#define   paPlatformSpecificFlags ((PaStreamFlags)0xFFFF0000)
++
++/**
++ Timing information for the buffers passed to the stream callback.
++*/
++typedef struct PaStreamCallbackTimeInfo{
++    PaTime inputBufferAdcTime;
++    PaTime currentTime;
++    PaTime outputBufferDacTime;
++} PaStreamCallbackTimeInfo;
++
++
++/**
++ Flag bit constants for the statusFlags to PaStreamCallback.
++
++ @see paInputUnderflow, paInputOverflow, paOutputUnderflow, paOutputOverflow,
++ paPrimingOutput
++*/
++typedef unsigned long PaStreamCallbackFlags;
++
++/** In a stream opened with paFramesPerBufferUnspecified, indicates that
++ input data is all silence (zeros) because no real data is available. In a
++ stream opened without paFramesPerBufferUnspecified, it indicates that one or
++ more zero samples have been inserted into the input buffer to compensate
++ for an input underflow.
++ @see PaStreamCallbackFlags
++*/
++#define paInputUnderflow   ((PaStreamCallbackFlags) 0x00000001)
++
++/** In a stream opened with paFramesPerBufferUnspecified, indicates that data
++ prior to the first sample of the input buffer was discarded due to an
++ overflow, possibly because the stream callback is using too much CPU time.
++ Otherwise indicates that data prior to one or more samples in the
++ input buffer was discarded.
++ @see PaStreamCallbackFlags
++*/
++#define paInputOverflow    ((PaStreamCallbackFlags) 0x00000002)
++
++/** Indicates that output data (or a gap) was inserted, possibly because the
++ stream callback is using too much CPU time.
++ @see PaStreamCallbackFlags
++*/
++#define paOutputUnderflow  ((PaStreamCallbackFlags) 0x00000004)
++
++/** Indicates that output data will be discarded because no room is available.
++ @see PaStreamCallbackFlags
++*/
++#define paOutputOverflow   ((PaStreamCallbackFlags) 0x00000008)
++
++/** Some of all of the output data will be used to prime the stream, input
++ data may be zero.
++ @see PaStreamCallbackFlags
++*/
++#define paPrimingOutput    ((PaStreamCallbackFlags) 0x00000010)
++
++/**
++ Allowable return values for the PaStreamCallback.
++ @see PaStreamCallback
++*/
++typedef enum PaStreamCallbackResult
++{
++    paContinue=0,
++    paComplete=1,
++    paAbort=2
++} PaStreamCallbackResult;
++
++
++/**
++ Functions of type PaStreamCallback are implemented by PortAudio clients.
++ They consume, process or generate audio in response to requests from an
++ active PortAudio stream.
++     
++ @param input and @param output are arrays of interleaved samples,
++ the format, packing and number of channels used by the buffers are
++ determined by parameters to Pa_OpenStream().
++     
++ @param frameCount The number of sample frames to be processed by
++ the stream callback.
++
++ @param timeInfo The time in seconds when the first sample of the input
++ buffer was received at the audio input, the time in seconds when the first
++ sample of the output buffer will begin being played at the audio output, and
++ the time in seconds when the stream callback was called.
++ See also Pa_GetStreamTime()
++
++ @param statusFlags Flags indicating whether input and/or output buffers
++ have been inserted or will be dropped to overcome underflow or overflow
++ conditions.
++
++ @param userData The value of a user supplied pointer passed to
++ Pa_OpenStream() intended for storing synthesis data etc.
++
++ @return
++ The stream callback should return one of the values in the
++ PaStreamCallbackResult enumeration. To ensure that the callback continues
++ to be called, it should return paContinue (0). Either paComplete or paAbort
++ can be returned to finish stream processing, after either of these values is
++ returned the callback will not be called again. If paAbort is returned the
++ stream will finish as soon as possible. If paComplete is returned, the stream
++ will continue until all buffers generated by the callback have been played.
++ This may be useful in applications such as soundfile players where a specific
++ duration of output is required. However, it is not necessary to utilise this
++ mechanism as Pa_StopStream(), Pa_AbortStream() or Pa_CloseStream() can also
++ be used to stop the stream. The callback must always fill the entire output
++ buffer irrespective of its return value.
++
++ @see Pa_OpenStream, Pa_OpenDefaultStream
++
++ @note With the exception of Pa_GetStreamCpuLoad() it is not permissable to call
++ PortAudio API functions from within the stream callback.
++*/
++typedef int PaStreamCallback(
++    const void *input, void *output,
++    unsigned long frameCount,
++    const PaStreamCallbackTimeInfo* timeInfo,
++    PaStreamCallbackFlags statusFlags,
++    void *userData );
++
++
++/** Opens a stream for either input, output or both.
++     
++ @param stream The address of a PaStream pointer which will receive
++ a pointer to the newly opened stream.
++     
++ @param inputParameters A structure that describes the input parameters used by
++ the opened stream. See PaStreamParameters for a description of these parameters.
++ inputParameters must be NULL for output-only streams.
++
++ @param outputParameters A structure that describes the output parameters used by
++ the opened stream. See PaStreamParameters for a description of these parameters.
++ outputParameters must be NULL for input-only streams.
++ 
++ @param sampleRate The desired sampleRate. For full-duplex streams it is the
++ sample rate for both input and output
++     
++ @param framesPerBuffer The number of frames passed to the stream callback
++ function, or the preferred block granularity for a blocking read/write stream.
++ The special value paFramesPerBufferUnspecified (0) may be used to request that
++ the stream callback will recieve an optimal (and possibly varying) number of
++ frames based on host requirements and the requested latency settings.
++ Note: With some host APIs, the use of non-zero framesPerBuffer for a callback
++ stream may introduce an additional layer of buffering which could introduce
++ additional latency. PortAudio guarantees that the additional latency
++ will be kept to the theoretical minimum however, it is strongly recommended
++ that a non-zero framesPerBuffer value only be used when your algorithm
++ requires a fixed number of frames per stream callback.
++ 
++ @param streamFlags Flags which modify the behaviour of the streaming process.
++ This parameter may contain a combination of flags ORed together. Some flags may
++ only be relevant to certain buffer formats.
++     
++ @param streamCallback A pointer to a client supplied function that is responsible
++ for processing and filling input and output buffers. If this parameter is NULL
++ the stream will be opened in 'blocking read/write' mode. In blocking mode,
++ the client can receive sample data using Pa_ReadStream and write sample data
++ using Pa_WriteStream, the number of samples that may be read or written
++ without blocking is returned by Pa_GetStreamReadAvailable and
++ Pa_GetStreamWriteAvailable respectively.
++
++ @param userData A client supplied pointer which is passed to the stream callback
++ function. It could for example, contain a pointer to instance data necessary
++ for processing the audio buffers. This parameter is ignored if streamCallback
++ is NULL.
++     
++ @return
++ Upon success Pa_OpenStream() returns paNoError and places a pointer to a
++ valid PaStream in the stream argument. The stream is inactive (stopped).
++ If a call to Pa_OpenStream() fails, a non-zero error code is returned (see
++ PaError for possible error codes) and the value of stream is invalid.
++
++ @see PaStreamParameters, PaStreamCallback, Pa_ReadStream, Pa_WriteStream,
++ Pa_GetStreamReadAvailable, Pa_GetStreamWriteAvailable
++*/
++PaError Pa_OpenStream( PaStream** stream,
++                       const PaStreamParameters *inputParameters,
++                       const PaStreamParameters *outputParameters,
++                       double sampleRate,
++                       unsigned long framesPerBuffer,
++                       PaStreamFlags streamFlags,
++                       PaStreamCallback *streamCallback,
++                       void *userData );
++
++
++/** A simplified version of Pa_OpenStream() that opens the default input
++ and/or output devices.
++
++ @param stream The address of a PaStream pointer which will receive
++ a pointer to the newly opened stream.
++ 
++ @param numInputChannels  The number of channels of sound that will be supplied
++ to the stream callback or returned by Pa_ReadStream. It can range from 1 to
++ the value of maxInputChannels in the PaDeviceInfo record for the default input
++ device. If 0 the stream is opened as an output-only stream.
++
++ @param numOutputChannels The number of channels of sound to be delivered to the
++ stream callback or passed to Pa_WriteStream. It can range from 1 to the value
++ of maxOutputChannels in the PaDeviceInfo record for the default output dvice.
++ If 0 the stream is opened as an output-only stream.
++
++ @param sampleFormat The sample format of both the input and output buffers
++ provided to the callback or passed to and from Pa_ReadStream and Pa_WriteStream.
++ sampleFormat may be any of the formats described by the PaSampleFormat
++ enumeration.
++ 
++ @param sampleRate Same as Pa_OpenStream parameter of the same name.
++ @param framesPerBuffer Same as Pa_OpenStream parameter of the same name.
++ @param streamCallback Same as Pa_OpenStream parameter of the same name.
++ @param userData Same as Pa_OpenStream parameter of the same name.
++
++ @return As for Pa_OpenStream
++
++ @see Pa_OpenStream, PaStreamCallback
++*/
++PaError Pa_OpenDefaultStream( PaStream** stream,
++                              int numInputChannels,
++                              int numOutputChannels,
++                              PaSampleFormat sampleFormat,
++                              double sampleRate,
++                              unsigned long framesPerBuffer,
++                              PaStreamCallback *streamCallback,
++                              void *userData );
++
++
++/** Closes an audio stream. If the audio stream is active it
++ discards any pending buffers as if Pa_AbortStream() had been called.
++*/
++PaError Pa_CloseStream( PaStream *stream );
++
++
++/** Functions of type PaStreamFinishedCallback are implemented by PortAudio 
++ clients. They can be registered with a stream using the Pa_SetStreamFinishedCallback
++ function. Once registered they are called when the stream becomes inactive
++ (ie once a call to Pa_StopStream() will not block).
++ A stream will become inactive after the stream callback returns non-zero,
++ or when Pa_StopStream or Pa_AbortStream is called. For a stream providing audio
++ output, if the stream callback returns paComplete, or Pa_StopStream is called,
++ the stream finished callback will not be called until all generated sample data
++ has been played.
++ 
++ @param userData The userData parameter supplied to Pa_OpenStream()
++
++ @see Pa_SetStreamFinishedCallback
++*/
++typedef void PaStreamFinishedCallback( void *userData );
++
++
++/** Register a stream finished callback function which will be called when the 
++ stream becomes inactive. See the description of PaStreamFinishedCallback for 
++ further details about when the callback will be called.
++
++ @param stream a pointer to a PaStream that is in the stopped state - if the
++ stream is not stopped, the stream's finished callback will remain unchanged 
++ and an error code will be returned.
++
++ @param streamFinishedCallback a pointer to a function with the same signature
++ as PaStreamFinishedCallback, that will be called when the stream becomes
++ inactive. Passing NULL for this parameter will un-register a previously
++ registered stream finished callback function.
++
++ @return on success returns paNoError, otherwise an error code indicating the cause
++ of the error.
++
++ @see PaStreamFinishedCallback
++*/
++PaError Pa_SetStreamFinishedCallback( PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback ); 
++
++
++/** Commences audio processing.
++*/
++PaError Pa_StartStream( PaStream *stream );
++
++
++/** Terminates audio processing. It waits until all pending
++ audio buffers have been played before it returns.
++*/
++PaError Pa_StopStream( PaStream *stream );
++
++
++/** Terminates audio processing immediately without waiting for pending
++ buffers to complete.
++*/
++PaError Pa_AbortStream( PaStream *stream );
++
++
++/** Determine whether the stream is stopped.
++ A stream is considered to be stopped prior to a successful call to
++ Pa_StartStream and after a successful call to Pa_StopStream or Pa_AbortStream.
++ If a stream callback returns a value other than paContinue the stream is NOT
++ considered to be stopped.
++
++ @return Returns one (1) when the stream is stopped, zero (0) when
++ the stream is running or, a PaErrorCode (which are always negative) if
++ PortAudio is not initialized or an error is encountered.
++
++ @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive
++*/
++PaError Pa_IsStreamStopped( PaStream *stream );
++
++
++/** Determine whether the stream is active.
++ A stream is active after a successful call to Pa_StartStream(), until it
++ becomes inactive either as a result of a call to Pa_StopStream() or
++ Pa_AbortStream(), or as a result of a return value other than paContinue from
++ the stream callback. In the latter case, the stream is considered inactive
++ after the last buffer has finished playing.
++
++ @return Returns one (1) when the stream is active (ie playing or recording
++ audio), zero (0) when not playing or, a PaErrorCode (which are always negative)
++ if PortAudio is not initialized or an error is encountered.
++
++ @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamStopped
++*/
++PaError Pa_IsStreamActive( PaStream *stream );
++
++
++
++/** A structure containing unchanging information about an open stream.
++ @see Pa_GetStreamInfo
++*/
++
++typedef struct PaStreamInfo
++{
++    /** this is struct version 1 */
++    int structVersion;
++
++    /** The input latency of the stream in seconds. This value provides the most
++     accurate estimate of input latency available to the implementation. It may
++     differ significantly from the suggestedLatency value passed to Pa_OpenStream().
++     The value of this field will be zero (0.) for output-only streams.
++     @see PaTime
++    */
++    PaTime inputLatency;
++
++    /** The output latency of the stream in seconds. This value provides the most
++     accurate estimate of output latency available to the implementation. It may
++     differ significantly from the suggestedLatency value passed to Pa_OpenStream().
++     The value of this field will be zero (0.) for input-only streams.
++     @see PaTime
++    */
++    PaTime outputLatency;
++
++    /** The sample rate of the stream in Hertz (samples per second). In cases
++     where the hardware sample rate is inaccurate and PortAudio is aware of it,
++     the value of this field may be different from the sampleRate parameter
++     passed to Pa_OpenStream(). If information about the actual hardware sample
++     rate is not available, this field will have the same value as the sampleRate
++     parameter passed to Pa_OpenStream().
++    */
++    double sampleRate;
++    
++} PaStreamInfo;
++
++
++/** Retrieve a pointer to a PaStreamInfo structure containing information
++ about the specified stream.
++ @return A pointer to an immutable PaStreamInfo structure. If the stream
++ parameter invalid, or an error is encountered, the function returns NULL.
++
++ @param stream A pointer to an open stream previously created with Pa_OpenStream.
++
++ @note PortAudio manages the memory referenced by the returned pointer,
++ the client must not manipulate or free the memory. The pointer is only
++ guaranteed to be valid until the specified stream is closed.
++
++ @see PaStreamInfo
++*/
++const PaStreamInfo* Pa_GetStreamInfo( PaStream *stream );
++
++
++/** Determine the current time for the stream according to the same clock used
++ to generate buffer timestamps. This time may be used for syncronising other
++ events to the audio stream, for example synchronizing audio to MIDI.
++                                        
++ @return The stream's current time in seconds, or 0 if an error occurred.
++
++ @see PaTime, PaStreamCallback
++*/
++PaTime Pa_GetStreamTime( PaStream *stream );
++
++
++/** Retrieve CPU usage information for the specified stream.
++ The "CPU Load" is a fraction of total CPU time consumed by a callback stream's
++ audio processing routines including, but not limited to the client supplied
++ stream callback. This function does not work with blocking read/write streams.
++
++ This function may be called from the stream callback function or the
++ application.
++     
++ @return
++ A floating point value, typically between 0.0 and 1.0, where 1.0 indicates
++ that the stream callback is consuming the maximum number of CPU cycles possible
++ to maintain real-time operation. A value of 0.5 would imply that PortAudio and
++ the stream callback was consuming roughly 50% of the available CPU time. The
++ return value may exceed 1.0. A value of 0.0 will always be returned for a
++ blocking read/write stream, or if an error occurrs.
++*/
++double Pa_GetStreamCpuLoad( PaStream* stream );
++
++
++/** Read samples from an input stream. The function doesn't return until
++ the entire buffer has been filled - this may involve waiting for the operating
++ system to supply the data.
++
++ @param stream A pointer to an open stream previously created with Pa_OpenStream.
++ 
++ @param buffer A pointer to a buffer of sample frames. The buffer contains
++ samples in the format specified by the inputParameters->sampleFormat field
++ used to open the stream, and the number of channels specified by
++ inputParameters->numChannels. If non-interleaved samples were requested,
++ buffer is a pointer to the first element of an array of non-interleaved
++ buffer pointers, one for each channel.
++
++ @param frames The number of frames to be read into buffer. This parameter
++ is not constrained to a specific range, however high performance applications
++ will want to match this parameter to the framesPerBuffer parameter used
++ when opening the stream.
++
++ @return On success PaNoError will be returned, or PaInputOverflowed if input
++ data was discarded by PortAudio after the previous call and before this call.
++*/
++PaError Pa_ReadStream( PaStream* stream,
++                       void *buffer,
++                       unsigned long frames );
++
++
++/** Write samples to an output stream. This function doesn't return until the
++ entire buffer has been consumed - this may involve waiting for the operating
++ system to consume the data.
++
++ @param stream A pointer to an open stream previously created with Pa_OpenStream.
++
++ @param buffer A pointer to a buffer of sample frames. The buffer contains
++ samples in the format specified by the outputParameters->sampleFormat field
++ used to open the stream, and the number of channels specified by
++ outputParameters->numChannels. If non-interleaved samples were requested,
++ buffer is a pointer to the first element of an array of non-interleaved
++ buffer pointers, one for each channel.
++
++ @param frames The number of frames to be written from buffer. This parameter
++ is not constrained to a specific range, however high performance applications
++ will want to match this parameter to the framesPerBuffer parameter used
++ when opening the stream.
++
++ @return On success PaNoError will be returned, or paOutputUnderflowed if
++ additional output data was inserted after the previous call and before this
++ call.
++*/
++PaError Pa_WriteStream( PaStream* stream,
++                        const void *buffer,
++                        unsigned long frames );
++
++
++/** Retrieve the number of frames that can be read from the stream without
++ waiting.
++
++ @return Returns a non-negative value representing the maximum number of frames
++ that can be read from the stream without blocking or busy waiting or, a
++ PaErrorCode (which are always negative) if PortAudio is not initialized or an
++ error is encountered.
++*/
++signed long Pa_GetStreamReadAvailable( PaStream* stream );
++
++
++/** Retrieve the number of frames that can be written to the stream without
++ waiting.
++
++ @return Returns a non-negative value representing the maximum number of frames
++ that can be written to the stream without blocking or busy waiting or, a
++ PaErrorCode (which are always negative) if PortAudio is not initialized or an
++ error is encountered.
++*/
++signed long Pa_GetStreamWriteAvailable( PaStream* stream );
++
++
++/* Miscellaneous utilities */
++
++
++/** Retrieve the size of a given sample format in bytes.
++
++ @return The size in bytes of a single sample in the specified format,
++ or paSampleFormatNotSupported if the format is not supported.
++*/
++PaError Pa_GetSampleSize( PaSampleFormat format );
++
++
++/** Put the caller to sleep for at least 'msec' milliseconds. This function is
++ provided only as a convenience for authors of portable code (such as the tests
++ and examples in the PortAudio distribution.)
++
++ The function may sleep longer than requested so don't rely on this for accurate
++ musical timing.
++*/
++void Pa_Sleep( long msec );
++
++
++
++#ifdef __cplusplus
++}
++#endif /* __cplusplus */
++#endif /* PORTAUDIO_H */
+diff -ruN src/output/portAudio.orig/PortAudio/include/portaudio.h src/output/portAudio/PortAudio/include/portaudio.h
+--- src/output/portAudio.orig/PortAudio/include/portaudio.h	2007-12-05 20:39:28.000000000 +0800
++++ src/output/portAudio/PortAudio/include/portaudio.h	1970-01-01 08:00:00.000000000 +0800
+@@ -1,1133 +0,0 @@
+-
+-#ifndef PORTAUDIO_H
+-#define PORTAUDIO_H
+-/*
+- * $Id: portaudio.h 1083 2006-08-23 07:30:49Z rossb $
+- * PortAudio Portable Real-Time Audio Library
+- * PortAudio API Header File
+- * Latest version available at: http://www.portaudio.com/
+- *
+- * Copyright (c) 1999-2002 Ross Bencina and Phil Burk
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining
+- * a copy of this software and associated documentation files
+- * (the "Software"), to deal in the Software without restriction,
+- * including without limitation the rights to use, copy, modify, merge,
+- * publish, distribute, sublicense, and/or sell copies of the Software,
+- * and to permit persons to whom the Software is furnished to do so,
+- * subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice shall be
+- * included in all copies or substantial portions of the Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+- * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+- */
+-
+-/*
+- * The text above constitutes the entire PortAudio license; however, 
+- * the PortAudio community also makes the following non-binding requests:
+- *
+- * Any person wishing to distribute modifications to the Software is
+- * requested to send the modifications to the original developer so that
+- * they can be incorporated into the canonical version. It is also 
+- * requested that these non-binding requests be included along with the 
+- * license above.
+- */
+-
+-/** @file
+- @brief The PortAudio API.
+-*/
+-
+-
+-#ifdef __cplusplus
+-extern "C"
+-{
+-#endif /* __cplusplus */
+-
+- 
+-/** Retrieve the release number of the currently running PortAudio build,
+- eg 1900.
+-*/
+-int Pa_GetVersion( void );
+-
+-
+-/** Retrieve a textual description of the current PortAudio build,
+- eg "PortAudio V19-devel 13 October 2002".
+-*/
+-const char* Pa_GetVersionText( void );
+-
+-
+-/** Error codes returned by PortAudio functions.
+- Note that with the exception of paNoError, all PaErrorCodes are negative.
+-*/
+-
+-typedef int PaError;
+-typedef enum PaErrorCode
+-{
+-    paNoError = 0,
+-
+-    paNotInitialized = -10000,
+-    paUnanticipatedHostError,
+-    paInvalidChannelCount,
+-    paInvalidSampleRate,
+-    paInvalidDevice,
+-    paInvalidFlag,
+-    paSampleFormatNotSupported,
+-    paBadIODeviceCombination,
+-    paInsufficientMemory,
+-    paBufferTooBig,
+-    paBufferTooSmall,
+-    paNullCallback,
+-    paBadStreamPtr,
+-    paTimedOut,
+-    paInternalError,
+-    paDeviceUnavailable,
+-    paIncompatibleHostApiSpecificStreamInfo,
+-    paStreamIsStopped,
+-    paStreamIsNotStopped,
+-    paInputOverflowed,
+-    paOutputUnderflowed,
+-    paHostApiNotFound,
+-    paInvalidHostApi,
+-    paCanNotReadFromACallbackStream,      /**< @todo review error code name */
+-    paCanNotWriteToACallbackStream,       /**< @todo review error code name */
+-    paCanNotReadFromAnOutputOnlyStream,   /**< @todo review error code name */
+-    paCanNotWriteToAnInputOnlyStream,     /**< @todo review error code name */
+-    paIncompatibleStreamHostApi,
+-    paBadBufferPtr
+-} PaErrorCode;
+-
+-
+-/** Translate the supplied PortAudio error code into a human readable
+- message.
+-*/
+-const char *Pa_GetErrorText( PaError errorCode );
+-
+-
+-/** Library initialization function - call this before using PortAudio.
+- This function initialises internal data structures and prepares underlying
+- host APIs for use. This function MUST be called before using any other
+- PortAudio API functions.
+-
+- If Pa_Initialize() is called multiple times, each successful 
+- call must be matched with a corresponding call to Pa_Terminate(). 
+- Pairs of calls to Pa_Initialize()/Pa_Terminate() may overlap, and are not 
+- required to be fully nested.
+-
+- Note that if Pa_Initialize() returns an error code, Pa_Terminate() should
+- NOT be called.
+-
+- @return paNoError if successful, otherwise an error code indicating the cause
+- of failure.
+-
+- @see Pa_Terminate
+-*/
+-PaError Pa_Initialize( void );
+-
+-
+-/** Library termination function - call this when finished using PortAudio.
+- This function deallocates all resources allocated by PortAudio since it was
+- initializied by a call to Pa_Initialize(). In cases where Pa_Initialise() has
+- been called multiple times, each call must be matched with a corresponding call
+- to Pa_Terminate(). The final matching call to Pa_Terminate() will automatically
+- close any PortAudio streams that are still open.
+-
+- Pa_Terminate() MUST be called before exiting a program which uses PortAudio.
+- Failure to do so may result in serious resource leaks, such as audio devices
+- not being available until the next reboot.
+-
+- @return paNoError if successful, otherwise an error code indicating the cause
+- of failure.
+- 
+- @see Pa_Initialize
+-*/
+-PaError Pa_Terminate( void );
+-
+-
+-
+-/** The type used to refer to audio devices. Values of this type usually
+- range from 0 to (Pa_DeviceCount-1), and may also take on the PaNoDevice
+- and paUseHostApiSpecificDeviceSpecification values.
+-
+- @see Pa_DeviceCount, paNoDevice, paUseHostApiSpecificDeviceSpecification
+-*/
+-typedef int PaDeviceIndex;
+-
+-
+-/** A special PaDeviceIndex value indicating that no device is available,
+- or should be used.
+-
+- @see PaDeviceIndex
+-*/
+-#define paNoDevice ((PaDeviceIndex)-1)
+-
+-
+-/** A special PaDeviceIndex value indicating that the device(s) to be used
+- are specified in the host api specific stream info structure.
+-
+- @see PaDeviceIndex
+-*/
+-#define paUseHostApiSpecificDeviceSpecification ((PaDeviceIndex)-2)
+-
+-
+-/* Host API enumeration mechanism */
+-
+-/** The type used to enumerate to host APIs at runtime. Values of this type
+- range from 0 to (Pa_GetHostApiCount()-1).
+-
+- @see Pa_GetHostApiCount
+-*/
+-typedef int PaHostApiIndex;
+-
+-
+-/** Retrieve the number of available host APIs. Even if a host API is
+- available it may have no devices available.
+-
+- @return A non-negative value indicating the number of available host APIs
+- or, a PaErrorCode (which are always negative) if PortAudio is not initialized
+- or an error is encountered.
+-
+- @see PaHostApiIndex
+-*/
+-PaHostApiIndex Pa_GetHostApiCount( void );
+-
+-
+-/** Retrieve the index of the default host API. The default host API will be
+- the lowest common denominator host API on the current platform and is
+- unlikely to provide the best performance.
+-
+- @return A non-negative value ranging from 0 to (Pa_GetHostApiCount()-1)
+- indicating the default host API index or, a PaErrorCode (which are always
+- negative) if PortAudio is not initialized or an error is encountered.
+-*/
+-PaHostApiIndex Pa_GetDefaultHostApi( void );
+-
+-
+-/** Unchanging unique identifiers for each supported host API. This type
+- is used in the PaHostApiInfo structure. The values are guaranteed to be
+- unique and to never change, thus allowing code to be written that
+- conditionally uses host API specific extensions.
+-
+- New type ids will be allocated when support for a host API reaches
+- "public alpha" status, prior to that developers should use the
+- paInDevelopment type id.
+-
+- @see PaHostApiInfo
+-*/
+-typedef enum PaHostApiTypeId
+-{
+-    paInDevelopment=0, /* use while developing support for a new host API */
+-    paDirectSound=1,
+-    paMME=2,
+-    paASIO=3,
+-    paSoundManager=4,
+-    paCoreAudio=5,
+-    paOSS=7,
+-    paALSA=8,
+-    paAL=9,
+-    paBeOS=10,
+-    paWDMKS=11,
+-    paJACK=12,
+-    paWASAPI=13,
+-    paAudioScienceHPI=14
+-} PaHostApiTypeId;
+-
+-
+-/** A structure containing information about a particular host API. */
+-
+-typedef struct PaHostApiInfo
+-{
+-    /** this is struct version 1 */
+-    int structVersion;
+-    /** The well known unique identifier of this host API @see PaHostApiTypeId */
+-    PaHostApiTypeId type;
+-    /** A textual description of the host API for display on user interfaces. */
+-    const char *name;
+-
+-    /**  The number of devices belonging to this host API. This field may be
+-     used in conjunction with Pa_HostApiDeviceIndexToDeviceIndex() to enumerate
+-     all devices for this host API.
+-     @see Pa_HostApiDeviceIndexToDeviceIndex
+-    */
+-    int deviceCount;
+-
+-    /** The default input device for this host API. The value will be a
+-     device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice
+-     if no default input device is available.
+-    */
+-    PaDeviceIndex defaultInputDevice;
+-
+-    /** The default output device for this host API. The value will be a
+-     device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice
+-     if no default output device is available.
+-    */
+-    PaDeviceIndex defaultOutputDevice;
+-    
+-} PaHostApiInfo;
+-
+-
+-/** Retrieve a pointer to a structure containing information about a specific
+- host Api.
+-
+- @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1)
+-
+- @return A pointer to an immutable PaHostApiInfo structure describing
+- a specific host API. If the hostApi parameter is out of range or an error
+- is encountered, the function returns NULL.
+-
+- The returned structure is owned by the PortAudio implementation and must not
+- be manipulated or freed. The pointer is only guaranteed to be valid between
+- calls to Pa_Initialize() and Pa_Terminate().
+-*/
+-const PaHostApiInfo * Pa_GetHostApiInfo( PaHostApiIndex hostApi );
+-
+-
+-/** Convert a static host API unique identifier, into a runtime
+- host API index.
+-
+- @param type A unique host API identifier belonging to the PaHostApiTypeId
+- enumeration.
+-
+- @return A valid PaHostApiIndex ranging from 0 to (Pa_GetHostApiCount()-1) or,
+- a PaErrorCode (which are always negative) if PortAudio is not initialized
+- or an error is encountered.
+- 
+- The paHostApiNotFound error code indicates that the host API specified by the
+- type parameter is not available.
+-
+- @see PaHostApiTypeId
+-*/
+-PaHostApiIndex Pa_HostApiTypeIdToHostApiIndex( PaHostApiTypeId type );
+-
+-
+-/** Convert a host-API-specific device index to standard PortAudio device index.
+- This function may be used in conjunction with the deviceCount field of
+- PaHostApiInfo to enumerate all devices for the specified host API.
+-
+- @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1)
+-
+- @param hostApiDeviceIndex A valid per-host device index in the range
+- 0 to (Pa_GetHostApiInfo(hostApi)->deviceCount-1)
+-
+- @return A non-negative PaDeviceIndex ranging from 0 to (Pa_GetDeviceCount()-1)
+- or, a PaErrorCode (which are always negative) if PortAudio is not initialized
+- or an error is encountered.
+-
+- A paInvalidHostApi error code indicates that the host API index specified by
+- the hostApi parameter is out of range.
+-
+- A paInvalidDevice error code indicates that the hostApiDeviceIndex parameter
+- is out of range.
+- 
+- @see PaHostApiInfo
+-*/
+-PaDeviceIndex Pa_HostApiDeviceIndexToDeviceIndex( PaHostApiIndex hostApi,
+-        int hostApiDeviceIndex );
+-
+-
+-
+-/** Structure used to return information about a host error condition.
+-*/
+-typedef struct PaHostErrorInfo{
+-    PaHostApiTypeId hostApiType;    /**< the host API which returned the error code */
+-    long errorCode;                 /**< the error code returned */
+-    const char *errorText;          /**< a textual description of the error if available, otherwise a zero-length string */
+-}PaHostErrorInfo;
+-
+-
+-/** Return information about the last host error encountered. The error
+- information returned by Pa_GetLastHostErrorInfo() will never be modified
+- asyncronously by errors occurring in other PortAudio owned threads
+- (such as the thread that manages the stream callback.)
+-
+- This function is provided as a last resort, primarily to enhance debugging
+- by providing clients with access to all available error information.
+-
+- @return A pointer to an immutable structure constaining information about
+- the host error. The values in this structure will only be valid if a
+- PortAudio function has previously returned the paUnanticipatedHostError
+- error code.
+-*/
+-const PaHostErrorInfo* Pa_GetLastHostErrorInfo( void );
+-
+-
+-
+-/* Device enumeration and capabilities */
+-
+-/** Retrieve the number of available devices. The number of available devices
+- may be zero.
+-
+- @return A non-negative value indicating the number of available devices or,
+- a PaErrorCode (which are always negative) if PortAudio is not initialized
+- or an error is encountered.
+-*/
+-PaDeviceIndex Pa_GetDeviceCount( void );
+-
+-
+-/** Retrieve the index of the default input device. The result can be
+- used in the inputDevice parameter to Pa_OpenStream().
+-
+- @return The default input device index for the default host API, or paNoDevice
+- if no default input device is available or an error was encountered.
+-*/
+-PaDeviceIndex Pa_GetDefaultInputDevice( void );
+-
+-
+-/** Retrieve the index of the default output device. The result can be
+- used in the outputDevice parameter to Pa_OpenStream().
+-
+- @return The default output device index for the defualt host API, or paNoDevice
+- if no default output device is available or an error was encountered.
+-
+- @note
+- On the PC, the user can specify a default device by
+- setting an environment variable. For example, to use device #1.
+-<pre>
+- set PA_RECOMMENDED_OUTPUT_DEVICE=1
+-</pre>
+- The user should first determine the available device ids by using
+- the supplied application "pa_devs".
+-*/
+-PaDeviceIndex Pa_GetDefaultOutputDevice( void );
+-
+-
+-/** The type used to represent monotonic time in seconds that can be used
+- for syncronisation. The type is used for the outTime argument to the
+- PaStreamCallback and as the result of Pa_GetStreamTime().
+-     
+- @see PaStreamCallback, Pa_GetStreamTime
+-*/
+-typedef double PaTime;
+-
+-
+-/** A type used to specify one or more sample formats. Each value indicates
+- a possible format for sound data passed to and from the stream callback,
+- Pa_ReadStream and Pa_WriteStream.
+-
+- The standard formats paFloat32, paInt16, paInt32, paInt24, paInt8
+- and aUInt8 are usually implemented by all implementations.
+-
+- The floating point representation (paFloat32) uses +1.0 and -1.0 as the
+- maximum and minimum respectively.
+-
+- paUInt8 is an unsigned 8 bit format where 128 is considered "ground"
+-
+- The paNonInterleaved flag indicates that a multichannel buffer is passed
+- as a set of non-interleaved pointers.
+-
+- @see Pa_OpenStream, Pa_OpenDefaultStream, PaDeviceInfo
+- @see paFloat32, paInt16, paInt32, paInt24, paInt8
+- @see paUInt8, paCustomFormat, paNonInterleaved
+-*/
+-typedef unsigned long PaSampleFormat;
+-
+-
+-#define paFloat32        ((PaSampleFormat) 0x00000001) /**< @see PaSampleFormat */
+-#define paInt32          ((PaSampleFormat) 0x00000002) /**< @see PaSampleFormat */
+-#define paInt24          ((PaSampleFormat) 0x00000004) /**< Packed 24 bit format. @see PaSampleFormat */
+-#define paInt16          ((PaSampleFormat) 0x00000008) /**< @see PaSampleFormat */
+-#define paInt8           ((PaSampleFormat) 0x00000010) /**< @see PaSampleFormat */
+-#define paUInt8          ((PaSampleFormat) 0x00000020) /**< @see PaSampleFormat */
+-#define paCustomFormat   ((PaSampleFormat) 0x00010000)/**< @see PaSampleFormat */
+-
+-#define paNonInterleaved ((PaSampleFormat) 0x80000000)
+-
+-/** A structure providing information and capabilities of PortAudio devices.
+- Devices may support input, output or both input and output.
+-*/
+-typedef struct PaDeviceInfo
+-{
+-    int structVersion;  /* this is struct version 2 */
+-    const char *name;
+-    PaHostApiIndex hostApi; /* note this is a host API index, not a type id*/
+-    
+-    int maxInputChannels;
+-    int maxOutputChannels;
+-
+-    /* Default latency values for interactive performance. */
+-    PaTime defaultLowInputLatency;
+-    PaTime defaultLowOutputLatency;
+-    /* Default latency values for robust non-interactive applications (eg. playing sound files). */
+-    PaTime defaultHighInputLatency;
+-    PaTime defaultHighOutputLatency;
+-
+-    double defaultSampleRate;
+-} PaDeviceInfo;
+-
+-
+-/** Retrieve a pointer to a PaDeviceInfo structure containing information
+- about the specified device.
+- @return A pointer to an immutable PaDeviceInfo structure. If the device
+- parameter is out of range the function returns NULL.
+-
+- @param device A valid device index in the range 0 to (Pa_GetDeviceCount()-1)
+-
+- @note PortAudio manages the memory referenced by the returned pointer,
+- the client must not manipulate or free the memory. The pointer is only
+- guaranteed to be valid between calls to Pa_Initialize() and Pa_Terminate().
+-
+- @see PaDeviceInfo, PaDeviceIndex
+-*/
+-const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceIndex device );
+-
+-
+-/** Parameters for one direction (input or output) of a stream.
+-*/
+-typedef struct PaStreamParameters
+-{
+-    /** A valid device index in the range 0 to (Pa_GetDeviceCount()-1)
+-     specifying the device to be used or the special constant
+-     paUseHostApiSpecificDeviceSpecification which indicates that the actual
+-     device(s) to use are specified in hostApiSpecificStreamInfo.
+-     This field must not be set to paNoDevice.
+-    */
+-    PaDeviceIndex device;
+-    
+-    /** The number of channels of sound to be delivered to the
+-     stream callback or accessed by Pa_ReadStream() or Pa_WriteStream().
+-     It can range from 1 to the value of maxInputChannels in the
+-     PaDeviceInfo record for the device specified by the device parameter.
+-    */
+-    int channelCount;
+-
+-    /** The sample format of the buffer provided to the stream callback,
+-     a_ReadStream() or Pa_WriteStream(). It may be any of the formats described
+-     by the PaSampleFormat enumeration.
+-    */
+-    PaSampleFormat sampleFormat;
+-
+-    /** The desired latency in seconds. Where practical, implementations should
+-     configure their latency based on these parameters, otherwise they may
+-     choose the closest viable latency instead. Unless the suggested latency
+-     is greater than the absolute upper limit for the device implementations
+-     should round the suggestedLatency up to the next practial value - ie to
+-     provide an equal or higher latency than suggestedLatency wherever possibe.
+-     Actual latency values for an open stream may be retrieved using the
+-     inputLatency and outputLatency fields of the PaStreamInfo structure
+-     returned by Pa_GetStreamInfo().
+-     @see default*Latency in PaDeviceInfo, *Latency in PaStreamInfo
+-    */
+-    PaTime suggestedLatency;
+-
+-    /** An optional pointer to a host api specific data structure
+-     containing additional information for device setup and/or stream processing.
+-     hostApiSpecificStreamInfo is never required for correct operation,
+-     if not used it should be set to NULL.
+-    */
+-    void *hostApiSpecificStreamInfo;
+-
+-} PaStreamParameters;
+-
+-
+-/** Return code for Pa_IsFormatSupported indicating success. */
+-#define paFormatIsSupported (0)
+-
+-/** Determine whether it would be possible to open a stream with the specified
+- parameters.
+-
+- @param inputParameters A structure that describes the input parameters used to
+- open a stream. The suggestedLatency field is ignored. See PaStreamParameters
+- for a description of these parameters. inputParameters must be NULL for
+- output-only streams.
+-
+- @param outputParameters A structure that describes the output parameters used
+- to open a stream. The suggestedLatency field is ignored. See PaStreamParameters
+- for a description of these parameters. outputParameters must be NULL for
+- input-only streams.
+-
+- @param sampleRate The required sampleRate. For full-duplex streams it is the
+- sample rate for both input and output
+-
+- @return Returns 0 if the format is supported, and an error code indicating why
+- the format is not supported otherwise. The constant paFormatIsSupported is
+- provided to compare with the return value for success.
+-
+- @see paFormatIsSupported, PaStreamParameters
+-*/
+-PaError Pa_IsFormatSupported( const PaStreamParameters *inputParameters,
+-                              const PaStreamParameters *outputParameters,
+-                              double sampleRate );
+-
+-
+-
+-/* Streaming types and functions */
+-
+-
+-/**
+- A single PaStream can provide multiple channels of real-time
+- streaming audio input and output to a client application. A stream
+- provides access to audio hardware represented by one or more
+- PaDevices. Depending on the underlying Host API, it may be possible 
+- to open multiple streams using the same device, however this behavior 
+- is implementation defined. Portable applications should assume that 
+- a PaDevice may be simultaneously used by at most one PaStream.
+-
+- Pointers to PaStream objects are passed between PortAudio functions that
+- operate on streams.
+-
+- @see Pa_OpenStream, Pa_OpenDefaultStream, Pa_OpenDefaultStream, Pa_CloseStream,
+- Pa_StartStream, Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive,
+- Pa_GetStreamTime, Pa_GetStreamCpuLoad
+-
+-*/
+-typedef void PaStream;
+-
+-
+-/** Can be passed as the framesPerBuffer parameter to Pa_OpenStream()
+- or Pa_OpenDefaultStream() to indicate that the stream callback will
+- accept buffers of any size.
+-*/
+-#define paFramesPerBufferUnspecified  (0)
+-
+-
+-/** Flags used to control the behavior of a stream. They are passed as
+- parameters to Pa_OpenStream or Pa_OpenDefaultStream. Multiple flags may be
+- ORed together.
+-
+- @see Pa_OpenStream, Pa_OpenDefaultStream
+- @see paNoFlag, paClipOff, paDitherOff, paNeverDropInput,
+-  paPrimeOutputBuffersUsingStreamCallback, paPlatformSpecificFlags
+-*/
+-typedef unsigned long PaStreamFlags;
+-
+-/** @see PaStreamFlags */
+-#define   paNoFlag          ((PaStreamFlags) 0)
+-
+-/** Disable default clipping of out of range samples.
+- @see PaStreamFlags
+-*/
+-#define   paClipOff         ((PaStreamFlags) 0x00000001)
+-
+-/** Disable default dithering.
+- @see PaStreamFlags
+-*/
+-#define   paDitherOff       ((PaStreamFlags) 0x00000002)
+-
+-/** Flag requests that where possible a full duplex stream will not discard
+- overflowed input samples without calling the stream callback. This flag is
+- only valid for full duplex callback streams and only when used in combination
+- with the paFramesPerBufferUnspecified (0) framesPerBuffer parameter. Using
+- this flag incorrectly results in a paInvalidFlag error being returned from
+- Pa_OpenStream and Pa_OpenDefaultStream.
+-
+- @see PaStreamFlags, paFramesPerBufferUnspecified
+-*/
+-#define   paNeverDropInput  ((PaStreamFlags) 0x00000004)
+-
+-/** Call the stream callback to fill initial output buffers, rather than the
+- default behavior of priming the buffers with zeros (silence). This flag has
+- no effect for input-only and blocking read/write streams.
+- 
+- @see PaStreamFlags
+-*/
+-#define   paPrimeOutputBuffersUsingStreamCallback ((PaStreamFlags) 0x00000008)
+-
+-/** A mask specifying the platform specific bits.
+- @see PaStreamFlags
+-*/
+-#define   paPlatformSpecificFlags ((PaStreamFlags)0xFFFF0000)
+-
+-/**
+- Timing information for the buffers passed to the stream callback.
+-*/
+-typedef struct PaStreamCallbackTimeInfo{
+-    PaTime inputBufferAdcTime;
+-    PaTime currentTime;
+-    PaTime outputBufferDacTime;
+-} PaStreamCallbackTimeInfo;
+-
+-
+-/**
+- Flag bit constants for the statusFlags to PaStreamCallback.
+-
+- @see paInputUnderflow, paInputOverflow, paOutputUnderflow, paOutputOverflow,
+- paPrimingOutput
+-*/
+-typedef unsigned long PaStreamCallbackFlags;
+-
+-/** In a stream opened with paFramesPerBufferUnspecified, indicates that
+- input data is all silence (zeros) because no real data is available. In a
+- stream opened without paFramesPerBufferUnspecified, it indicates that one or
+- more zero samples have been inserted into the input buffer to compensate
+- for an input underflow.
+- @see PaStreamCallbackFlags
+-*/
+-#define paInputUnderflow   ((PaStreamCallbackFlags) 0x00000001)
+-
+-/** In a stream opened with paFramesPerBufferUnspecified, indicates that data
+- prior to the first sample of the input buffer was discarded due to an
+- overflow, possibly because the stream callback is using too much CPU time.
+- Otherwise indicates that data prior to one or more samples in the
+- input buffer was discarded.
+- @see PaStreamCallbackFlags
+-*/
+-#define paInputOverflow    ((PaStreamCallbackFlags) 0x00000002)
+-
+-/** Indicates that output data (or a gap) was inserted, possibly because the
+- stream callback is using too much CPU time.
+- @see PaStreamCallbackFlags
+-*/
+-#define paOutputUnderflow  ((PaStreamCallbackFlags) 0x00000004)
+-
+-/** Indicates that output data will be discarded because no room is available.
+- @see PaStreamCallbackFlags
+-*/
+-#define paOutputOverflow   ((PaStreamCallbackFlags) 0x00000008)
+-
+-/** Some of all of the output data will be used to prime the stream, input
+- data may be zero.
+- @see PaStreamCallbackFlags
+-*/
+-#define paPrimingOutput    ((PaStreamCallbackFlags) 0x00000010)
+-
+-/**
+- Allowable return values for the PaStreamCallback.
+- @see PaStreamCallback
+-*/
+-typedef enum PaStreamCallbackResult
+-{
+-    paContinue=0,
+-    paComplete=1,
+-    paAbort=2
+-} PaStreamCallbackResult;
+-
+-
+-/**
+- Functions of type PaStreamCallback are implemented by PortAudio clients.
+- They consume, process or generate audio in response to requests from an
+- active PortAudio stream.
+-     
+- @param input and @param output are arrays of interleaved samples,
+- the format, packing and number of channels used by the buffers are
+- determined by parameters to Pa_OpenStream().
+-     
+- @param frameCount The number of sample frames to be processed by
+- the stream callback.
+-
+- @param timeInfo The time in seconds when the first sample of the input
+- buffer was received at the audio input, the time in seconds when the first
+- sample of the output buffer will begin being played at the audio output, and
+- the time in seconds when the stream callback was called.
+- See also Pa_GetStreamTime()
+-
+- @param statusFlags Flags indicating whether input and/or output buffers
+- have been inserted or will be dropped to overcome underflow or overflow
+- conditions.
+-
+- @param userData The value of a user supplied pointer passed to
+- Pa_OpenStream() intended for storing synthesis data etc.
+-
+- @return
+- The stream callback should return one of the values in the
+- PaStreamCallbackResult enumeration. To ensure that the callback continues
+- to be called, it should return paContinue (0). Either paComplete or paAbort
+- can be returned to finish stream processing, after either of these values is
+- returned the callback will not be called again. If paAbort is returned the
+- stream will finish as soon as possible. If paComplete is returned, the stream
+- will continue until all buffers generated by the callback have been played.
+- This may be useful in applications such as soundfile players where a specific
+- duration of output is required. However, it is not necessary to utilise this
+- mechanism as Pa_StopStream(), Pa_AbortStream() or Pa_CloseStream() can also
+- be used to stop the stream. The callback must always fill the entire output
+- buffer irrespective of its return value.
+-
+- @see Pa_OpenStream, Pa_OpenDefaultStream
+-
+- @note With the exception of Pa_GetStreamCpuLoad() it is not permissable to call
+- PortAudio API functions from within the stream callback.
+-*/
+-typedef int PaStreamCallback(
+-    const void *input, void *output,
+-    unsigned long frameCount,
+-    const PaStreamCallbackTimeInfo* timeInfo,
+-    PaStreamCallbackFlags statusFlags,
+-    void *userData );
+-
+-
+-/** Opens a stream for either input, output or both.
+-     
+- @param stream The address of a PaStream pointer which will receive
+- a pointer to the newly opened stream.
+-     
+- @param inputParameters A structure that describes the input parameters used by
+- the opened stream. See PaStreamParameters for a description of these parameters.
+- inputParameters must be NULL for output-only streams.
+-
+- @param outputParameters A structure that describes the output parameters used by
+- the opened stream. See PaStreamParameters for a description of these parameters.
+- outputParameters must be NULL for input-only streams.
+- 
+- @param sampleRate The desired sampleRate. For full-duplex streams it is the
+- sample rate for both input and output
+-     
+- @param framesPerBuffer The number of frames passed to the stream callback
+- function, or the preferred block granularity for a blocking read/write stream.
+- The special value paFramesPerBufferUnspecified (0) may be used to request that
+- the stream callback will recieve an optimal (and possibly varying) number of
+- frames based on host requirements and the requested latency settings.
+- Note: With some host APIs, the use of non-zero framesPerBuffer for a callback
+- stream may introduce an additional layer of buffering which could introduce
+- additional latency. PortAudio guarantees that the additional latency
+- will be kept to the theoretical minimum however, it is strongly recommended
+- that a non-zero framesPerBuffer value only be used when your algorithm
+- requires a fixed number of frames per stream callback.
+- 
+- @param streamFlags Flags which modify the behaviour of the streaming process.
+- This parameter may contain a combination of flags ORed together. Some flags may
+- only be relevant to certain buffer formats.
+-     
+- @param streamCallback A pointer to a client supplied function that is responsible
+- for processing and filling input and output buffers. If this parameter is NULL
+- the stream will be opened in 'blocking read/write' mode. In blocking mode,
+- the client can receive sample data using Pa_ReadStream and write sample data
+- using Pa_WriteStream, the number of samples that may be read or written
+- without blocking is returned by Pa_GetStreamReadAvailable and
+- Pa_GetStreamWriteAvailable respectively.
+-
+- @param userData A client supplied pointer which is passed to the stream callback
+- function. It could for example, contain a pointer to instance data necessary
+- for processing the audio buffers. This parameter is ignored if streamCallback
+- is NULL.
+-     
+- @return
+- Upon success Pa_OpenStream() returns paNoError and places a pointer to a
+- valid PaStream in the stream argument. The stream is inactive (stopped).
+- If a call to Pa_OpenStream() fails, a non-zero error code is returned (see
+- PaError for possible error codes) and the value of stream is invalid.
+-
+- @see PaStreamParameters, PaStreamCallback, Pa_ReadStream, Pa_WriteStream,
+- Pa_GetStreamReadAvailable, Pa_GetStreamWriteAvailable
+-*/
+-PaError Pa_OpenStream( PaStream** stream,
+-                       const PaStreamParameters *inputParameters,
+-                       const PaStreamParameters *outputParameters,
+-                       double sampleRate,
+-                       unsigned long framesPerBuffer,
+-                       PaStreamFlags streamFlags,
+-                       PaStreamCallback *streamCallback,
+-                       void *userData );
+-
+-
+-/** A simplified version of Pa_OpenStream() that opens the default input
+- and/or output devices.
+-
+- @param stream The address of a PaStream pointer which will receive
+- a pointer to the newly opened stream.
+- 
+- @param numInputChannels  The number of channels of sound that will be supplied
+- to the stream callback or returned by Pa_ReadStream. It can range from 1 to
+- the value of maxInputChannels in the PaDeviceInfo record for the default input
+- device. If 0 the stream is opened as an output-only stream.
+-
+- @param numOutputChannels The number of channels of sound to be delivered to the
+- stream callback or passed to Pa_WriteStream. It can range from 1 to the value
+- of maxOutputChannels in the PaDeviceInfo record for the default output dvice.
+- If 0 the stream is opened as an output-only stream.
+-
+- @param sampleFormat The sample format of both the input and output buffers
+- provided to the callback or passed to and from Pa_ReadStream and Pa_WriteStream.
+- sampleFormat may be any of the formats described by the PaSampleFormat
+- enumeration.
+- 
+- @param sampleRate Same as Pa_OpenStream parameter of the same name.
+- @param framesPerBuffer Same as Pa_OpenStream parameter of the same name.
+- @param streamCallback Same as Pa_OpenStream parameter of the same name.
+- @param userData Same as Pa_OpenStream parameter of the same name.
+-
+- @return As for Pa_OpenStream
+-
+- @see Pa_OpenStream, PaStreamCallback
+-*/
+-PaError Pa_OpenDefaultStream( PaStream** stream,
+-                              int numInputChannels,
+-                              int numOutputChannels,
+-                              PaSampleFormat sampleFormat,
+-                              double sampleRate,
+-                              unsigned long framesPerBuffer,
+-                              PaStreamCallback *streamCallback,
+-                              void *userData );
+-
+-
+-/** Closes an audio stream. If the audio stream is active it
+- discards any pending buffers as if Pa_AbortStream() had been called.
+-*/
+-PaError Pa_CloseStream( PaStream *stream );
+-
+-
+-/** Functions of type PaStreamFinishedCallback are implemented by PortAudio 
+- clients. They can be registered with a stream using the Pa_SetStreamFinishedCallback
+- function. Once registered they are called when the stream becomes inactive
+- (ie once a call to Pa_StopStream() will not block).
+- A stream will become inactive after the stream callback returns non-zero,
+- or when Pa_StopStream or Pa_AbortStream is called. For a stream providing audio
+- output, if the stream callback returns paComplete, or Pa_StopStream is called,
+- the stream finished callback will not be called until all generated sample data
+- has been played.
+- 
+- @param userData The userData parameter supplied to Pa_OpenStream()
+-
+- @see Pa_SetStreamFinishedCallback
+-*/
+-typedef void PaStreamFinishedCallback( void *userData );
+-
+-
+-/** Register a stream finished callback function which will be called when the 
+- stream becomes inactive. See the description of PaStreamFinishedCallback for 
+- further details about when the callback will be called.
+-
+- @param stream a pointer to a PaStream that is in the stopped state - if the
+- stream is not stopped, the stream's finished callback will remain unchanged 
+- and an error code will be returned.
+-
+- @param streamFinishedCallback a pointer to a function with the same signature
+- as PaStreamFinishedCallback, that will be called when the stream becomes
+- inactive. Passing NULL for this parameter will un-register a previously
+- registered stream finished callback function.
+-
+- @return on success returns paNoError, otherwise an error code indicating the cause
+- of the error.
+-
+- @see PaStreamFinishedCallback
+-*/
+-PaError Pa_SetStreamFinishedCallback( PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback ); 
+-
+-
+-/** Commences audio processing.
+-*/
+-PaError Pa_StartStream( PaStream *stream );
+-
+-
+-/** Terminates audio processing. It waits until all pending
+- audio buffers have been played before it returns.
+-*/
+-PaError Pa_StopStream( PaStream *stream );
+-
+-
+-/** Terminates audio processing immediately without waiting for pending
+- buffers to complete.
+-*/
+-PaError Pa_AbortStream( PaStream *stream );
+-
+-
+-/** Determine whether the stream is stopped.
+- A stream is considered to be stopped prior to a successful call to
+- Pa_StartStream and after a successful call to Pa_StopStream or Pa_AbortStream.
+- If a stream callback returns a value other than paContinue the stream is NOT
+- considered to be stopped.
+-
+- @return Returns one (1) when the stream is stopped, zero (0) when
+- the stream is running or, a PaErrorCode (which are always negative) if
+- PortAudio is not initialized or an error is encountered.
+-
+- @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive
+-*/
+-PaError Pa_IsStreamStopped( PaStream *stream );
+-
+-
+-/** Determine whether the stream is active.
+- A stream is active after a successful call to Pa_StartStream(), until it
+- becomes inactive either as a result of a call to Pa_StopStream() or
+- Pa_AbortStream(), or as a result of a return value other than paContinue from
+- the stream callback. In the latter case, the stream is considered inactive
+- after the last buffer has finished playing.
+-
+- @return Returns one (1) when the stream is active (ie playing or recording
+- audio), zero (0) when not playing or, a PaErrorCode (which are always negative)
+- if PortAudio is not initialized or an error is encountered.
+-
+- @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamStopped
+-*/
+-PaError Pa_IsStreamActive( PaStream *stream );
+-
+-
+-
+-/** A structure containing unchanging information about an open stream.
+- @see Pa_GetStreamInfo
+-*/
+-
+-typedef struct PaStreamInfo
+-{
+-    /** this is struct version 1 */
+-    int structVersion;
+-
+-    /** The input latency of the stream in seconds. This value provides the most
+-     accurate estimate of input latency available to the implementation. It may
+-     differ significantly from the suggestedLatency value passed to Pa_OpenStream().
+-     The value of this field will be zero (0.) for output-only streams.
+-     @see PaTime
+-    */
+-    PaTime inputLatency;
+-
+-    /** The output latency of the stream in seconds. This value provides the most
+-     accurate estimate of output latency available to the implementation. It may
+-     differ significantly from the suggestedLatency value passed to Pa_OpenStream().
+-     The value of this field will be zero (0.) for input-only streams.
+-     @see PaTime
+-    */
+-    PaTime outputLatency;
+-
+-    /** The sample rate of the stream in Hertz (samples per second). In cases
+-     where the hardware sample rate is inaccurate and PortAudio is aware of it,
+-     the value of this field may be different from the sampleRate parameter
+-     passed to Pa_OpenStream(). If information about the actual hardware sample
+-     rate is not available, this field will have the same value as the sampleRate
+-     parameter passed to Pa_OpenStream().
+-    */
+-    double sampleRate;
+-    
+-} PaStreamInfo;
+-
+-
+-/** Retrieve a pointer to a PaStreamInfo structure containing information
+- about the specified stream.
+- @return A pointer to an immutable PaStreamInfo structure. If the stream
+- parameter invalid, or an error is encountered, the function returns NULL.
+-
+- @param stream A pointer to an open stream previously created with Pa_OpenStream.
+-
+- @note PortAudio manages the memory referenced by the returned pointer,
+- the client must not manipulate or free the memory. The pointer is only
+- guaranteed to be valid until the specified stream is closed.
+-
+- @see PaStreamInfo
+-*/
+-const PaStreamInfo* Pa_GetStreamInfo( PaStream *stream );
+-
+-
+-/** Determine the current time for the stream according to the same clock used
+- to generate buffer timestamps. This time may be used for syncronising other
+- events to the audio stream, for example synchronizing audio to MIDI.
+-                                        
+- @return The stream's current time in seconds, or 0 if an error occurred.
+-
+- @see PaTime, PaStreamCallback
+-*/
+-PaTime Pa_GetStreamTime( PaStream *stream );
+-
+-
+-/** Retrieve CPU usage information for the specified stream.
+- The "CPU Load" is a fraction of total CPU time consumed by a callback stream's
+- audio processing routines including, but not limited to the client supplied
+- stream callback. This function does not work with blocking read/write streams.
+-
+- This function may be called from the stream callback function or the
+- application.
+-     
+- @return
+- A floating point value, typically between 0.0 and 1.0, where 1.0 indicates
+- that the stream callback is consuming the maximum number of CPU cycles possible
+- to maintain real-time operation. A value of 0.5 would imply that PortAudio and
+- the stream callback was consuming roughly 50% of the available CPU time. The
+- return value may exceed 1.0. A value of 0.0 will always be returned for a
+- blocking read/write stream, or if an error occurrs.
+-*/
+-double Pa_GetStreamCpuLoad( PaStream* stream );
+-
+-
+-/** Read samples from an input stream. The function doesn't return until
+- the entire buffer has been filled - this may involve waiting for the operating
+- system to supply the data.
+-
+- @param stream A pointer to an open stream previously created with Pa_OpenStream.
+- 
+- @param buffer A pointer to a buffer of sample frames. The buffer contains
+- samples in the format specified by the inputParameters->sampleFormat field
+- used to open the stream, and the number of channels specified by
+- inputParameters->numChannels. If non-interleaved samples were requested,
+- buffer is a pointer to the first element of an array of non-interleaved
+- buffer pointers, one for each channel.
+-
+- @param frames The number of frames to be read into buffer. This parameter
+- is not constrained to a specific range, however high performance applications
+- will want to match this parameter to the framesPerBuffer parameter used
+- when opening the stream.
+-
+- @return On success PaNoError will be returned, or PaInputOverflowed if input
+- data was discarded by PortAudio after the previous call and before this call.
+-*/
+-PaError Pa_ReadStream( PaStream* stream,
+-                       void *buffer,
+-                       unsigned long frames );
+-
+-
+-/** Write samples to an output stream. This function doesn't return until the
+- entire buffer has been consumed - this may involve waiting for the operating
+- system to consume the data.
+-
+- @param stream A pointer to an open stream previously created with Pa_OpenStream.
+-
+- @param buffer A pointer to a buffer of sample frames. The buffer contains
+- samples in the format specified by the outputParameters->sampleFormat field
+- used to open the stream, and the number of channels specified by
+- outputParameters->numChannels. If non-interleaved samples were requested,
+- buffer is a pointer to the first element of an array of non-interleaved
+- buffer pointers, one for each channel.
+-
+- @param frames The number of frames to be written from buffer. This parameter
+- is not constrained to a specific range, however high performance applications
+- will want to match this parameter to the framesPerBuffer parameter used
+- when opening the stream.
+-
+- @return On success PaNoError will be returned, or paOutputUnderflowed if
+- additional output data was inserted after the previous call and before this
+- call.
+-*/
+-PaError Pa_WriteStream( PaStream* stream,
+-                        const void *buffer,
+-                        unsigned long frames );
+-
+-
+-/** Retrieve the number of frames that can be read from the stream without
+- waiting.
+-
+- @return Returns a non-negative value representing the maximum number of frames
+- that can be read from the stream without blocking or busy waiting or, a
+- PaErrorCode (which are always negative) if PortAudio is not initialized or an
+- error is encountered.
+-*/
+-signed long Pa_GetStreamReadAvailable( PaStream* stream );
+-
+-
+-/** Retrieve the number of frames that can be written to the stream without
+- waiting.
+-
+- @return Returns a non-negative value representing the maximum number of frames
+- that can be written to the stream without blocking or busy waiting or, a
+- PaErrorCode (which are always negative) if PortAudio is not initialized or an
+- error is encountered.
+-*/
+-signed long Pa_GetStreamWriteAvailable( PaStream* stream );
+-
+-
+-/* Miscellaneous utilities */
+-
+-
+-/** Retrieve the size of a given sample format in bytes.
+-
+- @return The size in bytes of a single sample in the specified format,
+- or paSampleFormatNotSupported if the format is not supported.
+-*/
+-PaError Pa_GetSampleSize( PaSampleFormat format );
+-
+-
+-/** Put the caller to sleep for at least 'msec' milliseconds. This function is
+- provided only as a convenience for authors of portable code (such as the tests
+- and examples in the PortAudio distribution.)
+-
+- The function may sleep longer than requested so don't rely on this for accurate
+- musical timing.
+-*/
+-void Pa_Sleep( long msec );
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif /* __cplusplus */
+-#endif /* PORTAUDIO_H */
+diff -ruN src/output/portAudio.orig/portAudio.pro src/output/portAudio/portAudio.pro
+--- src/output/portAudio.orig/portAudio.pro	2007-12-05 20:39:28.000000000 +0800
++++ src/output/portAudio/portAudio.pro	2008-06-01 06:43:49.000000000 +0800
+@@ -26,20 +26,17 @@
+ HEADERS = portAudioOutput.h
+ 
+ 
+-unix:linux-g++ {
++unix:freebsd-g++ {
+     INCLUDEPATH += PortAudio/os/unix
+ 
+-    DEFINES += PA_USE_ALSA \
+-               PA_USEOSS
++    DEFINES += PA_USE_OSS
+         
+-    SOURCES += PortAudio/hostapi/alsa/pa_linux_alsa.c \
+-               PortAudio/hostapi/oss/recplay.c \
++	SOURCES += PortAudio/hostapi/oss/recplay.c \
+                PortAudio/hostapi/oss/pa_unix_oss.c \
+                PortAudio/os/unix/pa_unix_util.c \
+                PortAudio/os/unix/pa_unix_hostapis.c
+     
+-    LIBS += -lasound \
+-            -lrt \
++	LIBS +=	-lrt \
+             -lm
+ }
+ 
+diff -ruN src/output/portAudio.orig/portAudioOutput.cpp src/output/portAudio/portAudioOutput.cpp
+--- src/output/portAudio.orig/portAudioOutput.cpp	2007-12-05 20:39:28.000000000 +0800
++++ src/output/portAudio/portAudioOutput.cpp	2008-06-01 06:53:10.000000000 +0800
+@@ -143,7 +143,7 @@
+         p.device = Pa_HostApiDeviceIndexToDeviceIndex( Pa_HostApiTypeIdToHostApiIndex( paCoreAudio ), deviceID++ );
+ #endif
+ #ifdef Q_WS_X11
+-        p.device = Pa_HostApiDeviceIndexToDeviceIndex( Pa_HostApiTypeIdToHostApiIndex( paALSA ), deviceID++ );
++        p.device = Pa_HostApiDeviceIndexToDeviceIndex( Pa_HostApiTypeIdToHostApiIndex( paOSS ), deviceID++ );
+ #endif
+ 
+         p.suggestedLatency = Pa_GetDeviceInfo( p.device )->defaultHighOutputLatency;
+@@ -176,7 +176,7 @@
+         #endif
+ 
+         #ifdef Q_WS_X11
+-        << "Alsa"
++        << "OSS"
+         #endif
+ 
+         #ifdef Q_WS_MAC
+diff -ruN src/output/portAudio.orig/portAudioOutput.h src/output/portAudio/portAudioOutput.h
+--- src/output/portAudio.orig/portAudioOutput.h	2007-12-05 20:39:28.000000000 +0800
++++ src/output/portAudio/portAudioOutput.h	2008-06-01 06:43:49.000000000 +0800
+@@ -27,7 +27,7 @@
+ #define PORT_AUDIO_OUTPUT_H
+ 
+ #include "interfaces/OutputInterface.h"
+-#include "portaudio.h"
++#include "pa_audio.h"
+ #include <QObject>
+ #include <QMutex>
+ 
diff -ruN last.fm/files/patch-src_rtaudioplayback-rtaudioplayback.cpp last.fm-1.4.0/files/patch-src_rtaudioplayback-rtaudioplayback.cpp
--- last.fm/files/patch-src_rtaudioplayback-rtaudioplayback.cpp	2007-09-15 03:02:22.000000000 +0800
+++ last.fm-1.4.0/files/patch-src_rtaudioplayback-rtaudioplayback.cpp	1970-01-01 08:00:00.000000000 +0800
@@ -1,20 +0,0 @@
---- src/output/RtAudio/rtaudioplayback.cpp.orig	2007-09-13 13:46:07.000000000 +0200
-+++ src/output/RtAudio/rtaudioplayback.cpp	2007-09-14 20:54:41.000000000 +0200
-@@ -157,7 +157,7 @@
-     #endif
- 
-     #ifdef Q_WS_X11
--        l << "Alsa";
-+        l << "OSS";
-     #endif
- 
-     #ifdef Q_WS_MAC
-@@ -280,7 +280,7 @@
-         int card = internalSoundCardID( The::settings().soundCard() );
- 
-         #ifdef Q_WS_X11
--        api = RtAudio::LINUX_ALSA;
-+        api = RtAudio::LINUX_OSS;
-         #endif
- 
-         RtAudioDeviceInfo info = m_audio->getDeviceInfo( card );
diff -ruN last.fm/files/patch-src_rtaudioplayback-rtaudioplayback.pro last.fm-1.4.0/files/patch-src_rtaudioplayback-rtaudioplayback.pro
--- last.fm/files/patch-src_rtaudioplayback-rtaudioplayback.pro	2007-07-14 16:09:39.000000000 +0800
+++ last.fm-1.4.0/files/patch-src_rtaudioplayback-rtaudioplayback.pro	1970-01-01 08:00:00.000000000 +0800
@@ -1,13 +0,0 @@
---- src/output/RtAudio/RtAudio.pro.orig	Sat Jul 14 09:37:38 2007
-+++ src/output/RtAudio/RtAudio.pro	Sat Jul 14 09:37:51 2007
-@@ -8,10 +8,6 @@
- HEADERS = rtaudioplayback.h
- SOURCES = rtaudioplayback.cpp rtaudio/RtAudio.cpp
- 
--unix:!mac {
--    LIBS += -lasound
--}
--
- win32 {
-    LIBS += -lwinmm -Ldsound -ldsound -lole32 -lgdi32 -luser32 -lshfolder
-    INCLUDEPATH += dsound
diff -ruN last.fm/files/patch-src_rtaudioplayback_rtaudio-RtAudio.cpp last.fm-1.4.0/files/patch-src_rtaudioplayback_rtaudio-RtAudio.cpp
--- last.fm/files/patch-src_rtaudioplayback_rtaudio-RtAudio.cpp	2007-07-14 16:09:39.000000000 +0800
+++ last.fm-1.4.0/files/patch-src_rtaudioplayback_rtaudio-RtAudio.cpp	1970-01-01 08:00:00.000000000 +0800
@@ -1,11 +0,0 @@
---- src/output/RtAudio/rtaudio/RtAudio.cpp.orig	Tue Feb  6 00:07:31 2007
-+++ src/output/RtAudio/rtaudio/RtAudio.cpp	Tue Feb  6 00:08:41 2007
-@@ -42,7 +42,7 @@
- #include <QtGui>
- 
- #ifdef Q_WS_X11
--    #define __LINUX_ALSA__
-+    #define __LINUX_OSS__
- #endif
- #ifdef Q_WS_FREEBSD
-     #define __LINUX_OSS__
diff -ruN last.fm/pkg-plist last.fm-1.4.0/pkg-plist
--- last.fm/pkg-plist	2007-09-15 03:02:22.000000000 +0800
+++ last.fm-1.4.0/pkg-plist	2008-06-01 12:46:49.000000000 +0800
@@ -1,119 +1,110 @@
 bin/last.fm
-%%DATADIR%%/LastFMHelper
-%%DATADIR%%/data/about.png
-%%DATADIR%%/data/about_generic.png
-%%DATADIR%%/data/about_mac.png
-%%DATADIR%%/data/app_55.png
+%%DATADIR%%/data/install_mac.png
+%%DATADIR%%/data/logo.png
+%%DATADIR%%/data/buttons/action_upload_hover.png
 %%DATADIR%%/data/buttons/action_edit.png
-%%DATADIR%%/data/buttons/action_edit_down.png
+%%DATADIR%%/data/buttons/action_tag_hover.png
+%%DATADIR%%/data/buttons/myprofile.png
 %%DATADIR%%/data/buttons/action_edit_hover.png
-%%DATADIR%%/data/buttons/action_tag.png
+%%DATADIR%%/data/buttons/action_edit_down.png
 %%DATADIR%%/data/buttons/action_tag_down.png
-%%DATADIR%%/data/buttons/action_tag_hover.png
-%%DATADIR%%/data/buttons/action_upload.png
 %%DATADIR%%/data/buttons/action_upload_down.png
-%%DATADIR%%/data/buttons/action_upload_hover.png
-%%DATADIR%%/data/buttons/addToMyPlaylist.png
-%%DATADIR%%/data/buttons/ban.png
 %%DATADIR%%/data/buttons/closebutton.png
-%%DATADIR%%/data/buttons/love.png
-%%DATADIR%%/data/buttons/myprofile.png
-%%DATADIR%%/data/buttons/play.png
-%%DATADIR%%/data/buttons/recommend.png
+%%DATADIR%%/data/buttons/action_tag.png
 %%DATADIR%%/data/buttons/scrobble.png
-%%DATADIR%%/data/buttons/skip.png
-%%DATADIR%%/data/buttons/skip_active.png
-%%DATADIR%%/data/buttons/stop.png
-%%DATADIR%%/data/buttons/stop_active.png
-%%DATADIR%%/data/buttons/tag.png
+%%DATADIR%%/data/buttons/action_upload.png
+%%DATADIR%%/data/wizard_generic.png
+%%DATADIR%%/data/slider_right.png
+%%DATADIR%%/data/speaker_low.png
+%%DATADIR%%/data/icons/my_bookmarks.png
+%%DATADIR%%/data/icons/recently_loved16.png
+%%DATADIR%%/data/icons/my_neighbours.png
+%%DATADIR%%/data/icons/my_tags.png
+%%DATADIR%%/data/icons/systray_mac.png
+%%DATADIR%%/data/icons/options_account.png
+%%DATADIR%%/data/icons/user_red32_collapse.png
+%%DATADIR%%/data/icons/user_black32_expand.png
+%%DATADIR%%/data/icons/user_black.png
+%%DATADIR%%/data/icons/user_green.png
+%%DATADIR%%/data/icons/user_red.png
 %%DATADIR%%/data/icons/as.ico
-%%DATADIR%%/data/icons/as.png
+%%DATADIR%%/data/icons/personal_radio.png
+%%DATADIR%%/data/icons/recent_tracks.png
+%%DATADIR%%/data/icons/user_blue32_collapse.png
+%%DATADIR%%/data/icons/neighbour_radio.png
+%%DATADIR%%/data/icons/user_blue32_expand.png
+%%DATADIR%%/data/icons/user_orange.png
+%%DATADIR%%/data/icons/orangeprofile24.png
+%%DATADIR%%/data/icons/icon_radio.png
 %%DATADIR%%/data/icons/blackprofile24.png
-%%DATADIR%%/data/icons/blueprofile24.png
+%%DATADIR%%/data/icons/scrobble16.png
+%%DATADIR%%/data/icons/user_disabled.png
+%%DATADIR%%/data/icons/icon_tag.png
 %%DATADIR%%/data/icons/buy_album.png
+%%DATADIR%%/data/icons/scrobbling_graphic.png
+%%DATADIR%%/data/icons/redprofile24.png
+%%DATADIR%%/data/icons/user_purple.png
+%%DATADIR%%/data/icons/as.png
+%%DATADIR%%/data/icons/user_black32_collapse.png
+%%DATADIR%%/data/icons/blueprofile24.png
 %%DATADIR%%/data/icons/buy_track.png
+%%DATADIR%%/data/icons/icon_user.png
+%%DATADIR%%/data/icons/history32.png
+%%DATADIR%%/data/icons/recently_banned.png
+%%DATADIR%%/data/icons/user_green32_collapse.png
 %%DATADIR%%/data/icons/greenprofile24.png
+%%DATADIR%%/data/icons/user_orange32_expand.png
 %%DATADIR%%/data/icons/history16.png
-%%DATADIR%%/data/icons/history32.png
-%%DATADIR%%/data/icons/icon_radio.png
-%%DATADIR%%/data/icons/icon_tag.png
-%%DATADIR%%/data/icons/icon_track.png
-%%DATADIR%%/data/icons/icon_user.png
-%%DATADIR%%/data/icons/lastfm.icns
+%%DATADIR%%/data/icons/user_red32_expand.png
 %%DATADIR%%/data/icons/loved_radio.png
-%%DATADIR%%/data/icons/my_bookmarks.png
-%%DATADIR%%/data/icons/my_friends.png
-%%DATADIR%%/data/icons/my_neighbours.png
-%%DATADIR%%/data/icons/my_tags.png
-%%DATADIR%%/data/icons/neighbour_radio.png
-%%DATADIR%%/data/icons/options_account.png
-%%DATADIR%%/data/icons/options_connection.png
 %%DATADIR%%/data/icons/options_mediadevices.png
 %%DATADIR%%/data/icons/options_radio.png
+%%DATADIR%%/data/icons/user_green32_expand.png
 %%DATADIR%%/data/icons/options_scrobbling.png
-%%DATADIR%%/data/icons/orangeprofile24.png
-%%DATADIR%%/data/icons/personal_radio.png
-%%DATADIR%%/data/icons/qt_cross.png
-%%DATADIR%%/data/icons/recent_tracks.png
-%%DATADIR%%/data/icons/recently_banned.png
-%%DATADIR%%/data/icons/recently_banned16.png
+%%DATADIR%%/data/icons/options_connection.png
 %%DATADIR%%/data/icons/recently_loved.png
-%%DATADIR%%/data/icons/recently_loved16.png
-%%DATADIR%%/data/icons/recommended_radio.png
-%%DATADIR%%/data/icons/redprofile24.png
-%%DATADIR%%/data/icons/scrobble16.png
-%%DATADIR%%/data/icons/scrobbling_graphic.png
-%%DATADIR%%/data/icons/systray_mac.png
-%%DATADIR%%/data/icons/user_black.png
-%%DATADIR%%/data/icons/user_black32_collapse.png
-%%DATADIR%%/data/icons/user_black32_expand.png
 %%DATADIR%%/data/icons/user_blue.png
-%%DATADIR%%/data/icons/user_blue32_collapse.png
-%%DATADIR%%/data/icons/user_blue32_expand.png
-%%DATADIR%%/data/icons/user_disabled.png
-%%DATADIR%%/data/icons/user_green.png
-%%DATADIR%%/data/icons/user_green32_collapse.png
-%%DATADIR%%/data/icons/user_green32_expand.png
-%%DATADIR%%/data/icons/user_orange.png
 %%DATADIR%%/data/icons/user_orange32_collapse.png
-%%DATADIR%%/data/icons/user_orange32_expand.png
-%%DATADIR%%/data/icons/user_purple.png
-%%DATADIR%%/data/icons/user_red.png
-%%DATADIR%%/data/icons/user_red32_collapse.png
-%%DATADIR%%/data/icons/user_red32_expand.png
-%%DATADIR%%/data/install_mac.png
-%%DATADIR%%/data/logo.png
-%%DATADIR%%/data/no_artist.gif
-%%DATADIR%%/data/no_cover.gif
-%%DATADIR%%/data/progress.mng
+%%DATADIR%%/data/icons/recently_banned16.png
+%%DATADIR%%/data/icons/recommended_radio.png
+%%DATADIR%%/data/icons/qt_cross.png
+%%DATADIR%%/data/icons/my_friends.png
+%%DATADIR%%/data/icons/icon_track.png
 %%DATADIR%%/data/progress_active.mng
-%%DATADIR%%/data/slider_knob.png
-%%DATADIR%%/data/slider_left.png
-%%DATADIR%%/data/slider_middle.png
-%%DATADIR%%/data/slider_right.png
-%%DATADIR%%/data/speaker_high.png
-%%DATADIR%%/data/speaker_low.png
+%%DATADIR%%/data/about_mac.png
+%%DATADIR%%/data/app_55.png
+%%DATADIR%%/data/about_generic.png
 %%DATADIR%%/data/watermark.png
 %%DATADIR%%/data/wizard.png
-%%DATADIR%%/data/wizard_generic.png
+%%DATADIR%%/data/no_cover.gif
+%%DATADIR%%/data/slider_middle.png
+%%DATADIR%%/data/slider_left.png
+%%DATADIR%%/data/about.png
+%%DATADIR%%/data/progress.mng
 %%DATADIR%%/data/wizard_mac.png
+%%DATADIR%%/data/slider_knob.png
+%%DATADIR%%/data/no_artist.gif
+%%DATADIR%%/data/speaker_high.png
 %%DATADIR%%/last.fm
-%%DATADIR%%/last.fm.app
-%%DATADIR%%/last.fm.bak
+%%DATADIR%%/libLastFmFingerprint.so
+%%DATADIR%%/libLastFmFingerprint.so.1
+%%DATADIR%%/libLastFmFingerprint.so.1.0
+%%DATADIR%%/libLastFmFingerprint.so.1.0.0
 %%DATADIR%%/libLastFmTools.so
 %%DATADIR%%/libLastFmTools.so.1
 %%DATADIR%%/libLastFmTools.so.1.0
 %%DATADIR%%/libLastFmTools.so.1.0.0
+%%DATADIR%%/libMoose.so
+%%DATADIR%%/libMoose.so.1
+%%DATADIR%%/libMoose.so.1.0
+%%DATADIR%%/libMoose.so.1.0.0
 %%DATADIR%%/services/libsrv_httpinput.so
-%%DATADIR%%/services/libsrv_itunesdevice.so
-%%DATADIR%%/services/libsrv_mp3transcode.so
-%%DATADIR%%/services/libsrv_rtaudioplayback.so
+%%DATADIR%%/services/libsrv_madtranscode.so
+%%DATADIR%%/services/libsrv_output_portaudio.so
 share/services/lastfm.protocol
 @dirrmtry share/services
 @dirrm %%DATADIR%%/services
- at dirrm %%DATADIR%%/extensions
 @dirrm %%DATADIR%%/data/icons
- at dirrm %%DATADIR%%/data/i18n
 @dirrm %%DATADIR%%/data/buttons
 @dirrm %%DATADIR%%/data
 @dirrm %%DATADIR%%
--- last.fm-1.4.0.diff ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list