Qtアプリケーションに高品質のサウンドを埋め込む(Qt + FMOD)

Qtのマルチメディア機能に喜びを感じたときのことを思い出します。フォノンは良いですね。 しかし、私は失望の時を覚えています。このフォノンはあまりにも少なすぎます。 少なくとも、2つのサウンドを同時に再生することはできません。 はい、彼のインターフェースは不完全です...



それはそうかもしれませんが、私はより良いもの、さらにクロスプラットフォームを探し始めました。 いくつかの失敗した発見の後、 FMOD Libraryに出会いました。 ソースコードがないにもかかわらず、これは無料の(非営利目的の)クロスプラットフォームライブラリです。



可能性のリストは膨大です。これは、ミキサー、低レイテンシDSP(ピッチシフターも含む)、および多数の形式(mp3、wav、ogg、aiff、MIDIなど)、サウンド生成、および録音を読み取るためのものです。マルチチャネルサウンド(たとえば、5.1)のサポート、そしてこれ、そして5番目、10番目...一般的な機能。 また、CとC ++の両方のインターフェースがあります。



さらに、大きなプラスはライブラリ自体の重量が軽いことです(Windowsの場合は約370キロです)。



それでは始めましょう。 私はWindowsでそれをしましたが、他のシステムでもほぼ同じでしょう。 開発者向けにAPIをダウンロードし、fmodex.dllとincおよびlibフォルダーをプロジェクトのFMODフォルダーにドロップしました。 #include <fmod.hpp>に接続されたC ++インターフェイスを使用することを選択し、次の操作を行います。



1.私のウィンドウのクラスで変数FMODを宣言します:: System * system;

2.クラスコンストラクターで、以下を初期化します。

FMOD::System_Create(&system); system->init(32 /*maximum number of channels*/ , FMOD_INIT_NORMAL, 0); * This source code was highlighted with Source Code Highlighter .



  1. FMOD::System_Create(&system); system->init(32 /*maximum number of channels*/ , FMOD_INIT_NORMAL, 0); * This source code was highlighted with Source Code Highlighter .



  2. FMOD::System_Create(&system); system->init(32 /*maximum number of channels*/ , FMOD_INIT_NORMAL, 0); * This source code was highlighted with Source Code Highlighter .



FMOD::System_Create(&system); system->init(32 /*maximum number of channels*/ , FMOD_INIT_NORMAL, 0); * This source code was highlighted with Source Code Highlighter .





3.音を立てる:





  1. //音
  2. FMOD ::サウンド*サウンド;
  3. //サウンドチャンネル
  4. FMOD ::チャンネル*チャンネル;
  5. //サウンドを作成する
  6. system-> system-> createSound( "mysound.mp3" 、FMOD_SOFTWARE | FMOD_LOOP_OFF、0、&sound);
  7. //サウンドを再生します(チャンネルに割り当てます)
  8. system-> playSound(1 / *チャネル#1 * / 、サウンド、 true / *一時停止の開始* / 、およびチャネル);
  9. //実際にサウンドを再生します
  10. channel-> setPaused( false );
*このソースコードは、 ソースコードハイライターで強調表示されました。




同時に、多くのサウンドを1つのシステムに接続でき(それぞれが独自のチャネル上にあります)、サウンドをループできます(フラグFMOD_LOOP_NORMAL)。



次にプロジェクトをビルドします。 残念ながら、WindowsのC ++インターフェイスはMicrosoft Visual Studioコンパイラでのみ使用でき、MinGWではCインターフェイスのみが使用可能です。 したがって、VS2008のQtを使用してプロジェクトを構築しました。 原則として、CインターフェースはC ++とそれほど違いはありません。たとえば、FMOD :: Systemの代わりにFMOD_Systemを作成し、system-> init()の代わりにFMOD_System_init()を作成するため、1つから別のものに移動するのは非常に簡単です。



プロジェクトをまとめるには、.proファイルに書き込みます。







  1. INCLUDEPATH + = FMOD / inc
  2. LIBS + = -LFMOD / lib -lfmodex_vc
*このソースコードは、 ソースコードハイライターで強調表示されました。


基本的な機能セットから、FMOD :: Channel :: setVolume()およびsetPan()-チャンネル間の音量とバランスの設定(左-右)に注目する価値があります。



FMODのもう1つの利点:ドキュメントは非常に適切であり、ほとんどすべての場合の例があります。



根拠のないように、Qt + FMOD: DamnSamplerの助けを借りてプログラムを作成しました。 これは非常に独特の楽器です-キーボードの各キーに音(または複数)がかかっているため、音は単純な場合もループする場合もあります。 ソースが添付されます。



All Articles