Realtime audio input

版本 1.0.0.0 (2.4 KB) 作者: Trevor Agus
Realtime audio input, flexible and glitch-free.
1.5K 次下载
更新时间 2011/7/22

查看许可证

I explored different options for realtime audio input (see below for a summary) before having to settling for this option. Unfortunately this solution requires Windows and the Data Acquisition toolbox. I hope to be able to report at some point that this function has been superceded by something more generally useful, so please let me know if you come across something better.

Other possibilities:
PortAudio (http://www.portaudio.com/): seem to be the workhorse of audio input, but it's in C++, not Matlab code

PlayRec.m (http://www.playrec.co.uk/): An adaptation of PortAudio for Matlab. However, support seems to have ended around 2008, and I know several people who have spent many hours failing to compile it for more recent operating systems and/or Matlab versions.

PsychPortAudio (http://docs.psychtoolbox.org/PsychPortAudio): This may be the best option, although it requires PsychToolbox, which can be challenging to install itself. Can anyone confirm that PsychPortAudio works for realtime audio input?

In the meantime, the detailed function of tgrabaudio.m is described in its help section, copied below for convenience:

1/ Initialisation (mandatory)
tgrabaudio('start', [fs, [maxduration]])

fs = the sample-rate [default = 44100]
maxduration = the maximum delay (in seconds) that is considered an
acceptable build-up of audio samples. If this buffer is
exceeded during auditory capture, an error will be generated.

2/ Audio capture
wave=tgrabaudio(N);

N = the number of samples to be "grabbed".

wave = by default, stereo input [hard-wired: search the code for "addchannel" to adapt for mono input]

3/ Tidying up (mandatory)

tgrabaudio('stop')

This clears the persistent variables and stops the background audio
input. Careful, if this step is omitted, Matlab is likely to crash or
behave strangely the next time tgrabaudio is run. NB if a program that
uses tgrabaudio crashes before calling tgrabaudio('stop'), don't forget
to call tgrabaudio('stop') as soon as possible (either manually or using
Matlab's try...catch keywords).

EXAMPLE:

The following code shows how to use tgrabaudio to input sound in
realtime. For demo purposes, the audio is gathered over a finite period,
reconstructed into a single variable, and then simply played back.
However, the same construction could be used for continuous processing of
audio input.

>> framesamples=160; fs=16000; totalframes=100;
>> wave=zeros(framesamples*totalframes,2);
>> pointer=1;
>> tgrabaudio('start',fs);
>> for ii=1:totalframes
>> framedata=tgrabaudio(framesamples);
>> %do realtime processing here
>> wave(pointer:pointer+framesamples-1,:)=framedata;
>> pointer=pointer+framesamples;
>> end;
>> sound(wave,fs)

引用格式

Trevor Agus (2024). Realtime audio input (https://www.mathworks.com/matlabcentral/fileexchange/32304-realtime-audio-input), MATLAB Central File Exchange. 检索时间: .

MATLAB 版本兼容性
创建方式 R2007b
兼容任何版本
平台兼容性
Windows macOS Linux
类别
Help CenterMATLAB Answers 中查找有关 Audio I/O and Waveform Generation 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!
版本 已发布 发行说明
1.0.0.0