How to record voice in uint8 format without telling the number of seconds in advance?

Hi,
I want to record voice and then have to do some processing on the recorded voice. The output samples of the recorded voice should be in uint8 format.
I have used wavrecord function as given below. It gives me uint8 samples but I have to tell the seconds of recording in advance.
y = wavrecord(recording_duration*Fs,Fs,'uint8');
I have also found another function called audiorecorder as given below. It helps me start a recording and stop a recording and I don't need to give the recording duration in advance but the output samples are not in uint8 format.
recorder = audiorecorder(Fs,nBits,nChannels)
Now, what I want is that:
1. I don't have to give recording duration in advance. 2. I should get the samples in uint8 format.
How can I achieve this?
Thank you.

Answers (2)

doc getaudiodata
Will tell you
y = getaudiodata(recorder, dataType) converts the signal data to the specified data type: 'double', 'single', 'int16', 'int8', or 'uint8'

4 Comments

I believe Asad meant that the file must be written in uint8 format.
I am not getting anything by using this command. Can you please explain how can I use this command. What my requirements are:
1. I don't have to give recording duration in advance.
2. I should get the samples in uint8 format.
@walter, I believe wavwrite automatically writes with the file with the same type as the input (if not, you can definitely specify the type to be written).
@Muhammad, you use getaudiodata with the audiorecoder object.
@Daniel: Could you please tell me how to create an audiorecorder object. Can you please provide me a code that fulfills my two requirements?
Thank you.

Sign in to comment.

Working from Daniel's answer:
recorder = audiorecorder(Fs,8,nChannels);
Then when ready,
record(recorder);
and when done,
stop(recorder);
Then to get the data as uint8,
samples = getaudiodata(recorder,'uint8');
clear recorder

1 Comment

It is not obvious to me what the audiorecorder function does with the nbits argument. While at first glance it makes sense to only record with 8 bit resolution if you want the result as an int8, but if audiorecorder or the soundcard does anything funky, you might be better off using
recorder = audiorecorder(Fs,16,nChannels);

Sign in to comment.

Asked:

on 23 Jun 2011

Community Treasure Hunt

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

Start Hunting!