Browse Source

Various updates in ALSA for probing while device is open and in Windows for thread priority (gps).

tags/4.0.4
Gary Scavone Stephen Sinclair 16 years ago
parent
commit
ee94b95a99
7 changed files with 50 additions and 11 deletions
  1. +1
    -1
      Makefile.in
  2. +33
    -3
      RtAudio.cpp
  3. +4
    -2
      RtAudio.h
  4. +5
    -3
      configure.ac
  5. +5
    -0
      doc/release.txt
  6. +1
    -1
      rtaudio-config.in
  7. +1
    -1
      tests/Makefile.in

+ 1
- 1
Makefile.in View File

@@ -13,7 +13,7 @@ RANLIB = @RANLIB@

DEFS = @debug@
DEFS += @audio_apis@
CFLAGS = @cflags@ -Iinclude
CFLAGS = @CFLAGS@ -Iinclude
CFLAGS += @warn@

all : $(LIBRARY)


+ 33
- 3
RtAudio.cpp View File

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


+ 4
- 2
RtAudio.h View File

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


+ 5
- 3
configure.ac View File

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



+ 5
- 0
doc/release.txt View File

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


+ 1
- 1
rtaudio-config.in View File

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


+ 1
- 1
tests/Makefile.in View File

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


Loading…
Cancel
Save