まず、それが何であるかについて少しお話しします。
Audiereは、LGPLライセンスに基づくオープンソースの高レベルオーディオAPIです。 Java、C ++、Python、Delphiなどを含む多くの言語で使用できます。ソースコードが影響を受けない場合、無料で商用アプリケーションで使用できます(詳細については、ライブラリのドキュメントを参照してください)。
C ++で最も単純な例を実装する準備をします。
- 公式Webサイトからライブラリをダウンロードします(私の場合、これはWin32バイナリリリースです)。
- 従来、コンパイラの「lib」フォルダに「audiere.lib」ファイルを転送し、コンパイラの「include」フォルダにも「audiere.h」ヘッダーを転送していました ***CodeBlocks 「Program Files(x86)/ CodeBlocks / MinGW /」のコンパイラフォルダパス、Microsoft Visual Studio- 「Program Files(x86)/ Microsoft Visual Studio / VC /」
- たとえば、コンソールプロジェクトC ++を作成します。
- プロジェクトのリンカー設定で、「audiere.lib」を追加します
- プロジェクトのソースコードの横、プログラムのexeファイルの横にある「bin」フォルダから「audiere.dll」を忘れないでください。
まったく新しい場合
「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」コマンドの入力を待機しませんが、キーを押した直後に変数に値を割り当てます。
しかし、ご覧のとおり、キーを押すことができるのは1回だけなので、この方法はループ内の配列に最適です。
「!inputVar [i] == '\ r'」-これは「Enter」を押すとテストされ、押されるとサイクルが終了します。 '\ r'は復帰のサインです。
そして今、なぜコードでは「getche()」が単独で存在し、変数を割り当てないのか、それは必要ありません。 キーが押されるのを待つだけで、その後プログラムは終了します。
「setlocale(0、」Russian ");」の助けを借りて、コンソールにロシア語のテキストを出力するサポートがインストールされます(入力はサポートされません)。
次の2行は、C ++に詳しくなった後、たとえば本から明らかになります。
私たちの国の「音」はポインタであるため、その方法はポイントではなく矢印演算子「->」を使用して実行されます。 「sound.play()」のように。 これは、前述の本では、「ポインター」の章に当てられています。
「if else」コンストラクトについてコメントします。
次のすべてのチェックでは、 「else if」を使用しました。これは、各値と押されたキーとの対応をチェックした後、残りのifステートメントが実行されないため、プログラムの速度を上げます。 私たちが書いた場合:
次に、たとえば「q」キーを押しても、他のすべての条件がチェックされますが、この場合は意味がありません。
勉強に成功したい!
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」キーを押しても、他のすべての条件がチェックされますが、この場合は意味がありません。
勉強に成功したい!
この短いレビューは、設計の新規参入者の出発点として役立ててください。 最高!