8

私の質問はプログラミングに完全に関連しているわけではありませんが、それでも SO が質問するのに適した場所だと思います。

私のプログラムでは、いくつかのオーディオ データを生成し、トラックを WAV ファイルに保存します。すべてが 1 つのサウンド ジェネレーターで正常に動作します。しかし、ジェネレーターをさらに追加して、生成されたオーディオ データを 1 つのファイルにミックスしたいと考えています。残念ながら、一見したよりも複雑です。さらに、一連のオーディオ サンプルをミキシングする方法に関する有用な情報はあまり見つかりませんでした。

それで、私にアドバイスをくれる人はいますか?

編集:

私はC++でプログラミングしています。しかし、2 つのオーディオ トラックのミキシングの背後にある理論に興味があったので、それは問題ではありません。私が抱えている問題は、サンプルを単純に合計することができないということです。これにより、しばしば歪んだサウンドが生成されるためです。

4

4 に答える 4

6

あなたの問題は、追加するすべてのオーディオ ソースに対して、レベルを下げなければならないことだと思います。

アプリがユーザーに制御を与える場合は、レベルを直接制御できるようにします。辛さはあなたの責任ではなく、彼らの責任です。これが「加算」です。

ミキシングが自動化されたら、あなたは旅に出ようとしています. 制限がない場合は、おそらく圧縮が必要になります。(リミッティングは圧縮の極端なバージョンです。)

オーディオに対して何を行うか (圧縮やリミッティングを含む) は一種の歪みであるため、オーディオに色付けが生じることに注意してください。コンプレッションとリミッティングのアルゴリズムの選択は、サウンドに影響します。

オーディオをリアルタイムで生成していないため、「ブリック ウォール」リミッティングを行う可能性があります。それは、あなたがレベルを予知しているからです。リアルタイムのリミッティングは、何が起こるかわからないため、より制限されます。反応する必要があります。

これは音楽、効果音、声、何ですか?

ここのプログラマーは常にこれに対処しています。

于 2009-11-23T16:47:57.653 に答える
5

オーディオ サンプルをミキシングするということは、それらを一緒に追加することを意味します。通常、それらをより大きなデータ型に追加して、オーバーフローを検出し、値をクランプしてから宛先バッファーにキャストし直すことができます。オーバーフローが発生することが事前にわかっている場合は、加算の前に振幅をスケーリングできます。単純に 0 から 1 の間の浮動小数点値を乗算します。この場合も、精度の問題を念頭に置いて、おそらく最初に大きなデータ型に変換します。

これで対処されない特定の問題がある場合は、元の質問を自由に更新してください。

于 2009-11-23T16:48:30.523 に答える
0

プログラミング言語とプラットフォームについては言及されていませんが、今のところ、C# を使用する Windows を想定しています。

http://www.codeplex.com/naudio

ほとんどのオーディオ操作中に遭遇する多くのものを実際にカバーする優れたオープン ソース ライブラリ。

于 2009-11-23T16:47:26.610 に答える