Sound Amplitude ermitteln bzw Sound auslöschen

athikka

Aktives Mitglied
Hallo

Stimmt es wenn ich mit der targetdataline ein Sound Signal aufnehme, dass die Byte werte im
Array die Amplituden darstellen? Also -128 und 128 sind sehr laut und 0 ist still? Oder ist das anders aufgebaut? (signed)

Ich wurde nämlich gerne das Signal einfach halb so laut bzw. Doppelt so laut machen...
Aber es muss im Byte Array passieren und nicht per gaincontrols...

Kann ich auch davon ausgehen dass wenn ich zb array1-array2 rechne ( beides soundbuffer) dass dann aus dem signal1 das 2te "herausgelöscht" wird (Zb Störungen)?

Danke schon im Vorraus!

Lg
 
niemand eine idee?

z.b. wie ich sound leiser mahcen kann / ermitteln kann wann 1 sekunde vorbei ist?


Java:
        byte[] soundBuffer = new byte[2000];
			
	while(true){
	   captureDataLine.read(soundBuffer, 0, soundBuffer.length);

        //lautstärke leiser machen bzw. ermitteln
        // rausfinden, wann 1 sekunde vergangen ist (nach wievielen bytes des buffers)

        }
 
Wann 1 sec vorbei ist kannst du an den bytes die du verarbeitet hast abzählen. Natürlich musst du die Sample-Einstellung des Audiofiles berücksichtigen.

Bei einer Samplingrate von 44.1kHz und 16 Bit Samples, solltest du bei einer Mono-Spur 88200 bytes pro Sekunde haben.

44.1kHz und 16 bit - Mono.. rechnet sich so:

44100 mal pro Sekunde fallen 16 bit Daten an. 16 bit = 2 bytes
Von daher: 44100Hz * 2 byte * 1 Tonspur= 88200

Hoffe ich hab kein Denkfehler in der Rechnung drin.



- Alex
 
Willst du den Stream nur leise abspielen, oder willst du die Amplitude des Streams reduzieren, so dass du ggf. den Stream irgendwo mit niedrigerer Amplitude abspeichern kannst??

In beiden Fällen ist das hier eigentlich die erste Anlaufstelle: Java Sound Resources

Ist nicht immer ganz einfach das passende zu finden, aber eine bessere Doku zum Thema Audio und Java ist mit nicht bekannt.

- Alex
 

Zurück
Oben