Markus Rechberger / Audio Mixer
 
StartSeite | MarkusRechberger/ | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern

Veränderung (letzte Änderung) (keine anderen Diffs, Normalansicht)

Verändert: 1c1,54
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
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:

  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:

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);
}


StartSeite | MarkusRechberger/ | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 13. Oktober 2004 0:24 (diff))
Suchbegriff: gesucht wird
im Titel
im Text