我试图通过音量滑块操作音频,但是我一直在线搜索并且没有找到任何示例。
这是我显示滑块编号的代码:
handles.volume=get(hObject,'Value');
set(handles.vol_box,'String',num2str(handles.volume,'%2.f'));
guidata(hObject, handles);
有人可以提供一个例子吗?
答案 0 :(得分:1)
MATLAB中没有记录功能允许您这样做。但是,有很多未记录的功能依赖于java,您可以利用它来控制计算机的音量。
幸运的是,有一个关于未记录的Matlab内容的精彩网站here,其中Yair展示了一些代码来访问系统的音量控制器。说实话,我无法向你解释这个部分,但是通过一些游戏可以创建一个带滑块的简单GUI来交互控制音量。
1)以下是Yair的名为SoundVolume
的函数,可在文件交换here上找到。
为了完整起见,这里是整个代码。我写了一个简单的函数来生成一个GUI并调用SoundVolume来交互式地改变扬声器音量,这就是紧随其后。
function volume = SoundVolume(volume)
% Loop over the system's mixers to find the speaker port
import javax.sound.sampled.*
mixerInfos = AudioSystem.getMixerInfo;
foundFlag = 0;
for mixerIdx = 1 : length(mixerInfos)
mixer = AudioSystem.getMixer(mixerInfos(mixerIdx));
ports = getTargetLineInfo(mixer);
for portIdx = 1 : length(ports)
port = ports(portIdx);
try
portName = port.getName; % better
catch %#ok
portName = port.toString; % sub-optimal
end
if ~isempty(strfind(lower(char(portName)),'speaker'))
foundFlag = 1; break;
end
end
end
if ~foundFlag
error('Speaker port not found');
end
% Get and open the speaker port's Line object
line = AudioSystem.getLine(port);
line.open();
% Loop over the Line's controls to find the Volume control
ctrls = line.getControls;
foundFlag = 0;
for ctrlIdx = 1 : length(ctrls)
ctrl = ctrls(ctrlIdx);
ctrlName = char(ctrls(ctrlIdx).getType);
if ~isempty(strfind(lower(ctrlName),'volume'))
foundFlag = 1; break;
end
end
if ~foundFlag
error('Volume control not found');
end
% Get or set the volume value according to the user request
oldValue = ctrl.getValue;
if nargin
ctrl.setValue(volume);
end
if nargout
volume = oldValue;
end
2)为了交互式地设置音量,我们只需要用0到1之间的数字来呼叫SoundVolume
,我们很高兴。这正是我们将要使用以下GUI和滑块:
function SetSound()
clear
clc
close all
%// Create GUI components, i.e. a figure and a slider
handles.fig = figure('Position',[500 500 600 200],'Units','pixels');
handles.slider = uicontrol('Style','slider','Position',[50 50 400 20],'Min',0,'Max',1,'Value',.5);
%// Add a listener to interactively update the volume as you move it.
handles.Listener = addlistener(handles.slider,'Value','PostSet',@(s,e) GetValue(handles));
guidata(handles.fig);
%// Now here call Yair's function SoundVolume, with the value of the slider which is between 0 and 1.
function GetValue(handles)
%// Get the value of the slider here and call SoundVolume with it.
Value = (get(handles.slider,'Value'));
SoundVolume(Value)
end
end
就是这样!要从命令窗口中查看结果调用SetSound
,您就可以开始了。
希望有所帮助!