| @@ -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@ | |||