Contrôle du volume (Windows)

Présentation
Voici un code MATLAB pour ajuster le volume sonore sous Windows (32 et 64 bits)
Téléchargement
Compatibilité
Windows
0  0 
Téléchargé 26 fois Voir les 6 commentaires
Détails
Avatar de paradize3
Membre averti
Voir tous les téléchargements de l'auteur
Licence : Autre
Date de mise en ligne : 28 octobre 2013




Avatar de Jerome Briot Jerome Briot - Rédacteur/Modérateur https://www.developpez.com
le 22/01/2009 à 9:44
C'est plutôt pas mal ça...

La valeur max du volume est-elle fixée ? (j'ai 32767 sur ma machine)
Avatar de paradize3 paradize3 - Membre averti https://www.developpez.com
le 22/01/2009 à 13:21
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
Avatar de Jerome Briot Jerome Briot - Rédacteur/Modérateur https://www.developpez.com
le 22/01/2009 à 15:25
Une petite télécommande toute simple :

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
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...
Avatar de Jerome Briot Jerome Briot - Rédacteur/Modérateur https://www.developpez.com
le 24/01/2009 à 23:21
Avec des slider qui répondent en temps réel :

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
Il faut récupérer cette contribution du FEX : UICOMPONENT - expands uicontrol to all Java classes
Avatar de Jerome Briot Jerome Briot - Rédacteur/Modérateur https://www.developpez.com
le 08/01/2010 à 17:58
Ajout d'une version compilée de la Dll pour les version 7 de MATLAB
Avatar de Jerome Briot Jerome Briot - Rédacteur/Modérateur https://www.developpez.com
le 08/06/2013 à 15:52
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.
Contacter le responsable de la rubrique MATLAB