From: BC Tan on
Hi All,

I found the following code to read a MP3 song call "candy.mp3" however it kept prompting me of the following

??? Input argument "FILE" is undefined.

Can anyone assist?
Tks.

The source code is as follow.

function
%MP3READ Read MP3 (".mp3") sound file.
% Y = MP3READ(FILE) reads a MP3 file specified by the string FILE,
% returning the sampled data in Y. Amplitude values are in the range [-1,+1].
%
% [Y,FS,NBITS,encoding_info,ID3v1_tag_info] = MP3READ(FILE) returns the sample rate (FS) in Hertz
% and the number of bits per sample (NBITS) used to encode the
% data in the file.
%
% 'encoding_info' is a string containing information about the mp3
% encoding used
%
% 'ID3v1_tag_info' is a string containing the tag information of the file
% (only ID3v1 tag supported in this version)
%
%
% Supports two channel or mono encoded data, with up to 16 bits per sample.
%
% See also MP3WRITE, WAVWRITE, AUREAD, AUWRITE.
a = length(FILE);
if a >= 4
exten = FILE(a-3:a);
if exten ~= '.mp3'
FILE = strcat(FILE,'.mp3');
end
end
if a <= 3
FILE = strcat(FILE,'.mp3');
end
if exist(FILE) ~= 2
error('File not Found')
end
%%%%%% Location of the ".exe" Files
s = which('mp3read.m');
ww = findstr('mp3read.m',s);
location = s(1:ww-2);
%%%%Temporary file%%%%%%
tmpfile = ['temp.wav'];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%% Data Decoding using "mpg123.exe"%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[stat,raw_info] = dos([location,'\mpg123', ' -w ', tmpfile, ' ', '"',FILE,'"']);
data_init = findstr(raw_info,'MPEG');
blocks = findstr(raw_info,'[0:');
if raw_info(blocks+3) == '0'
error('Error while decoding file. File may be corrupted')
end
[Y,FS,NBITS] = wavread(tmpfile); % Load the data and delete temporary file
delete(tmpfile);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
tag_info_start = strfind(raw_info,'Title');
tag_info_end = (strfind(raw_info,'Playing MPEG'))-1;
tag_info = raw_info(tag_info_start:tag_info_end);
encoding_info = raw_info(data_init(3):data_init(3)+53);
From: Nasser Abbasi on

How are you calling this function?

"BC Tan" <rainzz(a)live.com> wrote in message
news:h8caag$qfm$1(a)fred.mathworks.com...
> Hi All,
>
> I found the following code to read a MP3 song call "candy.mp3" however it
> kept prompting me of the following
>
> ??? Input argument "FILE" is undefined.
>
> Can anyone assist?
> Tks.
>
> The source code is as follow.
>
> function
> %MP3READ Read MP3 (".mp3") sound file.
> % Y = MP3READ(FILE) reads a MP3 file specified by the string FILE,
> % returning the sampled data in Y. Amplitude values are in the range
> [-1,+1].
> %
> % [Y,FS,NBITS,encoding_info,ID3v1_tag_info] = MP3READ(FILE) returns the
> sample rate (FS) in Hertz
> % and the number of bits per sample (NBITS) used to encode the
> % data in the file.
> %
> % 'encoding_info' is a string containing information about the mp3
> % encoding used
> %
> % 'ID3v1_tag_info' is a string containing the tag information of the
> file
> % (only ID3v1 tag supported in this version)
> %
> %
> % Supports two channel or mono encoded data, with up to 16 bits per
> sample.
> %
> % See also MP3WRITE, WAVWRITE, AUREAD, AUWRITE.
> a = length(FILE);
> if a >= 4
> exten = FILE(a-3:a);
> if exten ~= '.mp3'
> FILE = strcat(FILE,'.mp3');
> end
> end
> if a <= 3
> FILE = strcat(FILE,'.mp3');
> end
> if exist(FILE) ~= 2
> error('File not Found')
> end
> %%%%%% Location of the ".exe" Files
> s = which('mp3read.m');
> ww = findstr('mp3read.m',s);
> location = s(1:ww-2);
> %%%%Temporary file%%%%%%
> tmpfile = ['temp.wav'];
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> %%%%%%%%%%%%%% Data Decoding using "mpg123.exe"%%%%%%%%%%%%%%%%%%
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> [stat,raw_info] = dos([location,'\mpg123', ' -w ', tmpfile, ' ',
> '"',FILE,'"']);
> data_init = findstr(raw_info,'MPEG');
> blocks = findstr(raw_info,'[0:');
> if raw_info(blocks+3) == '0'
> error('Error while decoding file. File may be corrupted')
> end
> [Y,FS,NBITS] = wavread(tmpfile); % Load the data and delete temporary
> file
> delete(tmpfile);
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> tag_info_start = strfind(raw_info,'Title');
> tag_info_end = (strfind(raw_info,'Playing MPEG'))-1;
> tag_info = raw_info(tag_info_start:tag_info_end);
> encoding_info = raw_info(data_init(3):data_init(3)+53);


From: BC Tan on
Hi, I save the file mp3read.m in the path directory and I type mp3read in the command window.
From: Nasser Abbasi on

"BC Tan" <rainzz(a)live.com> wrote in message
news:h8cvua$2a5$1(a)fred.mathworks.com...

> Hi, I save the file mp3read.m in the path directory and I type mp3read in
> the command window.

Well, that is your problem then.

The function itself, should be defined to accept an argument, which is the
file name.

From the listing you showed:

"function
%MP3READ Read MP3 (".mp3") sound file.
% Y = MP3READ(FILE) reads a MP3 file specified by the string FILE,
"

There should be a line in that file which reads "function y=mp3read(file"
which is not commented out. For some reason, the listing you should does
not have this line, may be you cut it off by mistake.

anyway, you need to call the function as

the_mp3_file = mp3read('my_nice_music_file.mp')

make sure the .m file is in the path.

good luck

--Nasser