Как синтезировать звуки фортепиано в Android / Java - PullRequest
4 голосов
/ 03 декабря 2010

Я сделал несколько простых приложений на Android, и подумал, что пришло время для чего-то более сложного.Итак, я подумал, что попробую что-то, что уже есть, но построю это с нуля.Идея состоит в том, чтобы создать приложение, которое позволит пользователю играть на пианино, нажимая виртуальные клавиши на дисплее.Но я не уверен, как синтезировать звук каждой ноты, лучше ли хранить копии каждой ноты в файле или есть более динамичный способ синтеза нот и аккордов на лету.Я работал с C ++, поэтому с NDK все в порядке.Спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 03 декабря 2010

Воспроизведение звука (передача буферов) в значительной степени должно быть сделано с Android java apis

Синтез может быть выполнен на нативном или Java, в зависимости от того, что предпочтительнее.

Короткие (несжатые) сэмплы могут воспроизводиться повторно, но вы, вероятно, также захотите переходный процесс атаки. Возможно, у вас может быть атака, сустейн и освобождение, повторение сустейна, пока нажата клавиша. В идеале каждая выборка должна составлять целое число периодов ее основного компонента, чтобы вы не получали кратковременный переход при переходе между атакой, чтобы выдержать или выдержать, чтобы затухать.

Я уверен, что вы можете найти где-нибудь код для FM или другого синтезатора ... это вы, возможно, захотите внедрить в нативную библиотеку, которая передает буфера в код Java для передачи в аудио API.

Плохо то, что в Android уже есть встроенный миди-синтезатор, но ему явно не хватает динамического интерфейса, поэтому он может воспроизводить только миди-файлы.

1 голос
/ 03 декабря 2010

Безусловно, самым простым решением было бы записать звук каждой ноты на пианино и воспроизвести его при нажатии клавиши. Многие профессиональные инструменты виртуального пианино работают таким образом, записывая каждую ноту на пианино, играемую с разной скоростью. Очевидно, что это может занять много гигабайт дискового пространства, но для приложения для мобильного телефона вам может потребоваться запись одной ноты в формате MP3 каждой октавы.

На самом деле алгоритмически синтезировать звук пианино очень сложно, и до недавнего времени очень немногие убедительно это делали ( pianoteq - одна из лучших современных реализаций).

...