diff --git a/libinterp/dldfcn/audiodevinfo.cc b/libinterp/dldfcn/audiodevinfo.cc --- a/libinterp/dldfcn/audiodevinfo.cc +++ b/libinterp/dldfcn/audiodevinfo.cc @@ -34,6 +34,7 @@ along with Octave; see the file COPYING. #include "Matrix.h" #include "mach-info.h" #include "oct-locbuf.h" +#include "oct-mutex.h" #include "quit.h" #include "unwind-prot.h" @@ -51,6 +52,8 @@ along with Octave; see the file COPYING. #include +static octave::mutex audiodev_lock; + PaSampleFormat bits_to_format (int bits) { @@ -1379,6 +1382,8 @@ portaudio_record_callback (const void *i const PaStreamCallbackTimeInfo *, PaStreamCallbackFlags, void *data) { + octave::autolock guard (audiodev_lock); + audiorecorder *recorder = static_cast (data); if (! recorder) @@ -1587,6 +1592,8 @@ audiorecorder::get_sample_number (void) unsigned int audiorecorder::get_total_samples (void) { + octave::autolock guard (audiodev_lock); + return left.size (); } @@ -1605,6 +1612,8 @@ audiorecorder::get_end_sample (void) void audiorecorder::reset_end_sample (void) { + octave::autolock guard (audiodev_lock); + set_end_sample (left.size ()); } @@ -1635,6 +1644,8 @@ audiorecorder::get_userdata (void) octave_value audiorecorder::getaudiodata (void) { + octave::autolock guard (audiodev_lock); + Matrix audio (2, left.size ()); for (unsigned int i = 0; i < left.size (); i++) diff --git a/scripts/audio/@audiorecorder/getaudiodata.m b/scripts/audio/@audiorecorder/getaudiodata.m --- a/scripts/audio/@audiorecorder/getaudiodata.m +++ b/scripts/audio/@audiorecorder/getaudiodata.m @@ -37,8 +37,10 @@ function data = getaudiodata (varargin) if (nargin == 1) data = __recorder_getaudiodata__ (struct (recorder).recorder); +# data = []; else data = __recorder_getaudiodata__ (struct (recorder).recorder); +# data = []; type = varargin{2}; switch (type) case "int16"