2015-10-07 77 views
0

一篇文章的鏈接:
Matlab Questions about Audioplayer GUI音量滑塊

我試圖讓在Matlab音量滑塊...
所以現在我心裏有從我的搜索是用手柄變量來獲得滑塊的值。之後,我打算在變音器中增加變量乘以(x,fs)。
我對手柄的開始當前的代碼是這樣的...

handles.a = [] ; %I don't know what to put for this >.< 
handles.output = hObject; 
handles.myPlayer=[]; 
guidata(hObject, handles); 

我的音量滑塊代碼是這樣的:

function slider1_Callback(hObject, eventdata, handles) 
handles.a = get(handles.slider1,'Value'); 
guidata(hObject,handles); 

而且我對audioplayer代碼將是什麼像這樣(不知道是否會工作,如果我做這種方式):

FullPath='C:\Users\Y400\Documents\MATLAB\test1'; 
[x,Fs]=wavread(FullPath); 
handles.myPlayer = audioplayer(handles.a*x,Fs); 
play(handles.myPlayer);` 
guidata(hObject, handles)` 

所以,當我嘗試「玩」的聲音後,我得到了以下錯誤:
未定義的函數或變量'a'。

如果有人能指導我這個,會感激嗎? >。 <

編輯

我設法解決這個錯誤(?):未定義的函數或變量 'A'。

我現在的錯誤現在是我得到這個錯誤:
錯誤使用*內部矩陣尺寸必須同意。

上面的代碼編輯有以下錯誤,以及...

的「*」來自當我試圖用X

回答

1

現在,讓我們看看我們怎麼做才能增加/減小音量,無需重新啓動樣品玩法:

在slider1_Callback:

function slider1_Callback(hObject,handles,eventdata) 

%Pause audioplayer 

pause(handles.myPlayer); 

%Know how far the user has got in the sample 

NewStart=get(handles.myPlayer,'CurrentSample')+1; 

%stop current player 

stop(handles.myPlayer); 

%Reload your sample 

[x,Fs]=wavread(FullPath); 

%Create a new sample by cutting x and keeping only the lines from NewStart 
%to the end 

x=x(NewStart:end,:); 

%Get the value of the slider 

Volume=get(handles.slider1,'value'); 

%Set new audioplayer 

handles.myPlayer=audioplayer(x*Volume,Fs); 

%Play 

play(handles.myPlayer); 

% save handles structure 

guidata(hObject,handles); 

多久是你的音頻採樣?如果時間太長,則可能需要一些時間來加載和中斷播放。爲了減少加載時間,您可以考慮保存數據(例如,在您的按鈕的'userdata'屬性中的一箇中)。

+0

插入後,出現以下錯誤:未定義的函數或變量'FullPath'。 那麼我必須再次重新定義FullPath嗎?如果是這樣,我該如何去做,我使用if else函數? – user4514279

+0

我相信你可以自己弄清楚,再加上它對你更有價值! (你是一個很好的領導!) – BillBokeey

+0

好的,謝謝你,我會盡力解決它,如果有任何錯誤,那麼我可以問你嗎? – user4514279

1

繁殖handles.a在您的最後一個職位,以使我們創建的audioplayer對象可以在整個程序中看到,我們必須手動將它存儲在habdles結構中。

Uicontrols像按鈕,滑塊,編輯文本等,雖然,自動存儲在GUI句柄結構。

例如,您的標籤爲'slider1'的滑塊可以通過'handles.slider1'訪問。

要得到它的價值,你可以用:

get(handles.slider1, 'value'); 

需要注意的是,在屬性檢查器中,你可以改變它的最小值和最大值屬性,以滿足您的需求(這裏最小= 0,最大值= 5看起來很正確)。

現在,我們將不得不改變音頻樣本的音量。

一個簡單的方法來做到這一點(但將重播年初以來樣品),將實現你用來播放聲音的按鈕,音量修改(將Button3如果我記得很清楚):

[x,Fs]=wavread('FullPath'); 

地址::

Volume=get(handles.slider1,'value'); 

然後:

行後
handles.myPlayer=audioplayer(Volume*x,Fs); 

最後一步是要打電話給你的將Button3的回調在slider1_Callback:

Function  Slider1_Callback(hObject,handles,eventdata) 

Button3_Callback(hObject,handles,eventdata); 

告訴我,如果這是你需要什麼,或者如果你想不從一開始就重新啓動樣品中提高的音量,這樣做會有點困難,但仍然可行。

+0

嗨,感謝您的回覆。當我插入下面的代碼時,它似乎給我一個錯誤:Button3_Callback(hObject,handles,eventdata); 是的,我需要增加/減少音量而不重新啓動 – user4514279

+0

您的播放按鈕的標記是什麼? – BillBokeey

+0

是按鈕1。 而不是Button3_Callback(hObject,handles,eventdata); ,我使用pushbutton1_Callback(hObject,句柄,eventdata); – user4514279