播放声音时出现Matlab错误

时间:2015-06-14 08:28:29

标签: matlab user-interface audio error-handling

我正在使用matlab gui,我正在录制声音然后将其保存在c中的文件夹中,然后当我按声音wav上的播放时,显示列表框中文件夹中录制的声音。 Matlab给出错误错误:

************Error using audioread (line 74)**
***The filename specified was not found in the MATLAB path.
Error in Monitoring_System>play_Callback (line 178)
[q, Fs] = audioread(thisstring);
Error in gui_mainfcn (line 95)
        feval(varargin{:});
Error in Monitoring_System (line 42)
    gui_mainfcn(gui_State, varargin{:});
Error in @(hObject,eventdata)Monitoring_System('play_Callback',hObject,eventdata,guidata(hObject))

Error while evaluating uicontrol Callback*************

- 记录代码:

format shortg
             c = clock;
             fix(c);
             a=num2str(c);
             year=strcat(a(1),a(2),a(3),a(4),a(5));
             month=strcat(a(19),a(20));
             day=strcat(a(33),a(34));
             hour=strcat(a(48),a(49));
             min=strcat(a(63),a(64));
             sec=strcat(a(74),a(75));
             name=strcat(year,'-',month,'-',day,'-',hour,'-',min,'-',sec);
             fullpath=fullfile('c:\monitoringsystem',name);
             wavwrite(y,44100,fullpath);
             y=[];

将它们显示在列表框中的代码:

d = dir('C:\monitoringsystem\*.wav'); %get files


set(handles.listbox1,'String',{d.name}) 

播放从列表框中选择的声音的代码:

allstrings = cellstr( get(handles.listbox1, 'String') );
curvalue = get(handles.listbox1, 'Value');
thisstring = allstrings{curvalue};
[q, Fs] = audioread(thisstring);
 soundsc(q,44100);

任何帮助如何解决此问题,保持在特定文件夹中保存。我将录制的声音复制到matlab文件夹中,然后在gui中按下播放声音,它没有发出任何错误。

1 个答案:

答案 0 :(得分:0)

您是否尝试对此进行调试并在选择文件后查看d包含的内容?

As per the documentationd = dir('C:\monitoringsystem\*.wav');返回struct,其中包含以下字段:namedatebytesisdirdatenum(至少在MATLAB 2015a上)。虽然{d.name}正确地为您提供了文件名,但您应该注意这只是一个相对路径,因此MATLAB不会在哪里查找文件,除非它在活动目录。

我不完全确定您为什么遇到allstringscurvaluethisstring的所有麻烦,但如果我理解了您正在尝试的内容要做,我建议采用以下两种方法之一:

  1. 在常量中定义默认路径(即C:\monitoringsystem),然后在保存\ loading时使用它:

    DEFAULT_PATH = `C:\monitoringsystem`; %// Definition
    ...
    fullpath = fullfile(DEFAULT_PATH,name); %// When saving
    ...
    d = dir(fullfile(DEFAULT_PATH,'*.wav')); %// When listing files
    ...
    [q, Fs] = audioread(fullfile(DEFAULT_PATH,{d.name})); %// When reading a file
    
  2. 使用uigetfile

    [FileName,PathName] = uigetfile('*.wav','Select the WAV file');
    FullPath = fullfile(PathName,FileName);
    

    (然后其余部分与第一种情况非常相似)