Dla celów dyskusji przywołam klasę JUCE o nazwie AudioSampleBuffer . Teraz ta klasa istnieje, aby przechowywać fragment dźwięku (a może raczej długi fragment) dźwięku. Wie, że liczba kanałów, liczba próbek (na kanał) wydaje się być przypisana do 32-bitowej liczby zmiennoprzecinkowej IEEE, zamiast mieć zmienną reprezentację liczbową lub wielkość słów (ale to nie jest ze mną problem). Istnieją funkcje składowe, które pozwalają uzyskać numChannels lub numSamples i wskaźniki do dowolnego konkretnego kanału. Możesz zwiększyć lub zmniejszyć AudioSampleBuffer. Zakładam, że poprzednie zero-pads bufor, podczas gdy drugi obcina.
Istnieje kilka prywatnych członków tej klasy, które są używane do przydzielania miejsca na specjalnej stercie używanej przez JUCE.
Ale tego właśnie brakuje AudioSampleBuffer (i miałem na ten temat kilka dyskusji z Jules): członek o nazwie SampleRate
. Jak mogło tego brakować?
Jedynym obowiązkiem, który AudioSampleBuffer musi spełnić, jest odpowiednie odwzorowanie fizycznego dźwięku, który słyszy, że reprezentują jego próbki. Po wprowadzeniu AudioSampleBuffer z czegoś, co czyta plik dźwiękowy lub ze strumienia, musisz uzyskać dodatkowy parametr i przekazać go wraz z AudioSampleBuffer do metod przetwarzania (powiedzmy, że jest to filtr), który musi znać częstotliwość próbkowania lub, ostatecznie do metody, która odtwarza bufor, aby go usłyszeć (lub przesyła go strumieniowo do innego miejsca). Cokolwiek.
Ale musisz nadal przekazywać ten parametr SampleRate, który jest nieodłączny od specyficznego dźwięku w AudioSampleBuffer, wszędzie wokół. Widziałem kod, w którym stała funkcji 44100.0f została przekazana do funkcji, ponieważ programista chyba nie wiedział, co jeszcze zrobić.
Jest to przykład niewywiązania się z pojedynczej odpowiedzialności.