Solo per motivi di discussione, presenterò una lezione da JUCE chiamata AudioSampleBuffer . Ora questa classe esiste per contenere uno snippet (o forse un frammento piuttosto lungo) di audio. Conosce il numero di canali, il numero di campioni (per canale), sembra essere impegnato su un float IEEE a 32 bit piuttosto che avere una rappresentazione numerica variabile o parole (ma non è un problema con me). Ci sono funzioni membro che ti permettono di ottenere numChannels o numSamples e puntatori su qualsiasi canale particolare. Puoi rendere AudioSampleBuffer più lungo o più corto. Presumo che il precedente zero pad il buffer mentre il secondo tronca.
Ci sono alcuni membri privati di questa classe che vengono utilizzati per allocare spazio nell'heap speciale utilizzato da JUCE.
Ma questo è ciò che manca AudioSampleBuffer (e ho discusso parecchie discussioni con Jules): un membro chiamato SampleRate
. In che modo potrebbe mancare?
La singola responsabilità che un AudioSampleBuffer deve soddisfare è quella di rappresentare adeguatamente l'audio fisico percepito dai suoi campioni. Quando inserisci un AudioSampleBuffer da qualcosa che legge un file sonoro o da uno stream, c'è un parametro addizionale che devi ottenere e passarlo insieme a AudioSampleBuffer ai metodi di elaborazione (diciamo che è un filtro) che ha bisogno di conoscere la frequenza di campionamento o, alla fine, a un metodo che riproduce il buffer per essere ascoltato (o lo trasmette in qualche altro posto). Qualunque sia.
Ma quello che devi fare è continuare a passare questo SampleRate, che è inerente allo specifico audio che vive nell'AudioSampleBuffer, ovunque. Ho visto codice in cui una costante 44100.0f è stata passata a una funzione, perché il programmatore non sembrava sapere cos'altro fare.
Questo è un esempio di mancato rispetto della sua unica responsabilità.