FreeBSD Bugzilla – Attachment 87567 Details for
Bug 124177
[patch] audio/last.fm: update to 1.4.0.56102
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
last.fm-1.4.0.diff
last.fm-1.4.0.diff (text/plain), 112.75 KB, created by
darcsis
on 2008-06-01 06:40:02 UTC
(
hide
)
Description:
last.fm-1.4.0.diff
Filename:
MIME Type:
Creator:
darcsis
Created:
2008-06-01 06:40:02 UTC
Size:
112.75 KB
patch
obsolete
>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@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 >-@dirrm %%DATADIR%%/extensions > @dirrm %%DATADIR%%/data/icons >-@dirrm %%DATADIR%%/data/i18n > @dirrm %%DATADIR%%/data/buttons > @dirrm %%DATADIR%%/data > @dirrm %%DATADIR%%
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 124177
: 87567