2016-11-09 181 views
1

我試圖保存錄制的語音。當我按下'保存'按鈕時,錄製的音頻應保存爲.wav文件。但是這沒有發生。這是我的代碼至今...保存錄制的音頻

錄製按鈕...

function recordbutton_Callback(hObject, eventdata, handles) 
% hObject handle to recordbutton (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
rec = audiorecorder 
disp('Recording for 5 Seconds...') 
recordblocking (rec,5); %5 Seconds 
disp('Finished Recording.') 

global myrecording 
myrecording = getaudiodata(rec); 

axes(handles.axes3); 
plot(myrecording) 

保存按鈕...

% --- Executes on button press in saverecording. 
function saverecording_Callback(hObject, eventdata, handles) 
global myrecording 
audiowrite(myrecording, 'RecordedSound.wav'); 
+0

你有什麼問題?你的代碼不工作?它不完整嗎? – zhqiat

+0

當我按下'保存'按鈕時,錄製的音頻應保存爲.wav文件。但是這沒有發生。 –

+0

*發生了什麼?你有空的.wav文件嗎?你確定回調被調用嗎?如果在調試過程中檢查它,'myrecording'是否包含您認爲在那個時間點的數據?您是否已經在調試控制檯上嘗試了'audiowrite'命令以查看它是否按預期工作? –

回答

1

看起來你有一個引導的變量範圍的問題。 我相信最好的做法是使用guidata而不是嘗試使用全局變量。 mathworks Q&A here

其次你audiowrite代碼被稱爲以另一種方式(至少在我的系統) 從MathWorks公司help hereaudiowrite(filename,y,Fs)一個文件名,聲音,然後將頻率爲輸入。

把所有這些放在一起,你的代碼有一點改變,但是這會記錄一個帶有兩個按鈕的wav文件。

function recordbutton_Callback(hObject, eventdata, handles) 
rec = audiorecorder 
disp('Recording for 5 Seconds...') 
recordblocking (rec,5); %5 Seconds 
disp('Finished Recording.') 
handles.myrecording = getaudiodata(rec); 
guidata(hObject, handles); %writes the handles structure back to the guiframe. 

你的保存功能,應該這樣寫

function Save_Callback(hObject, eventdata, handles) 
% hObject handle to Save (see GCBO) 
% eventdata reserved - to be defined in a future version of MATLAB 
% handles structure with handles and user data (see GUIDATA) 
handles.myrecording % check to make sure handles.myrecording actually has data 
audiowrite('RecordedSound.wav',handles.myrecording, 44100); 

沒有必要寫guidata早在保存,除非你想刪除的記錄以釋放內存。