Yowza.Я не совсем понимаю, какие требования предъявляются здесь или что вы делаете.
Мой подход был бы радикально другим, и, возможно, упущен смысл вашей попытки.Он будет иметь следующие элементы:
1) Вывод через SourceDataLine, так как это дает вам ручку, чтобы влиять на громкость каждого кадра.
2) Для каждого кадра обращайтесь к указателю в Sin LUT, который содержит столько же элементов, сколько необходимо для соответствия желаемой скорости.(Но было бы также неплохо просто создать аргумент в синусоидальной функции, которая увеличивает правильную величину каждого кадра, чтобы получить желаемую скорость. Нет необходимости вступать в войну из-за того, что функция или LUT работают лучше.)
3) Умножьте кадр SDL на значение Sin LUT.
Например, LFO 1 Гц будет означать либо LUT из 44100 элементов, либо аргумент, который увеличивается на 1/44100 на кадр.
Что касается получения доступа к отдельным звуковым кадрам, см. Учебное пособие Использование файлов и преобразователей формата / чтение звуковых файлов и найдите в примере пример с комментарием «Вот, сделайте что-нибудь полезное»с аудиоданными, которые теперь находятся в массиве audioBytes ".Эта полезная вещь будет состоять в том, чтобы преобразовать байты в PCM (есть другие способы объяснения StackOverflow), получить значение следующей функции sin и умножить, а затем преобразовать обратно в байты.
РЕДАКТИРОВАТЬ: Глядя в MediaPlayer API, яЯ не уверен, что вы сможете эффективно делать то, что вы хотите с этим классом.
Игрок не готов ответить на команды квази-немедленно, пока его статус не перейдет в MediaPlayer.Status.READY, что, как правило, обычно происходит после завершения предварительного ролика.
Означает ли это какой-то размер буфера, который ограничивает частоту, с которой вы можете делать обновления тома?ИДК.Когда мы сталкиваемся с проблемами размера буфера, которые приводят к максимальному количеству обновлений в секунду, нужно внимательно слушать, чтобы убедиться, что нет щелчков или молний из-за разрывов, когда громкость переходит с одного уровня на другой.Многое также зависит от количества накладных расходов, возникающих под капотом, когда вы устанавливаете положение для каждого изменения громкости.
С выходом SourceDataLine у вас есть чистый доступ к каждому кадру, который в значительной степени устраняет потенциальные проблемы с застежкой-молнией.Я должен добавить заявление об отказе от ответственности, хотя я не работал с MediaPlayer и, возможно, не знаю о возможностях, которыми вы можете воспользоваться.В любом случае, SDL - это низкий уровень, мощный и эффективный.