Манипулировать последовательными звуковыми файлами в java
Я пытаюсь сделать фортепианную песню с отдельными звуковыми файлами для хлопков фортепиано. Я сделал версию на javascript, с WebAudioAPI, используя осциллятор вместо аудиофайлов. Вот часть кода вне контекста:
var ctx = new AudioContext();
var time = ctx.currentTime;
for(...){
osc = ctx.createOscillator();
osc.start(time);
time = time + 3;
osc.stop(time);
osc.disconnect(time);
}
Я не знаю, как остановить аудиофайл, как я сделал с осциллятором.(PS) Я сохранил только ту часть кода, которая имела отношение к моему вопросу, поэтому, пожалуйста, игнорируйте его функциональность.
Спасибо!
1 ответ
С клипом используется метод остановки воспроизведения. Последующий вызов возобновит воспроизведение с той же точки. Но можно изменить точку воспроизведения на новое место с помощью
setFramePosition()
или же
setMicrosecondPosition()
методы.
С SourceDataLine также можно использовать
start()
а также
stop()
методы. Но переход на новую точку воспроизведения ограничен и более сложен. Можно двигаться только вперед, и это делается с помощью метода skip() , который используется для получения данных, выводимых через .
Если звук, который вы воспроизводите, предназначен для воспроизведения только один раз, я бы предпочел использовать расширение . Если вы собираетесь воспроизводить звук повторно, многократно, и держать данные в памяти не в тягость, то
Clip
вероятно, будет лучшим выбором.
С
SourceDataLine
вы не ограничены в использовании
AudioInputStream
в качестве исходного сигнала. Вы также можете использовать самодельный осциллятор или синтезатор. Преобразование выхода генератора, если это PCM, должно быть обработано, чтобы соответствовать аудиоформату в этом случае.