9

Android アプリから直接、小さな MP4 オーディオ + ビデオ ファイルを動的に生成しようとしています。

私の当初の攻撃計画:

  1. ユーザーがいくつかの基本的な曲データ (コード進行など) を入力すると、アプリが MIDI ファイルを作成します。

  2. システムはコードごとにコード ダイアグラムを作成し、MIDI リーダーを使用して、MIDI に合わせてアニメーション フレーム配列を生成します。

  3. MIDIを生のPCMオーディオデータに変換します<-このSOの質問はこの時点に固有のものです

  4. 生のオーディオをアニメーション フレームに適用し、オーディオ フレームとビデオ フレームを MP4 にエンコードします。

  5. 標準の再生コントロールを使用して、結果の MP4 ビデオをユーザーに提供します。

アプリは、テンポ、楽器、音符などのユーザー入力に基づいて MIDI ファイルを既に作成しています。この部分は簡単に実行でき、MIDI ファイルは正しく生成されています。この MIDI は、Android の MediaPlayer から正常に再生されます。(ステップ1)

アニメーション フレームも、MIDI ファイルを読み戻し、シーケンス内の各コードの静的ビットマップのリストを相互参照することによって、正しく作成されています。これらのフレームはビデオになりますが、最初は音声がありません。(ステップ2)

ご覧のとおり、リアルタイム シンセサイザー アプリを作成していないため、Android MIDI レイテンシの問題はそれほど問題ではありません... MIDI をミックスできるオーディオ形式に変換したいだけです。オリジナルの MIDI に既にタイミングが合わせられているビデオに変換します。(ステップ 3)


私が直面している問題は、ステップ 3 です。

ソフトウェア MIDI シンセサイザーを使用して、一連の MIDI イベントから生成される実際のオーディオ出力を取得する必要があることを理解しています。ただし、これを正しく機能させることが大きなハードルになっています。結果として得られるオーディオの正確な品質については気にしません。一般的なデバイス (ala Gravis サウンドフォントやビルトインの Sovinox サウンドなど) からの General MIDI サンプルを使用した場合に誰かが期待するものと非常によく一致することだけです。

そう...

  1. Android MIDI ライブラリ

  2. Sonivox EAS ライブラリを使用した Android Midi ドライバー

私の最初の試みは、上記の 2 つのプロジェクトでした... MIDI ファイルを生の PCM データ バッファーに変換できるようにそれらをマッシュアップします... まだうまくいきません。

midi ライブラリ (1) は、リアルタイム リスナーで MIDI ファイルを読み取り、オンボード シンセサイザーによって生成された生の PCM データを再生する Midi ドライバー (2) にイベントを送信します。

(注: ドライバーにいくつかの微調整が加えられ、バッファー全体が保存され、MIDI リーダーが終了した後にのみ返されるようになりました。これは、プロセス全体が曲の長さに等しい時間を変換するだけでかかることも意味します。リアルタイムで「聞いている」からです。)

私はまだこれを期待どおりに機能させていません。これをできるだけシンプルに保ち、可能であればオープン ソース プロジェクトを使用することを好みました。リアルタイムリスナーに依存せずにこれを行うことができればより良いでしょう.


私が検討している他のいくつかのライブラリとツール(ただし、やり過ぎかもしれません):

  1. Android 用のピュア データ ライブラリ

  2. MidiSheetMusic アプリ (ソース付き)

  3. C++ の合成ツールキット (STK)

  4. Android用音楽シンセ

  5. クリムゾンソフトシンセ

さらに多くの候補 (まだ多くの調査は行われていません):

jFugue/timidity/audacity/fluidSynth/cSound/jMusic/JSyn/Gervill/Softonic/Cau​​stic/LibGDX/JetPlayer/OpenSL-ES


私の質問は次のとおりです。

  • 上記のプロジェクトで正しい道を進んでいますか? 私は MIDI->PCM 変換に比較的慣れていないので、何かを完全に見逃していないことを確認したいと思います。

  • そうでない場合、MIDI ファイルを何らかのオーディオ形式に変換して、MP4 (または任意のビデオ再生形式) の作成に使用できるようにするにはどうすればよいですか?

  • Android を使用して MIDI 2 生のオーディオ波形を変換するこの作業に役立つオープン ソース プロジェクトは他にありますか?

  • そして、Android で使用するために既に作成されたそのようなタスクの例はありますか? (つまり、すでに Android JNI などで使用するために移植されています)

私の願いは、これを些細な作業にする何かを完全に見逃したことです...これには深刻なハッキングとJNIのカンフーが必要になると思います。

それが必要なら、私は困難な道を進んでも構わないと思っています。あらゆるアドバイスをいただければ幸いです。

4

2 に答える 2