Audiofile/Audiostream auswerten

Status
Nicht offen für weitere Antworten.
P

proXy

Gast
Also ich hab ein Audiofile das ich irgendwie auswerten soll, ist mir überlassen. Ich habs mal so gemacht das ich über Mikrofonschnittstelle einen Sound vom keyboard einlese also zB den A ton, ich soll dann den ton auswerten also sprich herausfinden welcher ton das war und wenn jemand zb auf dem Keyboard den A Ton drückt öffnet sich der explorer und wenn man den H ton drückt ein anderes fenster. Ich soll nur unterscheiden können welchen ton ich eingelesen habe ohne das ich zb 2 soundfiles einfach vergleiche hat jemand ne ahnung wie ich das am besten lösen kann. Zurzeit bin ich soweit das ich das eingelesene audiofile mit frequenz anzeigen lassen kann nur gerade sitz ich damit fest
 
G

Guest

Gast
:autsch: krank...

sorry ossi. aber do wird uns keina weiter helfen kenna :cry:
 
P

proXy

Gast
mhm einer ne ahnung wie ich es lösen könnte oder umgehen .... das ich zum gewünschten ergebnis komme
 

Luma

Bekanntes Mitglied
Keine Ahung aber schauh mal im Javakompedium nach, da steht was zu Audiodateien drin...


P.S: Liest du mit deinem Proggi die Daten der Mikrofonschnittstelle?? Wenn ja wie. Würd mich doch sehr interessieren, auch wenn's deinem Problem nicht weiter hilft.
 
S

stev.glasow

Gast
Mit MIDIs sollte das eigentlich ganz gut gehn:
hab mal was zusammen kopiert:

Code:
//		   Sequencer sequencer = MidiSystem.getSequencer();
//		   Transmitter trans = sequencer.getTransmitter();
//		   Synthesizer synth = MidiSystem.getSynthesizer();
//		   Receiver rcvr = synth.getReceiver();
//		   
//		   sequencer.open();
//		   synth.open();
//		   trans.setReceiver(rcvr);
		   Sequence seq = MidiSystem.getSequence(new File("entchen.mid"));
		   Track[] tracks = seq.getTracks();
		   for(int i = 0; i < tracks.length; i++){
			   Track t = tracks[i];
			   System.out.println("Track "+(i+1)+" (" + t.ticks() + " Ticks, "+ t.size()  +" Events):");
			   for(int k = 0; k < t.size(); k++ ){
				   MidiEvent me = t.get(k);
				   byte[] msg = me.getMessage().getMessage();
				   for(int m = 0; m < msg.length; m++){
					   int b = (int)(msg[m] & 0xFF);
//					   int b = msg[m];
					   System.out.print(b + " ");
				   }
				   System.out.println();
			   }
			   
		   }


//		   sequencer.setSequence(seq);
//		   //sequencer.setTempoInBPM(145);
//		   sequencer.start();
//		   while (true) {
//			       try {
//			         Thread.sleep(100);
//			          } catch (Exception e) {
//			           //nothing
//			         }
//			          if (!sequencer.isRunning()) {
//			            break;
//			         }
//			        }
//			      //Sequencer anhalten und Geräte schließen
//			        sequencer.stop();
//			      sequencer.close();
//			        synth.close();
	   }


Datei: http://www.java-forum.org/stevg/entchen.mid
Ausgabe: http://www.java-forum.org/stevg/entchen.txt
Und wenn ich das richtig verstanden habe kommst du über folgende Tabellen: http://www.midi.org/about-midi/table1.shtml
an die Noten, Lautstärke, Effekte, etc
 

kopfsalat

Bekanntes Mitglied
MIDI ist ja auch ganz was anderes. Allerdings für diesen Zweck VIIEEL einfacher und zuverlässiger.

Für Audiodaten:

1. Signal Aufnehmen

2. Eine FFT auf die Audiodaten ausführen, die das Zeit/Amplitude-Signal in ein Frequenz/Amplitude-Spektrum umrechnet (in einem festen Zeitfenster)

Bis hierhin scheinst Du es ja schon geschafft zu haben, denn schließlich stehen Dir die Frequenzen des Signals schon zur Verfügung??

3. Die lautesten Frequenzen raussuchen und daraus den Ton berechnen. (Kammerton A ist 440 Hz jeden Halbton höher erhälst du durch jeweils Multiplikation mit Zwölfter Wurzel aus 2 , also 2^(1/12) (ist auch logisch, da 2^(1/12)^12 = 2, also eine Oktave = Frequenzverdopplung.)
 
S

stev.glasow

Gast
MIDI ist ja auch ganz was anderes.
Echt? Dat is ja n Ding.

Er hat doch geschrieben das er den Sound vom Keyboard vergleichen will, oder nicht? Und dort über gesampeltem Sound zu gehen halte ich nicht für sinnvoll - MIDI ist für solche Sachen doch viel besser geeignet. Mal davon abgesehn dass ich Punkt 3 nicht verstehe.
 

kopfsalat

Bekanntes Mitglied
proXys erster Satz:
Also ich hab ein Audiofile das ich irgendwie auswerten soll, ist ...

Aber WENN proXy ein MIDI-Keyboard zur Verfügung hat (hast Du?) ist das natürlich wirklich DIE Lösung.

Zu Punkt 3:
Wenn du dein Audiosignal ins Spektrum übertragen hast, siehst du ja, welche (Sinus-)Frequenzen (in dem fixen Zeitfenster) wie laut vorhanden sind. Je nachdem, wie groß dein Zeitfenster gewählt war, kann man dabei sehr genau werden.
Komplizierte Signale bestehen jedoch aus übelsten Frequenzkombinationen, so dass man da nicht einfach 1 laute Frequenz sieht, und die anderen sind alle leise. Je Sinusförmiger (also 'klarer', 'piepsiger') der Ton ist, desto besser lässt sich dessen Haupt-Frequenz bestimmen.
Auch könnte man nicht nur einzelne Frequenzen betrachten, sondern jeweils die Basisfrequenzen mit ihren Harmonischen, und dann schauen, welche davon die lautesten Kombinationen sind.
Allerdings ist das Ton-Ermitteln aus Audiosignalen, die nicht nur einfach eine einzelne Gitarrenseite o.ä. sind, schwierig bis teilweise unmöglich (ohne vielleicht in 50 Jahren mit neuronalen Netzen, oder sowas, denn schließlich können Menschen ja auch bestehende Musikstücke in Noten niederschreiben).
 
P

proXy

Gast
Oha danke für die vielen antworten ...

@Luma jo les es über die Mikrofonschnittstelle vom PC ein

@Kopfsalat leider ist das Keyboard nicht MIDI Fähig ist ein älteres und nicht sehr funktionsreiches Keyboard,
also zurzeit kann ich die Kurve mit FFT darstellen jedoch muss ich nur noch einen kleinen Fehler
ausbessern. Naja werd mal deine hilfreiche Info ausprobieren danke
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Statistische Auswertung von Logfiles (Einlesen, auswerten und grafische Aufbereitung von logfiles) mit Java Allgemeine Java-Themen 9
M Selenium JUnit Tests (Auswahl von Testmethoden auswerten) Allgemeine Java-Themen 5
L SWT Mathematische Formel mit SWT Textfield auswerten? Allgemeine Java-Themen 3
A interaktives PDF auslesen/auswerten? Allgemeine Java-Themen 0
Z Auswerten eines eingegeben Termes Allgemeine Java-Themen 13
M XML auswerten Allgemeine Java-Themen 1
N Method-Annotations in aufgerufener Methode auswerten Allgemeine Java-Themen 2
R CSV-Datei (korrupt?) auswerten Allgemeine Java-Themen 9
W Annotations selbst erstellen und auswerten Allgemeine Java-Themen 4
M Konstruktoraufruf dynamisch auswerten und SQL bauen Allgemeine Java-Themen 10
H Dokumente auswerten Allgemeine Java-Themen 6
I Große Datei am effektivsten/performantesten auslesen und auswerten? Allgemeine Java-Themen 6
A Wie eine Seriennummer erzeugen und auswerten? Allgemeine Java-Themen 11
G Große XML-Dateien einlesen und auswerten . Allgemeine Java-Themen 2
M Date Range auswerten und die Monate berechnen Allgemeine Java-Themen 2
D Befehlszeilenparameter auswerten Allgemeine Java-Themen 3
P command line parameter auswerten Allgemeine Java-Themen 3
K Einen String als Bedingung auswerten Allgemeine Java-Themen 7
S Logfile auswerten Allgemeine Java-Themen 2
I Fragen zum Internetseiten Einlesen/Auswerten Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben