sound function with sprintf

Hi all
Its been a number of years since I used MATLAB and some of the code I once used doesn't seem to work as I once used. I know MATLAB got rid rid of wavplay so we should now be using sound but I seem to have hit a snag when it comes to running it through a for loop.
I have a bunch of variables that are my sound files which play perfectly fine when I run them through a standard command ie sound(condition1,44100)
However, when I try to run a for loop like this below, I have an error saying "Audio data must be real and floating point".
n = 6;
for i = 1:n;
sound(sprintf('condition%d',i))
pause(1)
end
In previous version, I notice sprintf would ouput without the apostrophe, whereas now it is (ie 'conditon1' as oppose condition1)
Any help would be gratefully received.
Barry

3 Comments

Stephen23
Stephen23 on 25 Jan 2023
Edited: Stephen23 on 25 Jan 2023
"In previous version, I notice sprintf would ouput without the apostrophe, whereas now it is (ie 'conditon1' as oppose condition1)"
SPRINTF has never added extra single quotes onto text data (unless they are in the text itself). You are confusing the data content with how data are displayed. A few years back (around 2016?) MATLAB changed how it displayed character vectors (to show them with single quotes), but this is unrelated to SPRINTF() and makes absolutely no difference to the content of the character vector. The displaying using single quotes is explained here:
"...some of the code I once used doesn't seem to work as I once used"
A quick perusal of the help going back to 2009 shows SOUND() has never accepted a character vector input.
"I have a bunch of variables that are my sound files which play perfectly fine when I run them through a standard command ie sound(condition1,44100)"
Then the actual source of your error is bad data design, specifically forcing pseudo-indices into variable names:
The simple solution is to use actual indexing, just like MATLAB is designed for and just as the documentation shows:
"Any help would be gratefully received. "
Never force meta-data into variable names.
You can see from http://matlab.izmiran.ru/help/techdoc/ref/wavplay.html that character vectors were never valid input for wavplay()
Stephen23, thanks for coming back to me on this, it really is much appreciated. I will get on the case, and have started following the guidance in the links.
Thanks again.
Barry

Sign in to comment.

Answers (0)

Categories

Find more on Audio I/O and Waveform Generation in Help Center and File Exchange

Asked:

on 25 Jan 2023

Commented:

on 25 Jan 2023

Community Treasure Hunt

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

Start Hunting!