2012-01-26 12 views
3

私は、生のバイトストリームなどの簡単なフォーマットのオーディオファイルを簡単に読み込めるようにするC++ライブラリ(Linuxの場合は、クロスプラットフォームが望ましい)を探しています同じ簡単なフォーマットで、オーディオファイルを書き込むことができます。私は自由で(ビールとスピーチ)、一般的にサポートされている限り、どのような形式で読み書きが行われるか気にしません。私は非常に並列なプログラムで多くの小さなオーディオクリップを読み込み、変換し、生成するつもりです。したがって、ライブラリを素早くスレッドセーフにする必要があります。オーディオの生成と読み込みのためのC++ライブラリ

サウンドカードを使用して簡単なDSP機能(FFT、フィルタ)と録音/再生ができます。

グーグルの話は何も変えていないが、間違った検索語を使用している可能性があります。私はほぼ完全に記録や再生のアプリで使用するためのライブラリを見つけました。生のバイトからサウンドを生成する能力があるかどうかは不明です。私はWAVファイルを操作するために自分のライブラリを書くことを検討していました。なぜなら、それらは単純なように見えるからです。しかし、私がそれを避けることができれば、

+2

スピードはC++が欲しいとおっしゃいましたが、オクターブでプロトタイプを作成してC++に移植することをお勧めします。http://www.gnu.org/software/octave/doc/interpreter/Audio-Processing.html 。 C++の場合、PortAudio http://www.portaudio.com/docs.html – TJD

+0

を非商用で無料で使用できますか? – Samaursa

+0

@TJD:大部分の処理は遺伝的アルゴリズムを使って行われるため、プロトタイピングはそれほど多くなく、オクターブがその作業に適しているとは思われません。 – rmeador

答えて

1

私はここから完全に離れているかもしれませんが、あなたの説明からはOpenALまたはFMODのようなものを探しているようです。 OpenALは完全無料ですが、FMODは非商用目的でのみ無料です。どちらもスレッドセーフでクロスプラットフォームです。

あなたが推測しているように、OpenALを使い始めたのは、(良い)文書や適切な例がないため、FMODよりもはるかに難しいことです。

0

SDLSDL_Mixerはどうですか?しかし、DSP機能はありません。

1

GStreamerは、クロスプラットフォームであり、広く使用されている:

GStreamerには、構築するためのライブラリでありますメディア処理コンポーネントのグラフ。サポートしているアプリケーションは、単純なOgg/Vorbis再生、オーディオ/ビデオストリーミングから複雑なオーディオ(ミキシング)、ビデオ(ノンリニア編集)まで幅広く対応しています。

0


BASSは非商用利用のための無料あるwww.un4seen.com BASSライブラリを見てみましょう。

プラットフォーム:Win32、OSX、Linux
BASSは、Win64、WinCE、iOS、Android、およびARM Linuxプラットフォームでも使用できます。

BASSは、複数のプラットフォームのソフトウェアで使用するためのオーディオライブラリです。その の目的は、開発者に ストリーム(MP3、MP2、MP1、OGG、WAV、AIFF、カスタムなど、 OSコーデックとアドオン経由で)、MOD音楽(XM、IT、 S3M、MOD、MTM、UMX)、MO3 音楽(MP3/OGG圧縮MOD)、および録音機能が含まれます。 コンパクトDLL/LIBのすべてで、あなたの配布を膨らませません。

BASSは多くのアドオンをサポートしています。使いやすく、柔軟性があり、優れたドキュメント/例と、これまでに見た中で最高のサポートです。
カスタム生成されたサンプル
そしてまた、WAV/AIFF/MP3/MP2/MP1/OGG
:440Hzの正弦波のサンプルを作成します。あなたはそれを持って好きなように

。同時にサウンドカード経由

HSAMPLE sample=BASS_SampleCreate(256, 28160, 1, 1, 
BASS_SAMPLE_LOOP|BASS_SAMPLE_OVER_POS); // create sample 
short data[128]; // data buffer 
int a; 
for (a=0; a<128; a++) 
    data[a]=(short)(32767.0*sin((double)a*6.283185/64)); // sine wave 
BASS_SampleSetData(sample, data); // set the sample's data 

再生
複数のサウンドカードを使用して、カスタムDSP

それらの間のチャネルは、あなたが
をしたい任意の順序で、あなたが希望する任意のエフェクトを適用する移動DSPは、以下を使用してセットアップされます。

HDSP BASS_ChannelSetDSP(
    DWORD handle, 
    DSPPROC *proc, 
    void *user, 
    int priority 
); 

例:ステレオ16ビットチャンネルの左右のチャンネルをスワップするシンプルなDSP機能。

void CALLBACK SwapDSP(HDSP handle, DWORD channel, void *buffer, DWORD length, void *user) 
{ 
    short *s=buffer; 
    for (; length; length-=4, s+=2) { 
     short temp=s[0]; 
     s[0]=s[1]; 
     s[1]=temp; 
    } 
} 
(BASSenc介してアドオンを介しWMAエンコード&放送、およびその他の形式)

複数のデバイスサポートと入力選択による柔軟な記録方式、記録

FFT
例:チャネル上で1024サンプルのFFTを実行し、結果をリストします。

float fft[512]; // fft data buffer 
BASS_ChannelGetData(channel, fft, BASS_DATA_FFT1024); 
for (int a=0; a<512; a++) 
    printf("%d: %f\n", a, fft[a]); 
0

私がしようとしてSTK推薦:あなたはあなたのプログラムに必要 https://ccrma.stanford.edu/software/stk/ あなただけのコピー過去できることは、(読み取りと.wavファイルを書き込むことを言うことができます)。使用するのはかなり簡単です。チュートリアル(C++コード付き)があります。彼らはそれがクロスプラットフォームであると言います。 Linux用にコンパイルする場合は、g ++のコマンドラインに「-D__LITTLE_ENDIAN__」を追加してください。

P.S.ちょうど最初のチュートリアルを見てください。彼らは本当に短く、シンプルで簡単です。

関連する問題