mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-11-07 15:36:20 -05:00
gnu: portaudio: Patch for Audacity compatibility.
* gnu/packages/audio.scm (portaudio): Add a patch for Audacity compatibility. * gnu/packages/patches/portaudio-audacity-compat.patch: New file. * gnu-system.am (dist_patch_DATA): Add it.
This commit is contained in:
parent
41fd23334d
commit
b47be0214d
3 changed files with 341 additions and 3 deletions
|
@ -499,6 +499,7 @@ dist_patch_DATA = \
|
|||
gnu/packages/patches/pingus-sdl-libs-config.patch \
|
||||
gnu/packages/patches/plotutils-libpng-jmpbuf.patch \
|
||||
gnu/packages/patches/polkit-drop-test.patch \
|
||||
gnu/packages/patches/portaudio-audacity-compat.patch \
|
||||
gnu/packages/patches/procps-make-3.82.patch \
|
||||
gnu/packages/patches/pulseaudio-fix-mult-test.patch \
|
||||
gnu/packages/patches/pybugz-encode-error.patch \
|
||||
|
|
|
@ -1088,15 +1088,28 @@ (define-public portaudio
|
|||
(string-map (lambda (c) (if (char=? c #\.) #\_ c)) version)
|
||||
".tgz"))
|
||||
(sha256
|
||||
(base32 "0mwddk4qzybaf85wqfhxqlf0c5im9il8z03rd4n127k8y2jj9q4g"))))
|
||||
(base32 "0mwddk4qzybaf85wqfhxqlf0c5im9il8z03rd4n127k8y2jj9q4g"))
|
||||
(patches (list (search-patch "portaudio-audacity-compat.patch")))))
|
||||
(build-system gnu-build-system)
|
||||
(inputs
|
||||
;; TODO: Add ASIHPI.
|
||||
`(("alsa-lib" ,alsa-lib)
|
||||
("jack" ,jack-2)))
|
||||
(native-inputs
|
||||
`(("pkg-config" ,pkg-config)))
|
||||
(arguments '(#:tests? #f)) ;no 'check' target
|
||||
`(("autoconf" ,autoconf)
|
||||
("automake" ,automake)
|
||||
("libtool" ,libtool)
|
||||
("pkg-config" ,pkg-config)))
|
||||
(arguments
|
||||
'(#:phases
|
||||
;; Autoreconf is necessary because the audacity-compat patch modifies
|
||||
;; .in files.
|
||||
(alist-cons-after
|
||||
'unpack 'autoreconf
|
||||
(lambda _
|
||||
(zero? (system* "autoreconf" "-vif")))
|
||||
%standard-phases)
|
||||
#:tests? #f)) ;no 'check' target
|
||||
(home-page "http://www.portaudio.com/")
|
||||
(synopsis "Audio I/O library")
|
||||
(description
|
||||
|
|
324
gnu/packages/patches/portaudio-audacity-compat.patch
Normal file
324
gnu/packages/patches/portaudio-audacity-compat.patch
Normal file
|
@ -0,0 +1,324 @@
|
|||
Description: Add features needed to make portmixer work with audacity.
|
||||
Author: Audacity Team
|
||||
Last-Update: 2011-12-07
|
||||
|
||||
See <http://music.columbia.edu/pipermail/portaudio/2015-March/016611.html>.
|
||||
|
||||
--- a/include/pa_win_ds.h
|
||||
+++ b/include/pa_win_ds.h
|
||||
@@ -89,6 +89,21 @@
|
||||
|
||||
}PaWinDirectSoundStreamInfo;
|
||||
|
||||
+/** Retrieve the GUID of the input device.
|
||||
+
|
||||
+ @param stream The stream to query.
|
||||
+
|
||||
+ @return A pointer to the GUID, or NULL if none.
|
||||
+*/
|
||||
+LPGUID PaWinDS_GetStreamInputGUID( PaStream* s );
|
||||
+
|
||||
+/** Retrieve the GUID of the output device.
|
||||
+
|
||||
+ @param stream The stream to query.
|
||||
+
|
||||
+ @return A pointer to the GUID, or NULL if none.
|
||||
+*/
|
||||
+LPGUID PaWinDS_GetStreamOutputGUID( PaStream* s );
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
--- a/include/portaudio.h
|
||||
+++ b/include/portaudio.h
|
||||
@@ -1146,6 +1146,15 @@
|
||||
signed long Pa_GetStreamWriteAvailable( PaStream* stream );
|
||||
|
||||
|
||||
+/** Retrieve the host type handling an open stream.
|
||||
+
|
||||
+ @return Returns a non-negative value representing the host API type
|
||||
+ handling an open stream or, a PaErrorCode (which are always negative)
|
||||
+ if PortAudio is not initialized or an error is encountered.
|
||||
+*/
|
||||
+PaHostApiTypeId Pa_GetStreamHostApiType( PaStream* stream );
|
||||
+
|
||||
+
|
||||
/* Miscellaneous utilities */
|
||||
|
||||
|
||||
--- /dev/null
|
||||
+++ b/include/pa_unix_oss.h
|
||||
@@ -0,0 +1,104 @@
|
||||
+#ifndef PA_UNIX_OSS_H
|
||||
+#define PA_UNIX_OSS_H
|
||||
+
|
||||
+/*
|
||||
+ * $Id: portaudio.patch,v 1.10 2009-06-30 04:52:59 llucius Exp $
|
||||
+ * PortAudio Portable Real-Time Audio Library
|
||||
+ * OSS-specific extensions
|
||||
+ *
|
||||
+ * Copyright (c) 1999-2000 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.
|
||||
+ *
|
||||
+ * 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.
|
||||
+ *
|
||||
+ * 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.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+/** @file
|
||||
+ * OSS-specific PortAudio API extension header file.
|
||||
+ */
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+const char *PaOSS_GetStreamInputDevice( PaStream *s );
|
||||
+
|
||||
+const char *PaOSS_GetStreamOutputDevice( PaStream *s );
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#endif
|
||||
+#ifndef PA_UNIX_OSS_H
|
||||
+#define PA_UNIX_OSS_H
|
||||
+
|
||||
+/*
|
||||
+ * $Id: portaudio.patch,v 1.10 2009-06-30 04:52:59 llucius Exp $
|
||||
+ * PortAudio Portable Real-Time Audio Library
|
||||
+ * OSS-specific extensions
|
||||
+ *
|
||||
+ * Copyright (c) 1999-2000 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.
|
||||
+ *
|
||||
+ * 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.
|
||||
+ *
|
||||
+ * 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.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+/** @file
|
||||
+ * OSS-specific PortAudio API extension header file.
|
||||
+ */
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+extern "C" {
|
||||
+#endif
|
||||
+
|
||||
+const char *PaOSS_GetStreamInputDevice( PaStream *s );
|
||||
+
|
||||
+const char *PaOSS_GetStreamOutputDevice( PaStream *s );
|
||||
+
|
||||
+#ifdef __cplusplus
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#endif
|
||||
--- a/src/common/pa_front.c
|
||||
+++ b/src/common/pa_front.c
|
||||
@@ -1216,8 +1216,10 @@
|
||||
hostApiInputParametersPtr, hostApiOutputParametersPtr,
|
||||
sampleRate, framesPerBuffer, streamFlags, streamCallback, userData );
|
||||
|
||||
- if( result == paNoError )
|
||||
+ if( result == paNoError ) {
|
||||
AddOpenStream( *stream );
|
||||
+ PA_STREAM_REP(*stream)->hostApiType = hostApi->info.type;
|
||||
+ }
|
||||
|
||||
|
||||
PA_LOGAPI(("Pa_OpenStream returned:\n" ));
|
||||
@@ -1729,6 +1731,32 @@
|
||||
return result;
|
||||
}
|
||||
|
||||
+PaHostApiTypeId Pa_GetStreamHostApiType( PaStream* stream )
|
||||
+{
|
||||
+ PaError error = PaUtil_ValidateStreamPointer( stream );
|
||||
+ PaHostApiTypeId result;
|
||||
+
|
||||
+#ifdef PA_LOG_API_CALLS
|
||||
+ PaUtil_DebugPrint("Pa_GetStreamHostApiType called:\n" );
|
||||
+ PaUtil_DebugPrint("\tPaStream* stream: 0x%p\n", stream );
|
||||
+#endif
|
||||
+
|
||||
+ if( error == paNoError )
|
||||
+ {
|
||||
+ result = PA_STREAM_REP(stream)->hostApiType;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ result = (PaHostApiTypeId) error;
|
||||
+ }
|
||||
+
|
||||
+#ifdef PA_LOG_API_CALLS
|
||||
+ PaUtil_DebugPrint("Pa_GetStreamHostApiType returned:\n" );
|
||||
+ PaUtil_DebugPrint("\tPaError: %d ( %s )\n\n", result, Pa_GetErrorText( result ) );
|
||||
+#endif
|
||||
+
|
||||
+ return result;
|
||||
+}
|
||||
|
||||
PaError Pa_GetSampleSize( PaSampleFormat format )
|
||||
{
|
||||
--- a/src/common/pa_stream.c
|
||||
+++ b/src/common/pa_stream.c
|
||||
@@ -93,6 +93,8 @@
|
||||
streamRepresentation->streamInfo.inputLatency = 0.;
|
||||
streamRepresentation->streamInfo.outputLatency = 0.;
|
||||
streamRepresentation->streamInfo.sampleRate = 0.;
|
||||
+
|
||||
+ streamRepresentation->hostApiType = 0;
|
||||
}
|
||||
|
||||
|
||||
--- a/src/common/pa_stream.h
|
||||
+++ b/src/common/pa_stream.h
|
||||
@@ -152,6 +152,7 @@
|
||||
PaStreamFinishedCallback *streamFinishedCallback;
|
||||
void *userData;
|
||||
PaStreamInfo streamInfo;
|
||||
+ PaHostApiTypeId hostApiType;
|
||||
} PaUtilStreamRepresentation;
|
||||
|
||||
|
||||
--- a/src/hostapi/coreaudio/pa_mac_core_blocking.c
|
||||
+++ b/src/hostapi/coreaudio/pa_mac_core_blocking.c
|
||||
@@ -66,6 +66,9 @@
|
||||
#ifdef MOSX_USE_NON_ATOMIC_FLAG_BITS
|
||||
# define OSAtomicOr32( a, b ) ( (*(b)) |= (a) )
|
||||
# define OSAtomicAnd32( a, b ) ( (*(b)) &= (a) )
|
||||
+#elif MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_3
|
||||
+# define OSAtomicOr32( a, b ) BitOrAtomic( a, (UInt32 *) b )
|
||||
+# define OSAtomicAnd32( a, b ) BitAndAtomic( a, (UInt32 *) b )
|
||||
#else
|
||||
# include <libkern/OSAtomic.h>
|
||||
#endif
|
||||
--- a/src/hostapi/alsa/pa_linux_alsa.c
|
||||
+++ b/src/hostapi/alsa/pa_linux_alsa.c
|
||||
@@ -611,6 +611,7 @@
|
||||
StreamDirection streamDir;
|
||||
|
||||
snd_pcm_channel_area_t *channelAreas; /* Needed for channel adaption */
|
||||
+ int card;
|
||||
} PaAlsaStreamComponent;
|
||||
|
||||
/* Implementation specific stream structure */
|
||||
@@ -1806,6 +1807,7 @@
|
||||
{
|
||||
PaError result = paNoError;
|
||||
PaSampleFormat userSampleFormat = params->sampleFormat, hostSampleFormat = paNoError;
|
||||
+ snd_pcm_info_t* pcmInfo;
|
||||
assert( params->channelCount > 0 );
|
||||
|
||||
/* Make sure things have an initial value */
|
||||
@@ -1826,6 +1828,9 @@
|
||||
self->device = params->device;
|
||||
|
||||
PA_ENSURE( AlsaOpen( &alsaApi->baseHostApiRep, params, streamDir, &self->pcm ) );
|
||||
+
|
||||
+ snd_pcm_info_alloca( &pcmInfo );
|
||||
+ self->card = snd_pcm_info_get_card( pcmInfo );
|
||||
self->nfds = alsa_snd_pcm_poll_descriptors_count( self->pcm );
|
||||
|
||||
PA_ENSURE( hostSampleFormat = PaUtil_SelectClosestAvailableFormat( GetAvailableFormats( self->pcm ), userSampleFormat ) );
|
||||
@@ -4519,9 +4524,7 @@
|
||||
/* XXX: More descriptive error? */
|
||||
PA_UNLESS( stream->capture.pcm, paDeviceUnavailable );
|
||||
|
||||
- alsa_snd_pcm_info_alloca( &pcmInfo );
|
||||
- PA_ENSURE( alsa_snd_pcm_info( stream->capture.pcm, pcmInfo ) );
|
||||
- *card = alsa_snd_pcm_info_get_card( pcmInfo );
|
||||
+ *card = stream->capture.card;
|
||||
|
||||
error:
|
||||
return result;
|
||||
@@ -4537,9 +4540,7 @@
|
||||
/* XXX: More descriptive error? */
|
||||
PA_UNLESS( stream->playback.pcm, paDeviceUnavailable );
|
||||
|
||||
- alsa_snd_pcm_info_alloca( &pcmInfo );
|
||||
- PA_ENSURE( alsa_snd_pcm_info( stream->playback.pcm, pcmInfo ) );
|
||||
- *card = alsa_snd_pcm_info_get_card( pcmInfo );
|
||||
+ *card = stream->playback.card;
|
||||
|
||||
error:
|
||||
return result;
|
||||
--- a/src/hostapi/oss/pa_unix_oss.c
|
||||
+++ b/src/hostapi/oss/pa_unix_oss.c
|
||||
@@ -2028,3 +2028,26 @@
|
||||
#endif
|
||||
}
|
||||
|
||||
+const char *PaOSS_GetStreamInputDevice( PaStream* s )
|
||||
+{
|
||||
+ PaOssStream *stream = (PaOssStream*)s;
|
||||
+
|
||||
+ if( stream->capture )
|
||||
+ {
|
||||
+ return stream->capture->devName;
|
||||
+ }
|
||||
+
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
+const char *PaOSS_GetStreamOutputDevice( PaStream* s )
|
||||
+{
|
||||
+ PaOssStream *stream = (PaOssStream*)s;
|
||||
+
|
||||
+ if( stream->playback )
|
||||
+ {
|
||||
+ return stream->playback->devName;
|
||||
+ }
|
||||
+
|
||||
+ return NULL;
|
||||
+}
|
||||
--- a/configure.in
|
||||
+++ b/configure.in
|
||||
@@ -365,6 +365,7 @@
|
||||
DLL_LIBS="$DLL_LIBS -lossaudio"
|
||||
LIBS="$LIBS -lossaudio"
|
||||
fi
|
||||
+ INCLUDES="$INCLUDES pa_unix_oss.h"
|
||||
AC_DEFINE(PA_USE_OSS,1)
|
||||
fi
|
||||
|
Loading…
Reference in a new issue