projects
/
rtaudio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge pull request #207 from mcwissink/capture-flags-wasapi
[rtaudio.git]
/
RtAudio.cpp
diff --git
a/RtAudio.cpp
b/RtAudio.cpp
index 9c7f1546e56e4fafb1d9bc193159242caf1cd269..e0713a0d58b7f3496f25884fa473c9e4b9bf2a5c 100644
(file)
--- a/
RtAudio.cpp
+++ b/
RtAudio.cpp
@@
-7,10
+7,11
@@
and OSS), Macintosh OS X (CoreAudio and Jack), and Windows
(DirectSound, ASIO and WASAPI) operating systems.
and OSS), Macintosh OS X (CoreAudio and Jack), and Windows
(DirectSound, ASIO and WASAPI) operating systems.
+ RtAudio GitHub site: https://github.com/thestk/rtaudio
RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/
RtAudio: realtime audio i/o C++ classes
RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/
RtAudio: realtime audio i/o C++ classes
- Copyright (c) 2001-201
7
Gary P. Scavone
+ Copyright (c) 2001-201
9
Gary P. Scavone
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
@@
-38,7
+39,7
@@
*/
/************************************************************************/
*/
/************************************************************************/
-// RtAudio: Version 5.
0
.0
+// RtAudio: Version 5.
1
.0
#include "RtAudio.h"
#include <iostream>
#include "RtAudio.h"
#include <iostream>
@@
-1905,7
+1906,10
@@
bool RtApiCore :: callbackEvent( AudioDeviceID deviceId,
unlock:
//MUTEX_UNLOCK( &stream_.mutex );
unlock:
//MUTEX_UNLOCK( &stream_.mutex );
- RtApi::tickStreamTime();
+ // Make sure to only tick duplex stream time once if using two devices
+ if ( stream_.mode != DUPLEX || (stream_.mode == DUPLEX && handle->id[0] != handle->id[1] && deviceId == handle->id[0] ) )
+ RtApi::tickStreamTime();
+
return SUCCESS;
}
return SUCCESS;
}
@@
-3841,8
+3845,9
@@
public:
relOutIndex += bufferSize_;
}
relOutIndex += bufferSize_;
}
- // "in" index can end on the "out" index but cannot begin at it
- if ( inIndex_ < relOutIndex && inIndexEnd > relOutIndex ) {
+ // the "IN" index CAN BEGIN at the "OUT" index
+ // the "IN" index CANNOT END at the "OUT" index
+ if ( inIndex_ < relOutIndex && inIndexEnd >= relOutIndex ) {
return false; // not enough space between "in" index and "out" index
}
return false; // not enough space between "in" index and "out" index
}
@@
-3902,7
+3907,8
@@
public:
relInIndex += bufferSize_;
}
relInIndex += bufferSize_;
}
- // "out" index can begin at and end on the "in" index
+ // the "OUT" index CANNOT BEGIN at the "IN" index
+ // the "OUT" index CAN END at the "IN" index
if ( outIndex_ <= relInIndex && outIndexEnd > relInIndex ) {
return false; // not enough space between "out" index and "in" index
}
if ( outIndex_ <= relInIndex && outIndexEnd > relInIndex ) {
return false; // not enough space between "out" index and "in" index
}
@@
-4843,7
+4849,7
@@
bool RtApiWasapi::probeDeviceOpen( unsigned int device, StreamMode mode, unsigne
stream_.doConvertBuffer[mode] = true;
if ( stream_.doConvertBuffer[mode] )
stream_.doConvertBuffer[mode] = true;
if ( stream_.doConvertBuffer[mode] )
- setConvertInfo( mode,
0
);
+ setConvertInfo( mode,
firstChannel
);
// Allocate necessary internal buffers
bufferBytes = stream_.nUserChannels[mode] * stream_.bufferSize * formatBytes( stream_.userFormat );
// Allocate necessary internal buffers
bufferBytes = stream_.nUserChannels[mode] * stream_.bufferSize * formatBytes( stream_.userFormat );
@@
-4935,7
+4941,7
@@
void RtApiWasapi::wasapiThread()
// declare local stream variables
RtAudioCallback callback = ( RtAudioCallback ) stream_.callbackInfo.callback;
BYTE* streamBuffer = NULL;
// declare local stream variables
RtAudioCallback callback = ( RtAudioCallback ) stream_.callbackInfo.callback;
BYTE* streamBuffer = NULL;
-
unsigned long
captureFlags = 0;
+
DWORD
captureFlags = 0;
unsigned int bufferFrameCount = 0;
unsigned int numFramesPadding = 0;
unsigned int convBufferSize = 0;
unsigned int bufferFrameCount = 0;
unsigned int numFramesPadding = 0;
unsigned int convBufferSize = 0;
@@
-5239,6
+5245,9
@@
void RtApiWasapi::wasapiThread()
captureFlags & AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY ? RTAUDIO_INPUT_OVERFLOW : 0,
stream_.callbackInfo.userData );
captureFlags & AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY ? RTAUDIO_INPUT_OVERFLOW : 0,
stream_.callbackInfo.userData );
+ // tick stream time
+ RtApi::tickStreamTime();
+
// Handle return value from callback
if ( callbackResult == 1 ) {
// instantiate a thread to stop this thread
// Handle return value from callback
if ( callbackResult == 1 ) {
// instantiate a thread to stop this thread
@@
-5447,9
+5456,6
@@
void RtApiWasapi::wasapiThread()
// unsetting the callbackPulled flag lets the stream know that
// the audio device is ready for another callback output buffer.
callbackPulled = false;
// unsetting the callbackPulled flag lets the stream know that
// the audio device is ready for another callback output buffer.
callbackPulled = false;
-
- // tick stream time
- RtApi::tickStreamTime();
}
}
}
}
@@
-8790,6
+8796,8
@@
bool RtApiPulse::probeDeviceOpen( unsigned int device, StreamMode mode,
stream_.doConvertBuffer[mode] = true;
if ( stream_.nUserChannels[mode] < stream_.nDeviceChannels[mode] )
stream_.doConvertBuffer[mode] = true;
stream_.doConvertBuffer[mode] = true;
if ( stream_.nUserChannels[mode] < stream_.nDeviceChannels[mode] )
stream_.doConvertBuffer[mode] = true;
+ if ( stream_.userInterleaved != stream_.deviceInterleaved[mode] )
+ stream_.doConvertBuffer[mode] = true;
// Allocate necessary internal buffers.
bufferBytes = stream_.nUserChannels[mode] * *bufferSize * formatBytes( stream_.userFormat );
// Allocate necessary internal buffers.
bufferBytes = stream_.nUserChannels[mode] * *bufferSize * formatBytes( stream_.userFormat );