@@ -13,7 +13,7 @@ RANLIB = @RANLIB@ | |||
DEFS = @debug@ | |||
DEFS += @audio_apis@ | |||
CFLAGS = @cflags@ -Iinclude | |||
CFLAGS = @CFLAGS@ -Iinclude | |||
CFLAGS += @warn@ | |||
all : $(LIBRARY) | |||
@@ -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 << ")!"; | |||
@@ -4938,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; | |||
@@ -5132,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, | |||
@@ -5191,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; | |||
@@ -6911,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; | |||
@@ -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 | |||
@@ -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, | |||
@@ -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 | |||
@@ -3,8 +3,13 @@ RtAudio - a set of C++ classes that provide a common API for realtime audio inpu | |||
By Gary P. Scavone, 2001-2008. | |||
v4.0.4: () | |||
- added functionality to allow getDeviceInfo() to work in ALSA on 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 | |||
@@ -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" | |||
@@ -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@ | |||