Ich bin nicht sicher, welche WaveIn.cs Klasse, die Sie verwenden, aber in der Regel mit Code, der Audio-Aufzeichnungen, Sie entweder A) sagen, der Code die Aufnahme zu starten, und dann zu einem späteren weisen Sie darauf hin, dass der Code beendet wird, und Sie erhalten ein Array (normalerweise vom Typ short []), das die während dieses Zeitraums aufgezeichneten Daten enthält; oder B) weisen Sie den Code an, die Aufzeichnung mit einer bestimmten Puffergröße zu starten, und wenn jeder Puffer gefüllt ist, führt der Code einen Rückruf zu einer Methode aus, die Sie mit einem Verweis auf den gefüllten Puffer definiert haben. Dieser Prozess wird fortgesetzt, bis Sie ihn angeben um die Aufnahme zu stoppen.
Angenommen, Ihr Aufzeichnungsformat beträgt 16 Bit (aka 2 Byte) pro Sample, 44100 Samples pro Sekunde und Mono (1 Kanal). Im Fall von (A) nehmen wir an, dass Sie mit der Aufnahme beginnen und dann genau 10 Sekunden später die Aufnahme stoppen. Sie werden mit einem kurzen Array [] enden, das 441.000 (44.100 x 10) Elemente lang ist. Ich weiß nicht, welchen Algorithmus Sie verwenden, um "Taps" zu erkennen, aber nehmen wir an, dass Sie Taps in diesem Array bei Element 0, Element 22.050, Element 44.100, Element 66.150 usw. erkennen. Dies bedeutet, dass Sie alle Taps finden. 5 Sekunden (weil 22.050 die Hälfte von 44.100 Samples pro Sekunde ist), was bedeutet, dass Sie 2 Taps pro Sekunde und damit 120 BPM haben.
Im Fall von (B) nehmen wir an, dass Sie die Aufnahme mit einer festen Puffergröße von 44.100 Samples beginnen (auch bekannt als 1 Sekunde). Wenn jeder Puffer ankommt, finden Sie Abgriffe bei Element 0 und bei Element 22.050. Mit derselben Logik wie oben berechnen Sie 120 BPM.
Hoffe, das hilft.Bei der Beat-Erkennung im Allgemeinen ist es am besten, für eine relativ lange Zeit aufzunehmen und die Beats durch eine große Datenmenge zu zählen. Der Versuch, das "augenblickliche" Tempo zu schätzen, ist schwieriger und fehleranfällig, genauso wie das Schätzen der Tonhöhe einer Aufnahme in Echtzeit schwieriger ist als das Aufnehmen einer vollen Note.
Also wenn ich mono mache, repräsentiert jede dieser Zahlen in meinem Array ein Sample für einen Kanal? Wenn ich 2 Kanäle tun würde würde mein Array dann 88200 in der Größe? Wechseln zwischen den Kanälen? – zac
Ja, Stereo bedeutet, dass Sie doppelt so viele Samples pro Sekunde haben und die Samples verschachtelt sind (links, rechts, links, rechts usw.), so dass die Elemente 0, 2, 4, 6 usw. Daten für den linken Kanal darstellen Elemente 1, 3, 5, 7 usw. repräsentieren Daten für den rechten Kanal. – MusiGenesis
Eine andere Frage: Wenn ich ein fft hier mache, um die Amplitude zu erhalten, gibt es die halbe Größe meines ursprünglichen Arrays zurück. Aus dem, was ich gelesen habe, ist dies, weil es es in einen Real- und Imaginärteil konvertiert und beide verwendet, um die Amplitude zu erhalten. Wie lauten nun die einzelnen Werte in diesem Array? 2 Proben? – zac