Nur zum Zwecke der Diskussion werde ich eine Klasse von JUCE mit dem Namen AudioSampleBuffer aufrufen . Nun existiert diese Klasse, um ein Snippet (oder vielleicht ein ziemlich langes Snippet) von Audio aufzunehmen. Es ist bekannt, dass die Anzahl der Kanäle und die Anzahl der Samples (pro Kanal) offenbar auf 32-Bit-IEEE-Float festgelegt sind, anstatt eine variable numerische Darstellung oder Wortgröße zu haben (aber das ist für mich kein Problem). Es gibt Member-Funktionen, mit denen Sie die numChannels oder numSamples und Zeiger auf einen bestimmten Kanal abrufen können. Sie können einen AudioSampleBuffer länger oder kürzer machen. Ich gehe davon aus, dass die ersteren den Puffer mit Nullen auffüllen, während die letzteren abschneiden.
Es gibt einige private Member dieser Klasse, die zum Zuweisen von Speicherplatz in dem von JUCE verwendeten speziellen Heap verwendet werden.
Aber das ist, was AudioSampleBuffer fehlt (und ich habe mehrere Diskussionen mit Jules darüber geführt): Ein Mitglied hat angerufen SampleRate
. Wie konnte es daran fehlen?
Die einzige Verantwortung, die ein AudioSampleBuffer erfüllen muss, besteht darin, das physische Audio, das man hört, das seine Samples darstellen, angemessen darzustellen. Wenn Sie einen AudioSampleBuffer aus etwas eingeben, das eine Sounddatei oder einen Stream liest, müssen Sie einen zusätzlichen Parameter abrufen und zusammen mit dem AudioSampleBuffer an Verarbeitungsmethoden übergeben (z. B. einen Filter), die die Samplerate kennen müssen, oder schließlich zu einer Methode, die den Puffer abspielt, um gehört zu werden (oder ihn an einen anderen Ort zu streamen). Wie auch immer.
Sie müssen diese SampleRate, die dem spezifischen Audio im AudioSampleBuffer eigen ist, jedoch weiterhin an alle Stellen weitergeben. Ich habe Code gesehen, in dem eine Konstante 44100.0f an eine Funktion übergeben wurde, weil der Programmierer anscheinend nicht wusste, was er sonst tun sollte.
Dies ist ein Beispiel für die Nichterfüllung seiner alleinigen Verantwortung.