Как стать автором
Обновить

Комментарии 4

Мне интересно, как вы реализовали преобразование последовательности пар (номер_такта, амплитуда) в сигнал частотой 44100 Hz. Ведь за один семпл звукового результирующего сигнала переключений может произойти несколько
Я не совсем понял вопрос, но попробую ответить.

Говоря о том, что сэмплы генерируются с с тем же темпом, что и процессор, я имел ввиду следующее. Я завел счетчик с периодом в тактах, равным 4194304/{частота дискретизации}, т.е. частота процессора деленная на частоту дискретизации. Он так же как и все остальные компоненты синхронизирован с процессором. Каждый его отсчет генерирует два сэмпла — для левого и правого уха. Звуковые каналы в процессе работы хранят свое выходное значение амплитуды — его я и забираю при каждом отсчете. Таким образом сэмплы накапливаются в буфер сэмплов, который потом вставляется в кольцевой буфер. Оттуда SDL забирает их на воспроизведение.

По сути, получается довольно грубая передискретизация (resampling).
Понятно, алгоритм Nearest-neighbor.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории