我正在使用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中按play,以确保该wav声音没有任何错误。

最佳答案

您是否尝试调试此文件并在选择文件后查看d包含什么?

As per the documentationd = dir('C:\monitoringsystem\*.wav');返回具有以下字段的struct:namedatebytesisdirdatenum(至少在MATLAB 2015a上)。尽管{d.name}正确地为您提供了文件名,但是您应该注意,这只是相对路径,因此,除非文件位于 Activity 目录中,否则MATLAB不会在哪里查找文件。

我不完全确定为什么您会遇到allstringscurvaluethisstring的所有麻烦,但是如果我正确理解了您要执行的操作,则建议使用以下两种方法之一:

  • 在常量中定义默认路径(即C:\monitoringsystem),然后在保存\加载时使用它:
    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
    
  • 使用uigetfile:
    [FileName,PathName] = uigetfile('*.wav','Select the WAV file');
    FullPath = fullfile(PathName,FileName);
    

    (然后其余部分与第一种情况非常相似)
  • 09-11 18:48
    查看更多