6

私は実際には C++ や SDL_Mixer に精通しているわけではありませんが、Doom コミュニティを代表してこの質問をしています。簡単に言えば、Windows Vista または 7 で SDL_Mixer を使用して通常のサウンド ボリュームと MIDI サウンド ボリュームを個別に制御する方法を、Doom ソース ポートを作成しているユーザーは誰も理解していないようです。Eternity Engine の作成者である James Haley に彼自身の言葉で説明してもらいます。 :

Windows Vista または 7 では、ネイティブ MIDI の独立したボリュームの概念は存在しないようです。これは、MIDI ボリューム スライダーを持つアプリケーション (SDL_mixer を使用するほとんどのゲームを含む) で MIDI ボリューム スライダーを使用すると、デジタル サウンド出力のボリュームにも影響するためです。これにより、快適さのために音楽の相対的な音量を調整しようとすることが不可能になります。

誰かがこれに対する回避策を見つけましたか? 個々のサウンド デバイスの音量を個別に制御するために、Microsoft が OS 全体を軽視しているように見えることを考えると、それはありそうもないことだと思います。

Timidity ドライバーを使用するさまざまな回避策について聞いたことがありますが、これには、ユーザーが自分のシステムにゲームをインストールするだけでなく、それ以上のことが必要です。この問題を確実に修正するポートとして私が知っている唯一のポートは ZDoom ですが、これは GPL 非互換の FModEx を使用しているため、適切なソリューションではありません。

コードを確認したい場合は、Chocolate Doom が最も簡単に理解できる Doom ソース ポートであり、そのソースをここで取得できます。

他のオープンソースのサウンドおよび音楽ライブラリに関する提案も大歓迎です。

4

4 に答える 4

1

解決策は、FluidSynth 対応の SDL_mixer を同梱することです。また、SoundFont2 ファイルを同梱する必要があります。幸いなことに、無料の SF2 があり、一部は Doom の MIDI ファイル用に最適化されています。サウンドフォントはコードではなく資産であるため、ライセンスは問題になりません。

次に、Mix_SetSoundFonts() を使用して SF2 をロードします。

于 2012-08-29T21:48:31.697 に答える
0

SDL以外のさまざまなMIDIライブラリを確認することをお勧めします。

http://wildmidi.sourceforge.net/

http://sourceforge.net/apps/trac/fluidsynth/

http://timidity.sourceforge.net

于 2011-07-14T14:37:32.247 に答える
0

長い間、私たちが見つけた唯一の解決策は、PortMIDI のようなものを使用することでした。しかし、Eternity Engine で有名な Quasar は、巧妙な解決策を見つけました。

http://www.doomworld.com/vb/showthread.php?s=&postid=1124981#post1124981

彼は基本的に SDL_Mixer を独自のプロセスに入れ、RPC で制御します。非常に賢い。

于 2012-11-24T04:18:54.687 に答える
0

同様のゲーム ポート (Descent 2) を維持していますが、同じ問題に遭遇しました。SDL_mixerを使用する場合、解決策はありません。私が見つけた midi 音楽をオフにするときにサウンドがミュートされないようにするための解決策は、一時的な midi デバイスへのハンドルを取得し、midi ボリュームを最大に設定してから、一時的なデバイスを再度閉じることです。

于 2011-12-02T16:30:50.890 に答える