Hallo Community,
Ich hab ein Problem dabei einen AudioInputStream auf einen Ton hin zu durchsuchen.
Ich habe eine Audiodatei, die etwa 70 Millisekunden dauert und nur einen Ton beinhält. Diese Wandel ich in einen Byte-Array (1) um. Dann nehm ich ständig etwa 5 Sekunden vom Mikrofon-eingang auf, wandel es in einen Byte-Array (2) um und gleich es mit (1) ab und zwar byte für byte.
Quelltext:
selbst wenn ich genau den ton in dauerschleife anleg, wird m, also die Übereinstimmung nicht größer als 3, obwohl es meiner überlegung nach 100 sein sollte
Ich bin sicher, dass sowohl Array (1), als auch (2) mit daten gefüllt sind.
Meine Vermutung ist, dass man 2 durch die methode AudioInputStream.read(byte[]) gefüllte Arrays nicht so ohne weiteres vergleichen kann, weiß aber nicht genau wie ich das Problem anders lösen könnte.
Falls es wichtig ist die beiden Arrays sind von AudioStreams mit einer SampleRate von 11025 Herz, einer SampleSizeInBits 8, 2 channels, FrameSize 2 und FrameRate 11025 gefüllt worden.
Vielen Dank im Vorraus und viele Grüße,
Jonas
Ich hab ein Problem dabei einen AudioInputStream auf einen Ton hin zu durchsuchen.
Ich habe eine Audiodatei, die etwa 70 Millisekunden dauert und nur einen Ton beinhält. Diese Wandel ich in einen Byte-Array (1) um. Dann nehm ich ständig etwa 5 Sekunden vom Mikrofon-eingang auf, wandel es in einen Byte-Array (2) um und gleich es mit (1) ab und zwar byte für byte.
Quelltext:
Java:
public boolean abtasten(byte[] s) //Byte-Array des zu durchsuchenden Aufgenommem
{
byte[] searchingTone = archive.searchToneGeben(); //Byte-Array des zu Suchenden Tons
//Beginn der Abgleich-Schleife
for(int i = 0; i < s.length - searchingLength; i++)
{
int match = 0;
for(int k = 0; k < searchingToneLength; k ++)
{
if(s[i+k] == searchingTone[k])
{
match ++;
}
}
//Ende der AbgleichSchleife
double m = ( (double)match / (double)searchingToneLength ) * 100;
//wenn die Übereinstimmung größer als 60% ist wird noch nach mehr gesucht, für mein Problem aber unwichtig
if( m > 60)
{
if(abtastenGenau(s))
{
return true;
}
}
}
return false;
}
selbst wenn ich genau den ton in dauerschleife anleg, wird m, also die Übereinstimmung nicht größer als 3, obwohl es meiner überlegung nach 100 sein sollte
Ich bin sicher, dass sowohl Array (1), als auch (2) mit daten gefüllt sind.
Meine Vermutung ist, dass man 2 durch die methode AudioInputStream.read(byte[]) gefüllte Arrays nicht so ohne weiteres vergleichen kann, weiß aber nicht genau wie ich das Problem anders lösen könnte.
Falls es wichtig ist die beiden Arrays sind von AudioStreams mit einer SampleRate von 11025 Herz, einer SampleSizeInBits 8, 2 channels, FrameSize 2 und FrameRate 11025 gefüllt worden.
Vielen Dank im Vorraus und viele Grüße,
Jonas