6 Stimmen

Wie man Klavierklänge in Android/java synthetisiert

Ich habe ein paar einfache Apps für Android entwickelt und dachte, es wäre an der Zeit für etwas Komplexeres. Also dachte ich, ich würde etwas versuchen, das bereits da draußen ist, aber bauen Sie es von Grund auf.

Die Idee ist, eine App zu entwickeln, die es dem Benutzer ermöglicht, durch Drücken virtueller Tasten auf dem Display Klavier zu spielen. Aber ich bin mir nicht sicher, wie ich den Klang jeder Note synthetisieren soll. Ist es am besten, Kopien jeder Note in einer Datei zu speichern, oder gibt es einen dynamischeren Weg, um Noten und Akkorde on the fly zu synthetisieren?

Ich habe mit C++ gearbeitet, also ist das NDK-Zeug auch okay. Danke für jede Hilfe.

2voto

Chris Stratton Punkte 39229

Die Tonwiedergabe (Übergabe von Puffern) muss größtenteils von den Android-Java-Api's übernommen werden

Die Synthese kann in Native oder Java erfolgen, je nachdem, was bevorzugt wird.

Kurze (unkomprimierte) Samples könnten wiederholt abgespielt werden, aber Sie wollen wahrscheinlich auch einen Attack-Transienten. Vielleicht könnten Sie einen Attack, einen Sustain und einen Release haben, wobei der Sustain so lange wiederholt wird, wie die Taste gedrückt ist. Idealerweise sollte jedes Sample eine ganzzahlige Anzahl von Perioden seiner Grundtonkomponente lang sein, damit Sie beim Wechsel von Attack zu Sustain oder Sustain zu Decay keine Einschwingphase erhalten.

Ich bin mir sicher, dass Sie irgendwo Code für einen FM- oder anderen Synthesizer finden können ... dies könnten Sie auch in einer nativen Bibliothek implementieren wollen, die Puffer an Java-Code weitergibt, um sie an die Audio-Api zu übergeben.

Schade ist, dass Android bereits über einen internen Midi-Synthesizer verfügt, dem aber offenbar eine dynamische Schnittstelle fehlt, so dass er nur Midi-Dateien abspielen kann.

1voto

Mark Heath Punkte 46572

Die bei weitem einfachste Lösung wäre, den Klang jeder Note auf dem Klavier aufzunehmen und beim Drücken der Taste abzuspielen. Viele professionelle virtuelle Klavierinstrumente arbeiten auf diese Weise und nehmen jede Note des Klaviers auf, die in verschiedenen Geschwindigkeiten gespielt wird. Das kann natürlich viele Gigabytes an Speicherplatz beanspruchen, aber für eine Handy-App könnte man mit einer einzigen MP3-Aufnahme jeder Note in einer Oktave auskommen.

Es ist sehr schwierig, den Klang eines Klaviers algorithmisch zu synthetisieren, und bis vor kurzem ist dies nur wenigen überzeugend gelungen ( pianoteq ist eine der besten aktuellen Implementierungen).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X