summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Sinclair <sinclair@music.mcgill.ca>2013-10-11 01:52:34 +0200
committerStephen Sinclair <sinclair@music.mcgill.ca>2013-10-11 01:52:34 +0200
commitc3ceaf900358dbd7e2fe375d2114d658e27b29dc (patch)
tree3c6cd0d7c9b9a00449390a05feb4e3e697bc545a
parent1c8dcf10265b9e8205dc94e6575d06fccbd6c07a (diff)
parent1d3b191e05c76800fd3c30675f101e9dc5b2f5f1 (diff)
Merge 4.0.4 into releases
-rw-r--r--Makefile.in2
-rw-r--r--RtAudio.cpp52
-rw-r--r--RtAudio.h8
-rw-r--r--configure.ac8
-rw-r--r--doc/doxygen/Doxyfile2
-rw-r--r--doc/doxygen/acknowledge.txt1
-rw-r--r--doc/doxygen/footer.html2
-rw-r--r--doc/doxygen/probe.txt18
-rw-r--r--doc/doxygen/tutorial.txt2
-rw-r--r--doc/release.txt11
-rw-r--r--install2
-rw-r--r--readme4
-rw-r--r--rtaudio-config.in2
-rw-r--r--tests/Makefile.in2
14 files changed, 83 insertions, 33 deletions
diff --git a/Makefile.in b/Makefile.in
index 57df82b..23a444f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -13,7 +13,7 @@ RANLIB = @RANLIB@
DEFS = @debug@
DEFS += @audio_apis@
-CFLAGS = @cflags@ -Iinclude
+CFLAGS = @CFLAGS@ -Iinclude
CFLAGS += @warn@
all : $(LIBRARY)
diff --git a/RtAudio.cpp b/RtAudio.cpp
index cdefda4..8d15a34 100644
--- a/RtAudio.cpp
+++ b/RtAudio.cpp
@@ -10,7 +10,7 @@
RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/
RtAudio: realtime audio i/o C++ classes
- Copyright (c) 2001-2007 Gary P. Scavone
+ Copyright (c) 2001-2008 Gary P. Scavone
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
@@ -38,7 +38,7 @@
*/
/************************************************************************/
-// RtAudio: Version 4.0.3
+// RtAudio: Version 4.0.4
#include "RtAudio.h"
#include <iostream>
@@ -1816,8 +1816,8 @@ bool RtApiJack :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne
// Count the available ports containing the client name as device
// channels. Jack "input ports" equal RtAudio output channels.
unsigned int nChannels = 0;
- unsigned long flag = JackPortIsOutput;
- if ( mode == INPUT ) flag = JackPortIsInput;
+ unsigned long flag = JackPortIsInput;
+ if ( mode == INPUT ) flag = JackPortIsOutput;
ports = jack_get_ports( client, deviceName.c_str(), NULL, flag );
if ( ports ) {
while ( ports[ nChannels ] ) nChannels++;
@@ -3683,8 +3683,10 @@ bool RtApiDs :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigned
while ( dsPointerLeadTime * 2U > (DWORD) bufferBytes )
bufferBytes *= 2;
- // Set cooperative level to DSSCL_EXCLUSIVE
- result = output->SetCooperativeLevel( hWnd, DSSCL_EXCLUSIVE );
+ // Set cooperative level to DSSCL_EXCLUSIVE ... sound stops when window focus changes.
+ //result = output->SetCooperativeLevel( hWnd, DSSCL_EXCLUSIVE );
+ // Set cooperative level to DSSCL_PRIORITY ... sound remains when window focus changes.
+ result = output->SetCooperativeLevel( hWnd, DSSCL_PRIORITY );
if ( FAILED( result ) ) {
output->Release();
errorStream_ << "RtApiDs::probeDeviceOpen: error (" << getErrorString( result ) << ") setting cooperative level (" << dsinfo.name << ")!";
@@ -3725,6 +3727,7 @@ bool RtApiDs :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigned
ZeroMemory( &bufferDescription, sizeof( DSBUFFERDESC ) );
bufferDescription.dwSize = sizeof( DSBUFFERDESC );
bufferDescription.dwFlags = ( DSBCAPS_STICKYFOCUS |
+ DSBCAPS_GLOBALFOCUS |
DSBCAPS_GETCURRENTPOSITION2 |
DSBCAPS_LOCHARDWARE ); // Force hardware mixing
bufferDescription.dwBufferBytes = bufferBytes;
@@ -3735,6 +3738,7 @@ bool RtApiDs :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigned
result = output->CreateSoundBuffer( &bufferDescription, &buffer, NULL );
if ( FAILED( result ) ) {
bufferDescription.dwFlags = ( DSBCAPS_STICKYFOCUS |
+ DSBCAPS_GLOBALFOCUS |
DSBCAPS_GETCURRENTPOSITION2 |
DSBCAPS_LOCSOFTWARE ); // Force software mixing
result = output->CreateSoundBuffer( &bufferDescription, &buffer, NULL );
@@ -3995,6 +3999,8 @@ bool RtApiDs :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigned
goto error;
}
+ // Boost DS thread priority
+ SetThreadPriority( (HANDLE) stream_.callbackInfo.thread, THREAD_PRIORITY_HIGHEST );
return SUCCESS;
error:
@@ -4934,6 +4940,18 @@ RtAudio::DeviceInfo RtApiAlsa :: getDeviceInfo( unsigned int device )
foundDevice:
+ // If a stream is already open, we cannot probe the stream devices.
+ // Thus, use the saved results.
+ if ( stream_.state != STREAM_CLOSED &&
+ ( stream_.device[0] == device || stream_.device[1] == device ) ) {
+ if ( device >= devices_.size() ) {
+ errorText_ = "RtApiAlsa::getDeviceInfo: device ID was not present before stream was opened.";
+ error( RtError::WARNING );
+ return info;
+ }
+ return devices_[ device ];
+ }
+
int openMode = SND_PCM_ASYNC;
snd_pcm_stream_t stream;
snd_pcm_info_t *pcminfo;
@@ -5128,6 +5146,16 @@ RtAudio::DeviceInfo RtApiAlsa :: getDeviceInfo( unsigned int device )
return info;
}
+void RtApiAlsa :: saveDeviceInfo( void )
+{
+ devices_.clear();
+
+ unsigned int nDevices = getDeviceCount();
+ devices_.resize( nDevices );
+ for ( unsigned int i=0; i<nDevices; i++ )
+ devices_[i] = getDeviceInfo( i );
+}
+
bool RtApiAlsa :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
unsigned int firstChannel, unsigned int sampleRate,
RtAudioFormat format, unsigned int *bufferSize,
@@ -5164,6 +5192,7 @@ bool RtApiAlsa :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne
if ( subdevice < 0 ) break;
if ( nDevices == device ) {
sprintf( name, "hw:%d,%d", card, subdevice );
+ snd_ctl_close( chandle );
goto foundDevice;
}
nDevices++;
@@ -5186,6 +5215,12 @@ bool RtApiAlsa :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne
foundDevice:
+ // The getDeviceInfo() function will not work for a device that is
+ // already open. Thus, we'll probe the system before opening a
+ // stream and save the results for use by getDeviceInfo().
+ if ( mode == OUTPUT || ( mode == INPUT && stream_.mode != OUTPUT ) ) // only do once
+ this->saveDeviceInfo();
+
snd_pcm_stream_t stream;
if ( mode == OUTPUT )
stream = SND_PCM_STREAM_PLAYBACK;
@@ -6014,6 +6049,7 @@ unsigned int RtApiOss :: getDeviceCount( void )
return 0;
}
+ close( mixerfd );
return sysinfo.numaudios;
}
@@ -6874,11 +6910,11 @@ extern "C" void *ossCallbackHandler( void *ptr )
// message printing.
void RtApi :: error( RtError::Type type )
{
+ errorStream_.str(""); // clear the ostringstream
if ( type == RtError::WARNING && showWarnings_ == true )
std::cerr << '\n' << errorText_ << "\n\n";
else
throw( RtError( errorText_, type ) );
- errorStream_.str(""); // clear the ostringstream
}
void RtApi :: verifyStream()
@@ -6905,7 +6941,7 @@ void RtApi :: clearStreamInfo()
stream_.callbackInfo.userData = 0;
stream_.callbackInfo.isRunning = false;
for ( int i=0; i<2; i++ ) {
- stream_.device[i] = 0;
+ stream_.device[i] = 11111;
stream_.doConvertBuffer[i] = false;
stream_.deviceInterleaved[i] = true;
stream_.doByteSwap[i] = false;
diff --git a/RtAudio.h b/RtAudio.h
index 5acc9a5..8696262 100644
--- a/RtAudio.h
+++ b/RtAudio.h
@@ -10,7 +10,7 @@
RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/
RtAudio: realtime audio i/o C++ classes
- Copyright (c) 2001-2007 Gary P. Scavone
+ Copyright (c) 2001-2008 Gary P. Scavone
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
@@ -42,7 +42,7 @@
\file RtAudio.h
*/
-// RtAudio: Version 4.0.3
+// RtAudio: Version 4.0.4
#ifndef __RTAUDIO_H
#define __RTAUDIO_H
@@ -617,7 +617,7 @@ protected:
#endif
RtApiStream()
- :apiHandle(0), deviceBuffer(0) {}
+ :apiHandle(0), deviceBuffer(0) { device[0] = 11111; device[1] = 11111; }
};
typedef signed short Int16;
@@ -867,6 +867,8 @@ public:
private:
+ std::vector<RtAudio::DeviceInfo> devices_;
+ void saveDeviceInfo( void );
bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
unsigned int firstChannel, unsigned int sampleRate,
RtAudioFormat format, unsigned int *bufferSize,
diff --git a/configure.ac b/configure.ac
index 5949a5e..027dae0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -30,13 +30,15 @@ AC_ARG_ENABLE(debug,
[AC_SUBST( debug, [] ) AC_SUBST( cflags, [-O2] ) AC_SUBST( object_path, [Release] ) AC_MSG_RESULT(no)])
# Checks for functions
-AC_CHECK_FUNC(gettimeofday, [cflags=$cflags" -DHAVE_GETTIMEOFDAY"], )
+AC_CHECK_FUNC(gettimeofday, [CFLAGS=$CFLAGS" -DHAVE_GETTIMEOFDAY"], )
# Check compiler and use -Wall if gnu.
if [test $GXX = "yes" ;] then
AC_SUBST( warn, [-Wall] )
fi
+CFLAGS="$CFLAGS $cflags"
+
# Checks for package options and external software
AC_CANONICAL_HOST
AC_MSG_CHECKING(for audio API)
@@ -45,7 +47,7 @@ case $host in
AC_SUBST( sound_api, [-D__LINUX_OSS__] )
AC_MSG_RESULT(using OSS)
AC_SUBST( audio_apis, [-D__LINUX_OSS__] )
- cflags=$cflags" -lossaudio"
+ CFLAGS=$CFLAGS" -lossaudio"
AC_CHECK_LIB(pthread, pthread_create, , AC_MSG_ERROR(RtAudio requires the pthread library!))
;;
@@ -56,7 +58,7 @@ case $host in
TEMP_LIBS=$LIBS
AC_CHECK_LIB(jack, jack_client_new, , AC_MSG_ERROR(JACK support requires the jack library!))
AC_CHECK_LIB(asound, snd_pcm_open, , AC_MSG_ERROR(Jack support also requires the asound library!))
- LIBS="`pkg-config --cflags --libs jack` $TEMP_LIBS -lasound"
+ LIBS="`pkg-config --CFLAGS --libs jack` $TEMP_LIBS -lasound"
audio_apis="-D__UNIX_JACK__"
fi
diff --git a/doc/doxygen/Doxyfile b/doc/doxygen/Doxyfile
index 0b72a2a..be6e89c 100644
--- a/doc/doxygen/Doxyfile
+++ b/doc/doxygen/Doxyfile
@@ -23,7 +23,7 @@ PROJECT_NAME = RtAudio
# This could be handy for archiving the generated documentation or
# if some version control system is used.
-PROJECT_NUMBER = 4.0.3
+PROJECT_NUMBER = 4.0.4
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
diff --git a/doc/doxygen/acknowledge.txt b/doc/doxygen/acknowledge.txt
index 1c42191..f56836d 100644
--- a/doc/doxygen/acknowledge.txt
+++ b/doc/doxygen/acknowledge.txt
@@ -2,6 +2,7 @@
Many thanks to the following people for providing bug fixes and improvements:
<UL>
+<LI>Anders Ervik</LI>
<LI>Robin Davies (Windows DS and ASIO)</LI>
<LI>Ryan Williams (Windows non-MS compiler ASIO support)</LI>
<LI>Ed Wildgoose (Linux ALSA and Jack)</LI>
diff --git a/doc/doxygen/footer.html b/doc/doxygen/footer.html
index c10c2dd..6d2718d 100644
--- a/doc/doxygen/footer.html
+++ b/doc/doxygen/footer.html
@@ -1,7 +1,7 @@
<HR>
<table><tr><td><img src="../images/mcgill.gif" width=165></td>
- <td>&copy;2001-2007 Gary P. Scavone, McGill University. All Rights Reserved.<br>Maintained by <a href="http://www.music.mcgill.ca/~gary/">Gary P. Scavone</a>.</td></tr>
+ <td>&copy;2001-2008 Gary P. Scavone, McGill University. All Rights Reserved.<br>Maintained by <a href="http://www.music.mcgill.ca/~gary/">Gary P. Scavone</a>.</td></tr>
</table>
</BODY>
diff --git a/doc/doxygen/probe.txt b/doc/doxygen/probe.txt
index 9fce97b..1352f51 100644
--- a/doc/doxygen/probe.txt
+++ b/doc/doxygen/probe.txt
@@ -37,15 +37,15 @@ The RtAudio::DeviceInfo structure is defined in RtAudio.h and provides a variety
\code
typedef struct RtAudio::DeviceInfo {
- bool probed; // true if the device capabilities were successfully probed.
- std::string name; // Character string device identifier.
- int outputChannels; // Maximum output channels supported by device.
- int inputChannels; // Maximum input channels supported by device.
- int duplexChannels; // Maximum simultaneous input/output channels supported by device.
- bool isDefaultOutput; // true if this is the default output device.
- bool isDefaultInput; // true if this is the default input device.
- std::vector<int> sampleRates; // Supported sample rates.
- RtAudioFormat nativeFormats; // Bit mask of supported data formats.
+ bool probed; // true if the device capabilities were successfully probed.
+ std::string name; // Character string device identifier.
+ unsigned int outputChannels; // Maximum output channels supported by device.
+ unsigned int inputChannels; // Maximum input channels supported by device.
+ unsigned int duplexChannels; // Maximum simultaneous input/output channels supported by device.
+ bool isDefaultOutput; // true if this is the default output device.
+ bool isDefaultInput; // true if this is the default input device.
+ std::vector<unsigned int> sampleRates; // Supported sample rates.
+ RtAudioFormat nativeFormats; // Bit mask of supported data formats.
};
\endcode
diff --git a/doc/doxygen/tutorial.txt b/doc/doxygen/tutorial.txt
index 89bb948..906afe3 100644
--- a/doc/doxygen/tutorial.txt
+++ b/doc/doxygen/tutorial.txt
@@ -32,7 +32,7 @@ Devices are now re-enumerated every time the RtAudio::getDeviceCount(), RtAudio:
\section download Download
-Latest Release (7 December 2007): <A href="http://music.mcgill.ca/~gary/rtaudio/release/rtaudio-4.0.3.tar.gz">Version 4.0.3</A>
+Latest Release (24 January 2008): <A href="http://music.mcgill.ca/~gary/rtaudio/release/rtaudio-4.0.4.tar.gz">Version 4.0.4</A>
\section documentation Documentation Links
diff --git a/doc/release.txt b/doc/release.txt
index 1fa678d..4bccff8 100644
--- a/doc/release.txt
+++ b/doc/release.txt
@@ -1,6 +1,15 @@
RtAudio - a set of C++ classes that provide a common API for realtime audio input/output across Linux (native ALSA, JACK, and OSS), Macintosh OS X (CoreAudio and JACK), and Windows (DirectSound and ASIO) operating systems.
-By Gary P. Scavone, 2001-2007.
+By Gary P. Scavone, 2001-2008.
+
+v4.0.4: (24 January 2008)
+- added functionality to allow getDeviceInfo() to work in ALSA for an open device (like ASIO)
+- fixes in configure script
+- fixed clearing of error message stream in error()
+- fixed RtAudio::DeviceInfo description in "probing" documentation
+- memory leak fixes in ALSA and OSS
+- Jack in/out port flag fix
+- Windows changes for thread priority and GLOBALFOCUS
v4.0.3: (7 December 2007)
- added support for MinGW compiler to configure script
diff --git a/install b/install
index 89788be..8bdd0ca 100644
--- a/install
+++ b/install
@@ -1,6 +1,6 @@
RtAudio - a set of C++ classes which provide a common API for realtime audio input/output across Linux (native ALSA, JACK, and OSS), Macintosh OS X (CoreAudio and JACK), and Windows (DirectSound and ASIO) operating systems.
-By Gary P. Scavone, 2001-2007.
+By Gary P. Scavone, 2001-2008.
To configure and compile (on Unix systems and MinGW):
diff --git a/readme b/readme
index e9279ed..8228cd3 100644
--- a/readme
+++ b/readme
@@ -1,6 +1,6 @@
RtAudio - a set of C++ classes that provide a common API for realtime audio input/output across Linux (native ALSA, JACK, and OSS), Macintosh OS X (CoreAudio and JACK), and Windows (DirectSound and ASIO) operating systems.
-By Gary P. Scavone, 2001-2007.
+By Gary P. Scavone, 2001-2008.
This distribution of RtAudio contains the following:
@@ -34,7 +34,7 @@ LEGAL AND ETHICAL:
The RtAudio license is similar to the MIT License.
RtAudio: a set of realtime audio i/o C++ classes
- Copyright (c) 2001-2007 Gary P. Scavone
+ Copyright (c) 2001-2008 Gary P. Scavone
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
diff --git a/rtaudio-config.in b/rtaudio-config.in
index f950f4e..c689a98 100644
--- a/rtaudio-config.in
+++ b/rtaudio-config.in
@@ -9,7 +9,7 @@ CFLAGS="@audio_apis@"
if (test "x$1" == "x--libs") ; then
echo "$LIBRARY"
-elif (test "x$1" == "x--cflags") ; then
+elif (test "x$1" == "x--CFLAGS") ; then
echo "$CFLAGS"
else
echo "Unknown option: $1"
diff --git a/tests/Makefile.in b/tests/Makefile.in
index ec41447..059b5ce 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -13,7 +13,7 @@ OBJECTS = RtAudio.o @objects@
CC = @CXX@
DEFS = @debug@
DEFS += @audio_apis@
-CFLAGS = @cflags@
+CFLAGS = @CFLAGS@
CFLAGS += @warn@ -I$(INCLUDE) -I../include
LIBRARY = @LIBS@
LIBRARY += @frameworks@