Audiereライブラリを使用した最もシンプルなオーディオ出力

ご挨拶! このメモは、初心者プログラマーを対象としています。 彼女はシンプルなAudiereライブラリについてです。 かつて簡単かつ迅速にサウンドを引き出したいと思っていたなら、あなたはそれを好きになるでしょう。



まず、それが何であるかについて少しお話しします。



Audiereは、LGPLライセンスに基づくオープンソースの高レベルオーディオAPIです。 Java、C ++、Python、Delphiなどを含む多くの言語で使用できます。ソースコードが影響を受けない場合、無料で商用アプリケーションで使用できます(詳細については、ライブラリのドキュメントを参照してください)。



C ++で最も単純な例を実装する準備をします。





まったく新しい場合
「cout <<」の出力方法を学んだ3日目であれば、事前に言っておくよ、友よ、下に書かれていることを繰り返して、すべてを説明しよう。





#include <iostream> //    "cout<<" #include "conio.h" //   "getche()",   "cin>>" #include "windows.h" // audiere   #include "audiere.h" //  using namespace std; using namespace audiere; //      
      
      







 int main() { setlocale(0, "Russian"); //    - cout<<"  "<<endl; AudioDevicePtr device = OpenDevice(); //    AudioDevice OutputStreamPtr sound = OpenSound(device , "sound.wav" , false); //     sound->play(); //   getche(); //         }
      
      





さて、コメントはもう少し詳細です。



 AudioDevicePtr device = OpenDevice();
      
      





ここでは、ライブラリの概念に従ってデバイスポインター (まったく明示的ではありませんが、ポインター)を作成します。 OpenDevice()を引数なしのままにしておくと、ライブラリ自体が適切なデバイスを選択します。



次に、ストリームでファイルを開きます。



 OutputStreamPtr sound = OpenSound(device , "sound.wav" , false);
      
      





サウンドを開くには、OpenSoundに3つの引数を渡す必要があります。



1. device-出力が発生するデバイス

2. "sound.wav"-私たちの任意の音

3. falseまたはtrue-サウンドをメモリにロードして再生する(false)か、ストリーム(たとえば、大きなファイルの場合)を介して、メモリに完全にロードせずに再生する(true)が必要です。 サウンドトラックの場合、「true」にする必要があります。そうしないと、メモリ全体がサウンドを取得します。



 sound->play();
      
      





サウンドを再生してください! どうやら、すべてが非常に簡単です。 サウンドの場合、音量を設定できます。



 sound->setVolume(1.0f); //  (  "0.5f" )
      
      





サウンドを繰り返し(ループ)することができます:



 sound->setRepeat(true);
      
      





このストリームの再生を停止します。



 sound->stop();
      
      





このストリームが現在再生中かどうかを確認します。



 sound->isPlaying();
      
      





特定のストリームの現在のボリュームを確認します。



 sound->getVolume();
      
      





サウンドパノラマを設定します(左、中央、右):



 sound->setPan(-1.0);//       , 0.0 -  ,  1.0 
      
      





サウンドの再生速度を設定します(トーンも変わります)。



 sound->setPitchShift(1.0);// .   0.5  1.0  ,   1.0  2.0 .
      
      





 sound->getPitchShift();//   PitchShift  
      
      





ヘッダーファイル「audiere.h」には、「CreateTone();」、「CreatePinkNoise()」など、MIDI機能を含むその他の関数が定義されています。 「audiere」名前空間のメンバーのリストと、 こちらのオンラインドキュメントへのリンク。



もちろん、プログラムにエラー処理を追加する必要がある場合、ソースコードは次のようになります。



 AudioDevicePtr device = OpenDevice(); if(!device) { cout<<"  AudioDevice.     .."; getche(); return 0; //   }
      
      





ファイルを開くエラーの処理と同様に:



 if(!sound){ cout<<"  !     .."; getche(); return 0; }
      
      





完全なソースコード
 #include <iostream> //    "cout<<" #include "conio.h" //   "getche()" ,   "cin>>" #include "windows.h" // audiere   #include "audiere.h" //  using namespace std; using namespace audiere; //        int main() { setlocale(0, "Russian"); //    - cout<<"  "<<endl; AudioDevicePtr device = OpenDevice(); //    AudioDevice if(!device){ cout<<"  AudioDevice.     .."; getche(); return 0; //   } OutputStreamPtr sound = OpenSound(device , "sound.wav" , false); //   if(!sound){ cout<<"  !     .."; getche(); return 0; } sound->play(); //   getche(); //         }
      
      







そして最後に、このプログラムはより興味深いものです。私たちは原始的な楽器を作ります!



今回はgetch()メソッドを使用します。 違いは、「getche()」と同じように機能しますが、入力した文字は表示されないことです。 しかし、突然、あなたは面白いメロディーを手に入れ、あなたが押したものを見る必要がありますか?:「getche()」を使用するか、「getch()」で配列に書き込むことができます。 コードのシンプルさを隠さないように、私は意図的に初心者向けのテキストを複雑にしません。そのため、エラーやその他すべてのチェックを自分で追加できます。



楽器のソースコード:



 #include <iostream> #include "conio.h" #include "windows.h" #include "audiere.h" using namespace std; using namespace audiere; int main() { setlocale(0, "Russian"); cout << "  QWERTYUIO . X -  " << endl; AudioDevicePtr device = OpenDevice(); OutputStreamPtr do1 = OpenSound(device , "do.wav" , false); //         OutputStreamPtr re = OpenSound(device , "re.wav" , false); OutputStreamPtr mi = OpenSound(device , "mi.wav" , false); OutputStreamPtr fa = OpenSound(device , "fa.wav" , false); OutputStreamPtr sol = OpenSound(device , "sol.wav" , false); OutputStreamPtr la = OpenSound(device , "la.wav" , false); OutputStreamPtr si = OpenSound(device , "si.wav" , false); OutputStreamPtr do2 = OpenSound(device , "do2.wav" , false); //  -   ,     char notePlay = '1'; //      while(notePlay!='x') // ,     "x" { notePlay=getch(); if(notePlay=='q') do1->play(); else if(notePlay=='w') re->play(); else if(notePlay=='e') mi->play(); else if(notePlay=='r') fa->play(); else if(notePlay=='t') sol->play(); else if(notePlay=='y') la->play(); else if(notePlay=='u') si->play(); else if(notePlay=='i') do2->play(); } return 0; }
      
      





*このプロジェクトの.wavファイルはここからダウンロードできます 。 ソースフォルダーに解凍します。



そして、これは初心者向けです
cin >>にはconche.hの代わりにgetche()があります。 「Getche()」は、「Enter」コマンドの入力を待機しませんが、キーを押した直後に変数に値を割り当てます。



 char inputVar; inputVar=getche();
      
      





しかし、ご覧のとおり、キーを押すことができるのは1回だけなので、この方法はループ内の配列に最適です。



 char inputVar[30]; // - int i=0; //   while(!inputVar[i]=='\r' && i<30) { inputVar[i]=getche(); i++; }
      
      





「!inputVar [i] == '\ r'」-これは「Enter」を押すとテストされ、押されるとサイクルが終了します。 '\ r'は復帰のサインです。



そして今、なぜコードでは「getche()」が単独で存在し、変数を割り当てないのか、それは必要ありません。 キーが押されるのを待つだけで、その後プログラムは終了します。



「setlocale(0、」Russian ");」の助けを借りて、コンソールにロシア語のテキストを出力するサポートがインストールされます(入力はサポートされません)。



次の2行は、C ++に詳しくなった後、たとえば本から明らかになります。
Herbert Shildt-「完全なC ++リファレンス」




私たちの国の「音」はポインタであるため、その方法はポイントではなく矢印演算子「->」を使用して実行されます。 「sound.play()」のように。 これは、前述の本では、「ポインター」の章に当てられています。



「if else」コンストラクトについてコメントします。



次のすべてのチェックでは、 「else if」を使用しましたこれは、各値と押されたキーとの対応をチェックした後、残りのifステートメントが実行されないため、プログラムの速度を上げます。 私たちが書いた場合:

  while(notePlay!='x') // ,     "x" { notePlay=getch(); if(notePlay=='q') do1->play(); if(notePlay=='w') re->play(); if(notePlay=='e') mi->play(); if(notePlay=='r') fa->play(); if(notePlay=='t') sol->play(); if(notePlay=='y') la->play(); if(notePlay=='u') si->play(); if(notePlay=='i') do2->play(); }
      
      





次に、たとえば「q」キーを押しても、他のすべての条件がチェックされますが、この場合は意味がありません。



勉強に成功したい!


この短いレビューは、設計の新規参入者の出発点として役立ててください。 最高!



All Articles