Beschreibe hier die neue Seite. |
== calculate audio balance ==== Ein sehr altes Beispiel, als ich mich mal mit /dev/mixer beschäftigt habe..irgendwann bin ich ja draufgekommen das man das ganze bitweise betrachten sollte :-) bit denkweise: die volume geht jeweils von 0-100 das heisst 25700 entspricht links und rechts 100%, 25600 (links 100%) - 100 (rechts 100%) das ganze ist bitweise verknüpft, 100<<8 + 100 == 25700 das ganze benötigt 16 Bit (=soviel wird vom datentyp integer bereitgestellt) left&right volume werden in der selben zahl versteckt die man mittels ioctl an die hardware übergibt [[Code] 0-25700 256*n == rechts n == links value geht von 1-100 will man also die gesamte volume verändern muss man l&r beachten (am besten auslesen und weiterverarbeiten) ] Beispiel: [[Code] float left, right, left_set_to, right_set_to; int valuetoset, value; float calcvalue; get_volume(&value); right=(int)value/256; left=(int)value%(int)256; (left>right)?calcvalue=left:calcvalue=right; valuetoset=(gint)adj->value; if(valuetoset>100){ left_set_to=(float)calcvalue*((200-(float)valuetoset)/100); right_set_to=(float)calcvalue; } else { left_set_to=(float)calcvalue; right_set_to=(float)calcvalue*(((float)valuetoset)/100); } valuetoset=(int)left_set_to+(int)right_set_to*256; volume_scale(valuetoset); return FALSE; ] values auslesen: [[Code] void get_volume(int *x){ ioctl(pcm_fd,{SOUND MIXER READ VOLUME}? /*PCM */,x); } void volume_scale(int x){ ioctl(pcm_fd,{SOUND MIXER WRITE VOLUME}? /*PCM*/,&x); } ] |
calculate audio balance | ![]() |
Ein sehr altes Beispiel, als ich mich mal mit /dev/mixer beschäftigt habe..irgendwann bin ich ja draufgekommen das man das ganze bitweise betrachten sollte :-)
bit denkweise:
die volume geht jeweils von 0-100 das heisst 25700 entspricht links und rechts 100%, 25600 (links 100%) - 100 (rechts 100%) das ganze ist bitweise verknüpft, 100<<8 + 100 == 25700 das ganze benötigt 16 Bit (=soviel wird vom datentyp integer bereitgestellt)
left&right volume werden in der selben zahl versteckt die man mittels ioctl an die hardware übergibt
![]() |
|
Beispiel:
![]() |
|
values auslesen:
![]() |
|