Matlab GUI中的Volume Slider

时间:2015-10-07 01:55:22

标签: matlab slider volume

上一篇文章的链接:
Matlab Questions about Audioplayer GUI

我正在尝试在Matlab中创建一个音量滑块...
所以我目前在搜索的内容中使用的是handle变量来获取滑块的值。之后,我计划让变量乘以音频层中的(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'。

如果有人能指导我,我会很感激吗? &GT;。&LT;

修改

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

我现在的错误是我收到此错误:
使用*内部矩阵尺寸时出错必须同意。

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

当我尝试将handle.a与x

相乘时,“*”来自

2 个答案:

答案 0 :(得分:1)

在你的上一篇文章中,为了使我们创建的audioplayer对象在整个程序中可见,我们必须手动将它存储在habdles结构中。

Uicontrols,如按钮,滑块,编辑文本等,但是会自动存储在GUI句柄结构中。

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

要获得它的价值,你可以使用:

get(handles.slider1, 'value');

请注意,在属性检查器中,您可以更改其最小和最大属性以满足您的需要(此处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);

告诉我这是否是您需要的,或者如果您希望在不重新开始采样的情况下增加音量,这将会更难做,但仍然可行。

答案 1 :(得分: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”属性中)。