2017-02-02 10 views
1

サウンドに関する質問があります。 以前私のプロジェクトでOpenALのようなサウンドライブラリを使用しました。 私が必要とするのは、これらのライブラリが使用しているOS APIの基礎となるものです。 各ライブラリがフォーマットに従って入力ファイル を操作する簡単な方法を提供していても、非常に基本的な「生のバイトからバイトへの未加工の送信」ドライバ 関数が存在しなければなりません。C/C++サウンドOS API

私は、これらのライブラリで使用されるデフォルトのapi(Windowsの場合は1つ、Linuxの場合はもう1つ) が必要です。私は彼らが直接各サウンド カードのドライバを使用するとは思わないので、OSはどうにかして魔法をしなければならない。私は正しいですか?

さて、私は(私はそれを使用したことがないが)DirectXのサウンドをサポートしています知っているが、 のDirectXがWindowsにデフォルトでインストールされていないので、私はそれはカウントされませんと仮定し、 と私は何が起こるか分かりませんLinuxと私は両方について知りたいです。

私は、専用ライブラリを使用しないことはおそらく実際的ではないことを知っていますが、私は は本当にこの対象に興味がありません。 だから私に甘やかされてください。

だから、基本的なグラフィックスのためには、OpenGLとDirectXです。しかし、サウンドはどうですか?

ありがとうございます。

+0

Linuxの場合、単一のサウンドAPIが存在しないため、答えるのは問題になります。 –

+0

Linuxでは、ライブラリはどのようにすべてのサウンドカードドライバに接続しますか? そして、Windowsでは、すべてのサウンドライブラリがPlaySoundをベースとして使用していますか? –

+0

PlaySoundは、サウンドをすばやく簡単に再生するためのWindows API関数です。それは、深層機能ではなく便宜に焦点を当てた、音を再生する高レベルの手段です。参照先:https://msdn.microsoft.com/en-us/library/windows/desktop/dd743680(v=vs.85).aspx –

答えて

3

各主要プラットフォームには、サウンドで作業するためのAPIが多数用意されています.WindowsとMacでは、Native Sound ApiがデフォルトでOSによって使用されます。また、Non-Standardまたは推奨されていません。

HEREを参照してください。メジャーなプラットフォーム間で主要なサウンドAPIの多くの有用な内訳があります。

ネイティブサウンドAPIを持つ各プラットフォームに加えて、ポータブルオーディオソフトウェアを作成するために各ネイティブAPIが動作する方法をカプセル化する多くのクロスプラットフォームAPIもあります。

は、たとえばあります:だけでなく、サウンドのためのC++ APIであるRtAudioがあるC言語のAPI を知っているPortAudioが、それは私の意見ではやや古いC++スタイルのある(ポストの利点を取ることはありませんC++ 11の機能)。

私は現在、自分自身のより最新のC++ 11オーディオAPIに取り組んでいます。これはHEREです。現時点では、私のAPIは、PortAudioを取り巻く薄いラッパーであり、より現代的なC++の方法でオーディオを扱うことができます。

あなたが選択するライブラリは、あなたがやろうとしているオーディオの種類にも依存します。私が上にリストアップしたライブラリはすべて、リアルタイムのオーディオ処理に対応しており、オーディオファイルを扱っていません。オーディオファイルを使って作業しようとしている場合は、普及しているオープンソースのサウンドファイル操作APIであるlibsndfileを使用することができます。

質問の文脈からは、主にGame Dev関連の文脈でサウンドを扱っているように聞こえます。私がこれまでに提案したライブラリのほとんどは、単にサウンドファイルを再生する関数を呼び出すよりもはるかに低いレベルにあるというレベルでサウンドを扱うことに言及することは重要です。

OpenALがOSとどのようにやりとりするかという質問に答えることは、OpenALのドキュメントを読んでいると最も良い答えです。

私はまた、デジタル信号処理だけでなく、基本的なデジタルオーディオ理論を調べることをお勧めします。どちらの科目でも、無料でオンラインで利用できる多くのリソースがあります。

EDIT:どのようにオーディオAPIの仕事に関しては

...平均オーディオAPIは、プログラマーとサウンドカード間の抽象化のいくつかの層のオフに動作します。通常、プログラマには値の配列として格納されたオーディオデータのバッファが与えられます。プログラマは、システムが再生(サンプリングレート、バッファサイズ、チャンネル数)に使用するパラメータの特定のセットを要求します。プログラマは、オーディオデータを使って作業を行い、出力バッファをAPIに渡します。これにより、最終的にバッファデータが、インストールされたサウンドカード専用に書かれたデバイスドライバに渡されます。そのサウンドカードのドライバは、ドライバが対象とするプラットフォームで指定されたインターフェイスに基づいて実装されています。そのため、マシンに新しいサウンドカードをインストールするときに、OSレベルのAPIにデバイスとの通信手段を提供するドライバをインストールすることによって、ドライバをインストールする必要が生じる場合があります。

(簡単に説明することができる以上に多くのことがありますが、私はその過程でいくつかのステップを逃してしまったと確信していますが、それは十分な説明で始めることを望みます)

+0

このような詳細な回答をいただきありがとうございます。もう1つだけ、なぜ(特に窓のようなプラットホームのために)そう多くの異なったapisがあるのですか? (WMWE、DirectSoundなど)? なぜそんなに多くのための必要性?彼らの違いは何ですか? –

+0

これに対する主な答えは、それらのいくつかは下位互換性のために残っている従来のAPIです。 ASIOのようなものの中には、サードパーティーのものがあり、できるだけOSを処理せず、より低いレベルの機能を提供するように設計されています。そしてそれらの中には、ハードウェアから様々な抽象レベルを与えるものもあります。私は間違っている可能性があるので、私はWindowsのサウンドの専門家ではない。私は主にMacとLinuxベースのシステムを取り扱っています。ほとんどの場合、PortAudioを使用しています。 –