Matlab音量控制gui

时间:2014-12-16 19:20:25

标签: matlab matlab-figure matlab-guide

我试图通过音量滑块操作音频,但是我一直在线搜索并且没有找到任何示例。

这是我显示滑块编号的代码:

handles.volume=get(hObject,'Value');
set(handles.vol_box,'String',num2str(handles.volume,'%2.f'));

guidata(hObject, handles);

有人可以提供一个例子吗?

1 个答案:

答案 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,您就可以开始了。

希望有所帮助!