Функция JSyn для воспроизведения звуков

Я недавно работаю над проектом на Java и использую SE 8. Я построил пианино, которое воспроизводит музыку, воспроизводя несколько файлов wav, например, у меня 5 органов, и каждая кнопка моего пианино представляет собой одну ноту выбранной музыки. инструмент. Инструменты выбираются из кнопок сверху.

Тем не менее, я знаю, что могу также генерировать музыку, используя JSyn, а не просто "вызывая" wavs для воспроизведения. Может ли кто-нибудь помочь с тем, как начать, потому что я не нашел учебники для этого. Мне просто нужно найти способ использовать функцию для моих клавиш и просто ввести разные значения (я полагаю), чтобы изменить звук каждой клавиши. Есть идеи?

1 ответ

Решение

Если вы хотите воспроизводить синтезированные звуки с помощью JSyn, вы можете найти здесь пример, использующий клавиатуру MIDI:

https://github.com/philburk/jsyn/blob/master/tests/com/jsyn/examples/UseMidiKeyboard.java

Он показывает, как использовать VoiceAllocator для управления несколькими голосами. Ключевой фрагмент кода:

double frequency = convertPitchToFrequency(noteNumber);
double amplitude = velocity / (4 * 128.0);
TimeStamp timeStamp = synth.createTimeStamp();
allocator.noteOn(noteNumber, frequency, amplitude, timeStamp);

Если вы хотите воспроизвести сэмплы из файлов WAV, пример можно найти здесь:

https://github.com/philburk/jsyn/blob/master/tests/com/jsyn/examples/PlaySample.java

В строке 83 написано:

samplePlayer.rate.set(sample.getFrameRate());

Это воспроизведет семпл с исходной высотой, на которой он был записан.

Вы можете масштабировать скорость так, чтобы она играла на разных высотах. Например, масштабируйте на 2,0, чтобы поднять октаву, или на 1,5, чтобы поднять на пятую:

samplePlayer.rate.set(1.5 * sample.getFrameRate());

Если вы увеличите или уменьшите масштаб, это будет звучать странно. Таким образом, вы, вероятно, захотите использовать несколько семплов и выбрать семпл, наиболее близкий к желаемой высоте.

Другие вопросы по тегам