6

私はAndroidでいくつかの簡単なアプリを作成しましたが、もう少し複雑なものが必要だと思いました。だから、私はすでにそこにある何かを試してみようと思いましたが、それを最初から構築します。

アイデアは、ユーザーがディスプレイ上の仮想キーを押してピアノを弾くことができるアプリを作成することです。しかし、各音符の音を合成する方法がわかりません。各音符のコピーをファイルに保存するのが最善ですか、または音符と和音をその場で合成するより動的な方法があります。

私はC++を使用したことがあるので、NDKのものも問題ありません。助けてくれてありがとう。

4

2 に答える 2

2

サウンドの再生(バッファの受け渡し)は、AndroidのJavaAPIから行う必要があります

合成は、ネイティブまたはJavaのどちらか好ましい方で実行できます。

短い(圧縮されていない)サンプルは繰り返し再生できますが、おそらく一時的な攻撃も必要です。おそらく、キーが押されている限り、攻撃、サステイン、リリースを繰り返し、サステインを繰り返すことができます。理想的には、各サンプルは、その基本コンポーネントの整数周期の長さである必要があります。これにより、アタックからサステインへ、またはサステインからディケイへの切り替え時にトランジェントが発生しなくなります。

FMや他のシンセサイザーのコードはどこかにあると思います...これは、オーディオAPIに渡すためにバッファーをJavaコードに渡すネイティブライブラリに実装することをお勧めします。

残念なことに、AndroidにはすでにMIDIシンセサイザーが内蔵されていますが、動的なインターフェイスがないため、MIDIファイルしか再生できません。

于 2010-12-03T19:22:07.047 に答える
1

はるかに簡単な解決策は、ピアノの各音符の音を録音し、キーが押されたときにそれを再生することです。多くのプロの仮想ピアノ楽器はこのように機能し、複数のベロシティで演奏されているピアノのすべての音を録音します。明らかに、これには数ギガバイトのディスク容量が必要になる可能性がありますが、携帯電話アプリの場合、1オクターブの各音符の単一のMP3録音でうまくいく可能性があります。

実際、ピアノの音をアルゴリズムで合成することは非常に困難であり、ごく最近まで、説得力のある方法で合成したものはほとんどありません(pianoteqは現在の最良の実装の1つです)。

于 2010-12-03T18:44:17.397 に答える