我使用GUI matlab,我正在录制wav声音并将其保存在特定文件夹中。当我按下播放按钮时出现错误,错误是:指定的文件名未在MATLAB路径中找到。这是录制按钮的一小部分:
name=strcat(year,'-',month,'-',day,'-',hour,'-',min,'-',sec);
fullpath=fullfile('c:monitoringsystem',name);
wavwrite(y,44100,fullpath);
y=[];
播放代码:
allstrings = cellstr( get(handles.listbox1, 'String') );
curvalue = get(handles.listbox1, 'Value');
thisstring = allstrings{curvalue};
[q, Fs] = audioread(thisstring);
soundsc(q,44100);
如何解决这个问题,保持声音保存在一个特定的文件夹
要使用"audioread"读取不在MatLab路径中的音频文件,必须指定完整的文件路径。
在您发布的代码中,不清楚您如何构建声音列表以及如何将其分配给列表框。
尽管如此,一个可能的解决方案可能如下:您可以创建一个(N x 2) cellarray,其中存储每首歌曲的文件名及其路径。
您可以只给列表框分配文件名,然后您可以使用列表框中所选项目的索引来访问包含路径的单元格。然后,您只需要构建完整的文件名(包括路径),以便在调用audioread
时使用。
这个解决方案的实现取决于你如何管理声音列表。
为了测试这个解决方案,我已经建立了一个小GUI:我已经手动创建了一个歌曲列表和它们的路径在"listbox1_CreateFcn
"和建立完整的文件名在pushbutton1_Callback
如下(我已经使用guidata
来管理GUI内的声音列表):
function listbox1_CreateFcn(hObject, eventdata, handles)
% hObject handle to listbox1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: listbox controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% Definition of the sound list
l_song{1,1}='song_1';
l_song{1,2}='c:usersuser_1';
l_song{2,1}='song_2';
l_song{2,2}='c:usersuser_2';
l_song{3,1}='song_3';
l_song{3,2}='c:usersuser_3';
% Use guidata to manage the cellarray withn the GUI
my_guidata=guidata(gcf);
my_guidata.song_list=l_song;
guidata(gcf,my_guidata);
str=l_song(:,1)
set(hObject,'string',str)
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get idx of the selected sound
v=get(handles.listbox1,'Value')
% Get the list of song and paths
my_guidata=guidata(gcf);
l_song=my_guidata.song_list;
disp(['Song path= ' l_song(v,2)])
disp(['Song namw= ' l_song(v,1)])
% Build the full file name to be used in audioread
f_name=strcat(fullfile(l_song(v,2),l_song(v,1)),'.wav')