Vote des utilisateurs
0
0
Détails
Licence : Non renseignée
Mise en ligne le 28 octobre 2013
Plate-forme :
Windows
Langue : Français
Référencé dans
Navigation
Contrôle du volume (Windows)
Contrôle du volume (Windows)
Voici un code MATLAB pour ajuster le volume sonore sous Windows (32 et 64 bits)
C'est plutôt pas mal ça...
La valeur max du volume est-elle fixée ? (j'ai 32767 sur ma machine)
La valeur max du volume est-elle fixée ? (j'ai 32767 sur ma machine)
oui il y a un maximum... qui dépend de la carte son... (mais au max 2^16-1 dans tous les cas)
Salutations,
Grég
Salutations,
Grég
Une petite télécommande toute simple :
Les uicontrol de gauche pour le canal de gauche, ceux de droite, pour le canal de droite 
Il faut bien entendu que mx_volume.mexw32 soit dans le même répertoire
A améliorer...
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | function ctrvol
fig = figure('units','normalized',...
'position',[.1 .1 .1 .33],...
'menubar','none',...
'toolbar','none',...
'resize','off',...
'numbertitle','off');
movegui(fig,'center')
[left, right] = mx_volume('WAVE');
uicontrol('style','slider',...
'units','normalized',...
'position',[.2 .2 .2 .7],...
'tag','slidl',...
'max',(2^16-1)/2,...
'callback',@cb_vol,...
'value',left)
uicontrol('style','slider',...
'units','normalized',...
'position',[.6 .2 .2 .7],...
'tag','slidr',...
'max',(2^16-1)/2,...
'callback',@cb_vol,...
'value',right)
uicontrol('style','checkbox',...
'units','normalized',...
'position',[.2 .05 .2 .1],...
'tag','chkl',...
'value',1,...
'callback',@cb_vol)
uicontrol('style','checkbox',...
'units','normalized',...
'position',[.6 .05 .2 .1],...
'tag','chkr',...
'value',1,...
'callback',@cb_vol)
handles = guihandles(fig);
guidata(fig,handles);
function cb_vol(obj,event)
handles = guidata(gcbf);
[left, right] = mx_volume('WAVE');
switch get(obj,'tag')
case 'chkr'
val = get(obj,'value');
if ~val
mx_volume('WAVE', left, 0);
else
mx_volume('WAVE', left, get(handles.slidr,'value'));
end
case 'chkl'
val = get(obj,'value');
if ~val
mx_volume('WAVE', 0, right);
else
mx_volume('WAVE', get(handles.slidl,'value'), right);
end
case 'slidr'
if get(handles.chkr,'value')
mx_volume('WAVE', left, get(obj,'value'));
end
case 'slidl'
if get(handles.chkl,'value')
mx_volume('WAVE', get(obj,'value'), right);
end
end |

Il faut bien entendu que mx_volume.mexw32 soit dans le même répertoire
A améliorer...
Avec des slider qui répondent en temps réel :
Il faut récupérer cette contribution du FEX : UICOMPONENT - expands uicontrol to all Java classes
| Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | function ctrvol
fig = findobj('type','figure','tag','ctrvol');
if ishandle(fig)
return
end
fig = figure('units','normalized',...
'position',[.1 .1 .1 .33],...
'menubar','none',...
'toolbar','none',...
'resize','off',...
'numbertitle','off',...
'visible','off',...
'tag','ctrvol');
movegui(fig,'center')
[left, right] = mx_volume('WAVE');
u = uipanel('units','normalized',...
'position',[.066 .15 .4 .8],...
'title','Left');
handles.ui(1) = uicomponent(u,'style','javax.swing.jslider','name','slidl',...
'units','normalized','Orientation',true,...
'minimum',0,'maximum',100,'value',100*double(left)/((2^16-2)/2),...
'PaintTicks',true,'MajorTickSpacing',50,...
'PaintLabels', true,'MajorTickSpacing',10);
set(handles.ui(1),'position',[.05 0 .9 1],'StateChangedCallback',@cb_vol);
u = uipanel('units','normalized',...
'position',[.533 .15 .4 .8],...
'title','Right');
handles.ui(2) = uicomponent(u,'style','javax.swing.jslider','name','slidr',...
'units','normalized','Orientation',true,...
'minimum',0,'maximum',100,'value',100*double(right)/((2^16-2)/2),...
'PaintTicks',true,'MajorTickSpacing',50,...
'PaintLabels', true,'MajorTickSpacing',10);
set(handles.ui(2),'position',[.05 0 .9 1],'StateChangedCallback',@cb_vol);
u = uipanel('units','normalized','position', [.066 .02 .868 .125],...
'title','Mute');
handles.chkl = uicontrol(u,'style','checkbox',...
'units','normalized',...
'position',[.15 .05 .3 .9],...
'tag','chkl',...
'value',1,...
'callback',@cb_vol);
handles.chkr = uicontrol(u,'style','checkbox',...
'units','normalized',...
'position',[.7 .05 .3 .9],...
'tag','chkr',...
'value',1,...
'callback',@cb_vol);
guidata(fig,handles);
set(fig,'visible','on')
function cb_vol(obj,event)
val = get(obj,'value');
if isprop(obj,'name')
str = get(obj,'name');
else str = get(obj,'tag');
end
fig = findobj('type','figure','tag','ctrvol');
handles = guidata(fig);
[left, right] = mx_volume('WAVE');
switch str
case 'chkr'
if ~val
mx_volume('WAVE', left, 0);
else
mx_volume('WAVE', left, (2^16-1)/2*get(handles.ui(2),'value')/100);
end
case 'chkl'
if ~val
mx_volume('WAVE', 0, right);
else
mx_volume('WAVE', (2^16-1)/2*get(handles.ui(1),'value')/100, right);
end
case 'slidr'
val = (2^16-1)/2*val/100;
if get(handles.chkr,'value')
mx_volume('WAVE', left, val);
end
case 'slidl'
val = (2^16-1)/2*val/100;
if get(handles.chkl,'value')
mx_volume('WAVE', val, right);
end
end |
Ajout d'une version compilée de la Dll pour les version 7 de MATLAB 

Ajout d'une version compilée pour les versions 64 bits de MATLAB 

Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.