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