Apenas para fins de discussão, apresentarei uma aula do JUCE chamada AudioSampleBuffer . Agora, essa classe existe para armazenar um trecho (ou talvez um trecho bastante longo) de áudio. Ele sabe que o número de canais, o número de amostras (por canal), parece estar comprometido com a flutuação IEEE de 32 bits, em vez de ter uma representação numérica variável ou tamanho de palavra (mas isso não é um problema para mim). Existem funções de membro que permitem obter o numChannels ou numSamples e ponteiros para qualquer canal específico. Você pode tornar um AudioSampleBuffer mais longo ou mais curto. Presumo que o primeiro zere o buffer, enquanto o último trunca.
Existem alguns membros particulares dessa classe que são usados para alocar espaço no heap especial que o JUCE usa.
Mas é isso que está faltando no AudioSampleBuffer (e eu tive várias discussões com Jules sobre isso): um membro chamado SampleRate
. Como poderia estar faltando isso?
A única responsabilidade que um AudioSampleBuffer precisa cumprir é representar adequadamente o áudio físico que se ouve que suas amostras representam. Quando você insere um AudioSampleBuffer de algo que lê um arquivo de som ou de um fluxo, há um parâmetro adicional que você deve obter e passá-lo junto com o AudioSampleBuffer para métodos de processamento (por exemplo, é um filtro) que precisa conhecer a taxa de amostragem ou, eventualmente, para um método que reproduz o buffer para ser ouvido (ou o transmite para outro lugar). Tanto faz.
Mas o que você precisa fazer é continuar passando esse SampleRate, que é inerente ao áudio específico que está no AudioSampleBuffer, em todos os lugares. Eu vi código em que uma constante 44100.0f foi passada para uma função, porque o programador não parecia saber mais o que fazer.
Este é um exemplo de falha no cumprimento de sua única responsabilidade.