То, что раскручивается, говорит:
out_sample = in_sample * volume / 255;
Если вы работаете с настоящим DSP-чипом или оборудованием без быстрых делителей, вы можете использовать этот трюк для получения тех же значений без деления:
int product = in_sample * volume;
out_sample = (product + (product>>8) + 1)>>8;
На современном DSP, таком как C64x +, этот код работает примерно в 10 раз быстрее ...
Также:
Вы говорите о громкости, и в настоящее время вы применяете 8-битную громкость в качестве коэффициента линейного усиления. Тем не менее, наши уши интерпретируют объем как логарифмический эффект. Вы можете сделать преобразование из дБ (ваши 8 бит) в линейное усиление до умножения. Просчитайте их и положите в стол. Пока вы делаете это, вы можете также повысить масштаб значения до 2 ^ 15 для большей точности.
Это даст вам гораздо более приятный отклик, и гораздо меньше кликов, чем вы, делает затухание громкости.