ランダムに生成されたシンセでMIDIからMP3への自動変換

私は自動的にMP3に変換する必要がある400,000のMIDIを持っています。私はMIDIが波形を定義していないことを知っています。また、MIDIをDAWにインポートしてシンセを個々のトラックにマッピングできるので、これを自動的に行うことも可能です。私はこれを行う方法を探してきました。各MIDIは、ランダムに生成されたシンセを各トラックにマッピングする必要があります。

私はSoundFontを見てきましたが、それらを作成する方法や、自動的に生成する方法やMIDIに自動的に適用する方法はわかりません。

誰でもMIDIトラックにマッピングできるシンセを作成するためのツールやSDK、またはプログラムでSoundFontを生成して適用する方法について知っていますか?もしそうでなければ、私にこれを可能にするツールに関連する低レベルのステップを誰かが理解していますか?私はこれを成功させるための道具を探しました。もし私が関わっている部分を理解すれば、これを行うための何かを書くことができたかもしれませんが、私は何を見上げるべきかも知らないでしょう。

助けていただければ幸いです。

5
合成によってサウンドをランダムに生成するか、既存のサウンドフォンからランダムに選択しますか?
追加された 著者 Jamie Bullock,
それでは、なぜsoundfontsを使うのですか?なぜ、音を生成する手段(softsynthの2つ)を持たず、それらをランダムに選択してから、MIDIを介して直接音をトリガーするのはなぜですか? MIDIファイル - >(ランダム)シンセ - > WAV - > MP3のようなもの?
追加された 著者 Jamie Bullock,
私は、合成を通してサウンドを生成し、サウンドフォントをランダムに選択してmidisに適用することを検討しています。
追加された 著者 Charlie,
私はそれが望ましい解決策であると思います。私は、私の研究の大部分が私を導いてくれるので、音のフォントについて疑問を抱いていました。
追加された 著者 Charlie,

1 答え

OK、ここにはいくつかの質問がありますが、それぞれにはそれぞれ難しいものがあります。

MIDIからMP3への変換

Assuming you want to go MIDI -> SF2 -> MP3, the Timidity++ source code would be a good starting point. Timidity++ "can play MIDI files by converting them into PCM waveform data". A recent fork of Timidity++ can be found on Github.

MP3 に変換するには、追加のツールが必要です。 LAME はここでは良い出発点です。 TimidityとLAMEをつなげば、MIDIからSF2を経由してMP3に行くことができます。このスクリプトは、独自のアプリケーションを作成せずにこれを達成する方法を示しています。

for file in *.mid do
    timidity $file -Ow -o - | lame - $file.mp3
done

ランダム合成

ランダムに生成されたシンセに関係するあなたの質問のもう1つの要素は、上記のアプローチによって簡単に対処できません。質問を正しく理解していれば、次のことをしたいと思っています:

  • 合成のいくつかの部分が無作為化されているところでいくつかの音を合成する
  • 再生のために各MIDIチャンネルに割り当てるサウンドをランダムに選択する

SF2 is a primarily sample-based format, and would introduce unnecessary complexity if you essentially want to play random synths via MIDI and save the output to an audio file.

あなたの問題に対処するために、私はSF2の手順をスキップし、 Synthesis ToolKit のようなオーディオ処理フレームワークを見てみることをお勧めしますSTK)。 STKはMIDIファイルとサウンド合成を読み込むことができます。オーディオバッファにLAMEを使用してMP3変換できます。

5
追加された
はい、あなたはそれを行うことができます。または、 StkFrames のバッファを保持する StkFrames インスタンスにデータを書き込むこともできます。 StkFloat はtypedefされて double になりますので、liblameからlame_encode_buffer_interleaved_ieee_float()にこれを渡すことで、あなたのアプリ。
追加された 著者 Jamie Bullock,
私はそれほど詳細な説明なしでは答えられない。私はあなたのプラットフォーム、コンパイラ、エラーメッセージ、これまでに取られたステップ、最小限のコード例などの詳細を提供する新しい質問を開始することをお勧めします。
追加された 著者 Jamie Bullock,
STKにはMidiFileIn関数とWvOut関数があるようです。だから、私はMIDIをインポートし、私は何をする必要があります、波を出力し、MP3にすべての波を変換するために上記のようなスクリプトを実行しますか?
追加された 著者 Charlie,
私は合成ツールキットを使用しようとしており、使用しようとしているすべての関数への未定義の参照について不平を言うリンカエラーを取得するだけです。なぜこれがあるのか​​知っていますか?
追加された 著者 Charlie,