Solo por el bien de la discusión, mencionaré una clase de JUCE llamada AudioSampleBuffer . Ahora esta clase existe para contener un fragmento (o quizás un fragmento bastante largo) de audio. Sabe que la cantidad de canales, la cantidad de muestras (por canal), parece estar comprometida con el flotante IEEE de 32 bits en lugar de tener una representación numérica variable o un tamaño de palabras (pero eso no es un problema para mí). Hay funciones miembro que le permiten obtener numChannels o numSamples y punteros a cualquier canal en particular. Puede hacer que un AudioSampleBuffer sea más largo o más corto. Supongo que los primeros cero-pads el búfer, mientras que el último se trunca.
Hay algunos miembros privados de esta clase que se utilizan para asignar espacio en el montón especial que utiliza JUCE.
Pero esto es lo que falta AudioSampleBuffer (y he tenido varias discusiones con Jules al respecto): un miembro llamó SampleRate
. ¿Cómo puede faltar eso?
La única responsabilidad que debe cumplir un AudioSampleBuffer es representar adecuadamente el audio físico que se escucha que representan sus muestras. Cuando ingresa un AudioSampleBuffer de algo que lee un archivo de sonido o de una transmisión, hay un parámetro adicional que debe obtener y pasarlo junto con el AudioSampleBuffer a los métodos de procesamiento (digamos que es un filtro) que necesita conocer la frecuencia de muestreo o, finalmente, a un método que reproduce el búfer para ser escuchado (o lo transmite a otro lugar). Lo que sea.
Pero lo que tiene que hacer es continuar pasando este SampleRate, que es inherente al audio específico que vive en AudioSampleBuffer, por todas partes. He visto código donde se pasó una constante 44100.0f a una función, porque el programador no parecía saber qué más hacer.
Este es un ejemplo de incumplimiento de su responsabilidad única.