2015-06-14 7 views
0

Я использую matlab gui, я записываю звук, затем сохраняю его в папке c, а затем показываю записанный звук, который находится в папке в списке, когда я нажимаю кнопку воспроизведения на звук wav. Matlab дает ошибку ошибка:Ошибка 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************* 

-The Код записи:

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=[]; 

Код для Diplay их в ListBox:

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 для этого звука WAV, он не дал никаких ошибок.

ответ

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, но если я правильно понимаю, что вы пытаетесь сделать, я хотел бы предложить один из двух подходов:

  1. Определить путь по умолчанию (т.е. 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 
    
  2. Использование uigetfile:

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

    (а затем все остальное очень похоже на 1-й случай)

Смежные вопросы