J'écris une petite fonction C permettant de régler le volume du PCM device. Le problème est que le réglage se fait de 0 à 31 pour un volume qui peut varier entre 0 et 100 et l'échelle n'est pas linéaire qui plus est. Hors en tant qu'utilisateur, je souhaite pouvoir donner à ma fonction une valeur entre 0 et 100 pour le réglage de mon volume, et bien sûr je souhaite que mon volume soit réglé à 45 si je le règle à 45.
Exemple:
setVolume(int volume) // entre 0 et 100
{
// [etapes specifique alsa API...]
snd_ctl_elem_value_set_integer(control, 0, volume_converti) // volume_converti entre 0 et 31
}
setVolume(45); // => nouveau volume affiché dans alsamixer : 45
J'aimerais savoir si quelqu'un pourrait avoir des connaissances suffisantes ou des liens vers de la documentation qui détaille cela.
J'ai tenté de réaliser une modélisation polynomiale avec excel pour avoir une approximation du comportement mais c'est pas top...
Dans l'idée oui mais malheureusement ce n'est pas aussi simple qu'une règle de trois...
En fait là où ça se corse c'est la conversion réalisé par alsa entre la valeur de 0 à 31 vers la valeur réelle du volume. En fait ce n'est pas linéaire dans le sens où régler le volume à 15 sur l'échelle 0-31 ne va donner en sortie une valeur de volume de 50%.
Par exemple setVolume(45) ->[conversion 0-31]-> 14 [conversion alsa] -> 25 (<- volume réelle de sortie)
En image ça donne ça:
- Courbe 0-31 vers son réelle:
- Commande pour régler le volume a 15/31 (théroiquement à 50%)
- Volume que ce la donne seulement 28% en réalité (il y a donc une conversion réalisée)
je viens de vérifier dans le man : il est possible d'indiquer un pourcentage à amixer
EXAMPLES
[...]
amixer -c 2 cset iface=MIXER,name='Line Playback Volume",index=1 40%
will set the third soundcard's second line playback volume(s) to 40%
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Oui exact. Mais le problème est que je passe par les fonctions de l'API en C et à priori elle ne permet pas de donner un pourcentage. J'ai juste utilisé la commande alsa du terminal pour montrer le "phénomène" mais je ne m'en sers pas outremesure
Oui on trouve en effet des implémentations ou le volume se règle en pourcentage en faisant une telle recherche. Mais le problème reste le même : si je lui demande 90, il règlera sur une valeur différente. En revanche après quelques recherches, il me semble que l'échelle logarithmique employée est là pour donner un rendu "linéaire" à l'oreille humaine.
Echelle de réglage volume alsamixer
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique