Can the audiostreamer buffer size be read when it is set to Auto with an ASIO driver?
Show older comments
In the new 'audiostreamer' object (introduced in R2025a), the DeviceBufferSize can be set to "auto", for which the documentation says "For ASIO, it is generally fixed by the device (see asiosettings)". Is there any way of reading back what buffer size it has gotten from the ASIO driver? That would be very useful in optimizing my code
Answers (1)
Hi Glenn,
I understand you want to know how to determine the actual buffer size being used by the "audiostreamer" object when set to "auto" with an ASIO driver.
To do this, you should first check which ASIO devices are available on your system by running the following command:
>> devices = audiostreamer.getAudioDevices()
Once you know the exact device name, you can use MATLAB’s ASIO settings functionality to query the current buffer size that the device is using. This buffer size is determined by the ASIO driver and is what audiostreamer will use in "auto" mode. The buffer size information can be accessed through the "asiosettings" command interface in MATLAB.
You can refer the following document to know more about audio I/O buffering:
Hope this helps!
5 Comments
Jimmy Lapierre
on 15 Dec 2025
Edited: Jimmy Lapierre
on 15 Dec 2025
Ayush is correct. For ASIO, the frame size in "auto" mode is specified by the ASIO device driver. Here's how I'd do it (at least with the latest version) :
>> as = audiostreamer(Driver="ASIO")
>> asiosettings(as)
I'm curious to know if there's a use-case for doing this entirely programmatically, but I don't think we know the "auto" frame size until the device has started playing and/or recording. Also, some drivers like DirectSound have buffer sizes that change every frame when set to "auto" mode.
Glenn Kubota
on 15 Dec 2025
Jimmy Lapierre
on 17 Dec 2025
Have you looked into the callback options? You could process audio the moment it becomes available, and this also keeps the Command Window unblocked. RecorderFcn can be any matlab function that takes two inputs, the audiostreamer object and the event description struct. That function can process the recorded and play the result. Just for illustration, the following displays how many samples were read in the callback.
as = audiostreamer(Mode="full-duplex",Driver="ASIO")
as.RecorderFcn = @(obj,ev)disp(size(read(as),1)) % display how many samples were read
record(as)
...
stop(as)
Glenn Kubota
on 18 Dec 2025
Jimmy Lapierre
on 18 Dec 2025
Hi Glenn, I have recently seen the doubling issue. It happens with some brands but not others, so I suspect it's a device driver issue, but we found a way to avoid the problem with a change on our end. This will ship in 26a and a 25b update.
Categories
Find more on Audio I/O and Waveform Generation in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!