Просто заради обговорення я виведу клас з JUCE під назвою AudioSampleBuffer . Зараз цей клас існує, щоб вмістити фрагмент аудіо (або, можливо, досить довгий фрагмент) аудіо. Він знає кількість каналів, кількість вибірок (на канал), схоже, прихильне до 32-бітового IEEE float, а не зі змінним числовим поданням чи розміром слів (але це не є проблемою для мене). Існують функції членів, які дозволяють отримати numChannels або numSamples та покажчики на будь-який конкретний канал. Ви можете зробити AudioSampleBuffer довше або коротше. Я припускаю, що колишній нуль-прокладки буфера, а другий скорочується.
Є кілька приватних членів цього класу, які використовуються для виділення місця в спеціальній купі, яку використовує JUCE.
Але цього не вистачає AudioSampleBuffer (і я мав кілька дискусій з Жулем про це): член подзвонив SampleRate
. Як міг цього пропустити?
Єдиною відповідальністю, яку потрібно виконати AudioSampleBuffer, є адекватне представлення фізичного звуку, який він чує, що представляють його зразки. Коли ви вводите AudioSampleBuffer з чогось, що читає звуковий файл або з потоку, є додатковий параметр, який потрібно отримати та передати разом з AudioSampleBuffer методам обробки (скажімо, це фільтр), який повинен знати швидкість вибірки або, врешті-решт, до методу, який відтворює буфер, щоб його почули (або передає його кудись інше). Що б там не було.
Але ви повинні продовжувати передавати цей SampleRate, який притаманний конкретному звуку, що живе в AudioSampleBuffer, всюди. Я бачив код, де постійну 44100.0f передавали функції, тому що програміст, здавалося, не знав, що ще робити.
Це приклад невиконання своєї єдиної відповідальності.