|
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
|
|
 04 Sep 2009, 10:34
|

busy office        
Punkte: 1655
seit: 30.06.2006
|
Wow geil es funktioniert hab jetzt das gemacht - also Rauschunterdrückung ist jetzt drin, ist noch nicht komplett weg. Aber da muss ich noch bisschen herumspielen vllt krieg ich das noch hin. CODE for(int c=0; c<Constants.getBufferlength()-4; c+=4) { arrayLeft[c] = (byte) Math.min(Math.max((arrayLeft[c]*(Math.exp(leftGain*2)-1)/(Math.E-1)), -128), 127); arrayLeft[c+1] = (byte) Math.min(Math.max((arrayLeft[c+1]*(Math.exp(leftGain*2)-1)/(Math.E-1)), -128), 127); arrayRight[c+2] = (byte) Math.min(Math.max((arrayRight[c+2]*(Math.exp(leftGain*2)-1)/(Math.E-1)),-128),127); arrayRight[c+3] = (byte) Math.min(Math.max((arrayRight[c+3]*(Math.exp(rightGain*2)-1)/(Math.E-1)), -128), 127); }
|
|
|
|
|
 04 Sep 2009, 12:14
|

busy office        
Punkte: 1655
seit: 30.06.2006
|
Zitat(sn3ek @ 04 Sep 2009, 10:34) Wow geil es funktioniert hab jetzt das gemacht - also Rauschunterdrückung ist jetzt drin, ist noch nicht komplett weg. Aber da muss ich noch bisschen herumspielen vllt krieg ich das noch hin. CODE for(int c=0; c<Constants.getBufferlength()-4; c+=4) { arrayLeft[c] = (byte) Math.min(Math.max((arrayLeft[c]*(Math.exp(leftGain*2)-1)/(Math.E-1)), -128), 127); arrayLeft[c+1] = (byte) Math.min(Math.max((arrayLeft[c+1]*(Math.exp(leftGain*2)-1)/(Math.E-1)), -128), 127); arrayRight[c+2] = (byte) Math.min(Math.max((arrayRight[c+2]*(Math.exp(leftGain*2)-1)/(Math.E-1)),-128),127); arrayRight[c+3] = (byte) Math.min(Math.max((arrayRight[c+3]*(Math.exp(rightGain*2)-1)/(Math.E-1)), -128), 127); }  // edit mein chef meint dass das falsch wäre die pegelanpassung mit logarithmischen werten zu füttern. WTF?! ich seh echt nicht mehr durch
|
|
|
|
|
 04 Sep 2009, 12:57
|

dLikP       
Punkte: 1497
seit: 06.10.2006
|
Zitat(sn3ek @ 04 Sep 2009, 12:14) // edit mein chef meint dass das falsch wäre die pegelanpassung mit logarithmischen werten zu füttern. WTF?! ich seh echt nicht mehr durch  Und was soll richtig sein? Is doch ansich piepegal ob man das linear oder logarithmisch macht, kommt doch aufs gleiche raus.
--------------------
flickrUnd wenn sie kommt, fährt sie an uns vorbei -RaT-
|
|
|
1 Nutzer liest/lesen dieses Thema (1 Gäste)
0 Mitglieder:
|