2

ORGファイルを直接WAVファイルに変換できるプログラムを作ろうとしています。ORG 形式は、特定の楽器をいつ、どのように演奏するかについての「指示」のリストであり、プログラムがこれらの楽器を演奏して曲を作成するという意味で、MIDI に似ています。

ただし、前述したように、ORG を再生するだけでなく、WAV を直接生成したいと考えています。だから、ある意味では、サウンドを WAV に "再生" したいのです。私は WAV 形式を知っており、生の PCM サンプルからいくつかのファイルを作成しましたが、これはそれほど単純ではありません。

ORG によって生成されるサウンドは、私が持っている WAV サンプルを含む多数のファイルから生成されます。それらはモノラルで、8 ビットのサンプルは 22050Hz で再生する必要があります。それらはすべて 1 秒未満の長さで、最大でも 11KB を超えません。それらをすべて順番に再生するには、サンプルを順番に WAV に入れるだけだと思います。ただし、ORG では最大 16 の異なる楽器を同時に演奏することができ、各楽器の各ノートにはパン (ステレオ サウンドを可能にするバランス) もあるため、それほど単純ではありません。さらに、各 ORG には独自のテンポ (つまり、サウンドを再生できる各ポイント間のミリ秒) があり、一部のサウンドはこのテンポより長くなる場合があります。つまり、同じ楽器の 2 つのサウンドがオーバーラップする可能性があります。たとえば、楽器で音符が演奏され、

状況が明確であることを確認するために、すべてを説明しようと思いました。いずれにせよ、基本的に、ORG (または、必要に応じて MIDI (本質的に同じであるため)) を WAV に変換または「再生」する方法を知りたいと思います。前述したように、各ノートにはパン/バランスがあるため、WAV もステレオである必要があります。

どうしても問題になる場合は、FlashDevelop の ActionScript 3.0 でこれを行う予定です。コードは必要ありません (誰かに作業を依頼することになるため) が、これを正しく行う方法を知りたいだけです。1 つまたは 2 つのアルゴリズムも便利な場合があります。

4

1 に答える 1

0

最初に言っておきますが、AS3 はこのようなことを行うのに最適な言語ではありません。スーパーコライダーは、より適切で簡単な選択です。

しかし、AS3 でそれを行いたい場合は、一般的な方法があります。私はそれをテストしていません。これは純粋な理論です。

まず、すべてのサウンドを配列に入れ、次に MIDI ファイルのノートを配列内の位置に一致させる方法を見つけます。

midi のフォーマットの詳細はわかりませんが、最小値がティックであり、ティックの長さが BPM に依存することは知っています。midi ティックを計算する式は次のとおりです。Midi ティックから実際の再生秒数 !!! (ミディミュージック)

あなたの目盛りの長さが2ミリ秒だとしましょう。これで、基本値が得られました。すべてのティックで何が起こるかでVector(のように、しかしより高速に) を埋めることができます。Array特定の目盛りで何も起こらない場合は、null 値を挿入します。

今、大きな問題はそれを読むことVectorです。Timer2ms のような小さな値ではクラスが機能しないため、これは問題です。しかし、できることは、アプリが使用を開始してからの経過時間をミリ秒単位で確認することですgetTimer()。経過時間をチェックするいくつかのループを作成できます。さらに 2 ミリ秒ある場合は、 の次のインデックスを読み取りますVector。そのインデックスに音符がある場合は、サウンドを再生します。そうでない場合は、次のティックを待ちます。

これに関する問題は、ループが 15 秒以上続くと (その値はよくわかりません)、Flash はプログラムが応答していないと判断し、プログラムを強制終了することです。そのため、Flash がプログラムを強制終了する前に、ループを終了して新しいループを開く必要があります。

よし、これでサウンドが再生されました。スタンディング ウェーブ 3 というライブラリを使用して、フラッシュが発する音 (wav、mp3、マイク) を録音できます。

https://github.com/maxl0rd/standingwave3

これは非常に理論的な話です...そして、再生したいサウンドの数によっては、プログラムをフリーズできると確信しています...しかし、それがあなたの助けになることを願っています.

于 2013-06-27T04:23:57.163 に答える