上一篇文章的链接:
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
相乘时,“*”来自答案 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”属性中)。