我正在使用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中按下播放声音,它没有发出任何错误。
答案 0 :(得分:0)
您是否尝试对此进行调试并在选择文件后查看d
包含的内容?
As per the documentation,d = dir('C:\monitoringsystem\*.wav');
返回struct
,其中包含以下字段:name
,date
,bytes
,isdir
, datenum
(至少在MATLAB 2015a上)。虽然{d.name}
正确地为您提供了文件名,但您应该注意这只是一个相对路径,因此MATLAB不会在哪里查找文件,除非它在活动目录。
我不完全确定您为什么遇到allstrings
,curvalue
和thisstring
的所有麻烦,但如果我理解了您正在尝试的内容要做,我建议采用以下两种方法之一:
在常量中定义默认路径(即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
使用uigetfile:
[FileName,PathName] = uigetfile('*.wav','Select the WAV file');
FullPath = fullfile(PathName,FileName);
(然后其余部分与第一种情况非常相似)