|
Java byte array manipulation 2 bytes --> short * irgendwas --> 2 bytes
|
|
 03 Sep 2009, 15:58
|

busy office        
Punkte: 1655
seit: 30.06.2006
|
hi, ich kriege irgendwie seit Tagen keinen klaren Kopf bei dem ganzen Audiozeuch - folgendes: Ich habe eine WAV Datei, erzeuge einen audiostream und trenne die beiden Kanäle (Stereo file) in jeweils ein byte array. Soweit so gut funktioniert auch super. Nun will ich die einzelnen Bytes manipulieren, was ja auch kein Problem darstellt. Nur bekomme ich dabei ein Rauschen. Ein Sample besteht ja nun aus 4 Byte - 2 Byte für Links und 2 Byte für rechts. L L R R und ich will auf die 2 Byte des Linken kanals ein Gain (Lautstärke) multiplizieren und auf den rechten - was aber unterschiedliche Verstärkungsfaktoren sind. Mir wurde nun gesagt ich müsse die 2 Bytes aus dem Kanal in ein Short überführen, es manipulieren und wieder in die 2 Bytes packen. Nur funktioniert das nicht so richtig. Details auf der StackOverflow Seite
--------------------
Grüße sn3ek
|
|
|
Antworten
|
|
 03 Sep 2009, 19:38
|

busy office        
Punkte: 1655
seit: 30.06.2006
|
Zitat(stth @ 03 Sep 2009, 19:36) schlecht... letzeres ist die verstärkung... akt. wert in double, malnehmen, zurück nach int wenn float gain = 0.5f gegaehnt = (int)((float)gegaehnt * gaehn);  Also vllt kams ja falsch an: ich will lediglich die lautstärke der einzelnen kanäle manipulieren. Auf das gesamte ist das kein Problem, dafür gibts die Gain control in der API. Aber wie ich das auf die einzelnen kanäle abwälzen soll ist mir unklar...
|
|
|
|
|
 03 Sep 2009, 19:55
|

der vierkonsonantige         
Punkte: 3812
seit: 12.12.2003
|
Zitat(sn3ek @ 03 Sep 2009, 19:38) Aber wie ich das auf die einzelnen kanäle abwälzen soll ist mir unklar...  na linksgaehn und rechtsgaehn statt gaehn verwenden  mich verwirrt noch, dass du da keinen graden ton mehr rausbekommst €: grade nochmal nachgerechnet... meinen zahlen nach kommts binär richtig raus. frage ist, ob die vllt anders codieren, um es leichter rechnen zu können das würde die verfälschung/rauschen Dieser Beitrag wurde von stth: 03 Sep 2009, 20:02 bearbeitet
|
|
|
|
|
 04 Sep 2009, 00:52
|

busy office        
Punkte: 1655
seit: 30.06.2006
|
Zitat(stth @ 03 Sep 2009, 19:55) na linksgaehn und rechtsgaehn statt gaehn verwenden  mich verwirrt noch, dass du da keinen graden ton mehr rausbekommst €: grade nochmal nachgerechnet... meinen zahlen nach kommts binär richtig raus. frage ist, ob die vllt anders codieren, um es leichter rechnen zu können das würde die verfälschung/rauschen  Ich hab keine Ahnung, ich kann mir das rauschen auch nicht erklären.
|
|
|
|
|
 04 Sep 2009, 10:17
|

busy office        
Punkte: 1655
seit: 30.06.2006
|
Zitat(stth @ 04 Sep 2009, 07:45) heißt das rauschen eigentlich, dass nur rauschen ist, oder einfach nur ein rauschen drunter liegt? fall 2teres: da kanns daran liegen, dass die signal-quantisierung logaritmisch ist und wir das signal linear verstärken. das geht natürlich schief. müsste man mal die wav-spec lesen. fall1teres: was sagt denn das java doc der gain control api über die codierung? €: hast du da mal in den code geguckt, wenn der offen ist?  es liegt ein rauschen drunter. ich hab mir die openjdk heruntergeladen aber keine sound api gefunden (die da mit drin sein müsste). das gain control wird jedenfalls logarithmisch angesteuert. die gain control für die komplette line liegt zwischen -79 und +6 db. Aber wie sollte ich das denn auf den kanal umwelzen?ä
|
|
|
1 Nutzer liest/lesen dieses Thema (1 Gäste)
0 Mitglieder:
|