Matlab GUI 中的音量滑块

Volume Slider in Matlab GUI

Link 上一个 Post:

我正在尝试在 Matlab 中制作音量滑块...
因此,目前我从搜索到的内容中想到的是使用 handles 变量来获取滑块的值。之后,我打算让变量乘以音频播放器中的 (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);

我的音频播放器代码将是这样的(不确定我这样做是否有效):

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

因此,当我在此之后尝试 "Playing" 音频时,出现以下错误:
未定义函数或变量 'a'.

如果有人能指导我,我将不胜感激? >.<

编辑

我设法解决(?)错误:未定义的函数或变量 'a'。

我现在的错误是我收到这个错误:
使用错误 * 内部矩阵尺寸必须一致。

上面的代码被编辑后也有以下错误...

“*”来自于我尝试将 handles.a 与 x

相乘

在你上一个post中,为了让我们创建的audioplayer对象对整个程序可见,我们不得不手动将它存储在habdles结构中。

按钮、滑块、编辑文本等 Uicontrol 会自动存储在 GUI 句柄结构中。

例如,您的标签为 'slider1' 的滑块可以通过 'handles.slider1' 访问。

要获取它的值,您可以使用:

get(handles.slider1, 'value');

请注意,在 属性 检查器中,您可以更改其 Min 和 Max 属性以满足您的需要(此处 Min=0 和 Max=5 似乎很合适)。

现在,我们必须实际更改您的音频样本的音量。

一个简单的方法(但会从头开始重播样本)是在您用来播放声音的按钮(如果我没记错的话,按钮 3)中实现音量修改:

行后:

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

添加:

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

然后:

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

最后一步是在 slider1_Callback 中调用 Button3 的回调:

Function     Slider1_Callback(hObject,handles,eventdata)

Button3_Callback(hObject,handles,eventdata);

告诉我这是否是您所需要的,或者您是否希望在不从头重新启动样本的情况下增加音量,这会有点难,但仍然可行。

现在让我们看看如何在不重新启动样本播放的情况下 increase/decrease 音量:

在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' 属性 中)。