2012-02-04 4 views
10

私はドキュメント、チュートリアル、音を生成する方法の例を見つけることを試みています。私は、興味深いものをすべて隠すライブラリを使用しないで意味します。ライブラリーのないサウンドを生成しますか?

私は音で面白く、何かを始めたいと思っていますが、どこから始めたらいいのか分かりません。

私が間違っていても、OSによっては音を生成する最低レベルがこれらのうちの1つ(DirectSound 、CoreAudio、ALSA、OSS)です。だから私はオペレーティングシステムを選んで、適切なサウンドシステムを学ばなければならないのですか?

これは本当に価値があるのですか、上記の内容をすべて網羅したライブラリを学ぶだけで、プラットフォーム間の互換性を提供する必要がありますか?

多分この質問はあまり明確ではなく、私はそれを残念に思っていますが、判明したように私は自分が何を望むか分からないのです。私は自分の論文のために興味深いものを見つけようとしているだけです。

+1

SDLを撮影する必要があります。 –

+0

これはあなたの質問に直接答えるものではありませんが、サウンドを作るために作られていないコンピュータでサウンドを作ったミュージシャンについては興味深い事実です:http://en.wikipedia.org/wiki/Aphex_Twin#ZX81_competition –

+0

@AlexReynoldsそれは刺激的です。 – kechapito

答えて

7

ここでは、始めるための例を示します。

// filename "wf.cpp" (simple wave-form generator) 

    #include <iostream> 
    #include <cmath> 
    #include <stdint.h> 

int main() 
    { 

    const double R=8000; // sample rate (samples per second) 
    const double C=261.625565; // frequency of middle-C (hertz) 
    const double F=R/256; // bytebeat frequency of 1*t due to 8-bit truncation (hertz) 
    const double V=127; // a volume constant 

    for (int t=0; ; t++) 
     { 
     uint8_t temp = (sin(t*2*M_PI/R*C)+1)*V; // pure middle C sine wave 
    // uint8_t temp = t/F*C; // middle C saw wave (bytebeat style) 
    // uint8_t temp = (t*5&t>>7)|(t*3&t>>10); // viznut bytebeat composition 
     std::cout<<temp; 
     } 

    } 

コンパイルとALSAインタフェースを介してLinux上で実行します。

make wf && ./wf |aplay 

コンパイルとのGStreamerインタフェースを介してLinux上で実行します。クロスプラットフォームになるために

make wf && ./wf |gst-launch-0.10 -v filesrc location=/dev/stdin ! 'audio/x-raw-int,rate=8000,channels=1,depth=8' ! autoaudiosink 

GStreamer主張。重要なのは、プラグインを作成して(または既存のものを使用して)、オーディオフィルタのパイプラインを構築できることです。

+0

私の例では8ビットモノラルを使用していますが、他のフォーマット(たとえば16ビットステレオ)を使用するように簡単に変更できます。 – nobar

+0

それは私が必要としていたものでした。ありがとうございました。 – kechapito

+0

CDを再生する: 'find/run/user/$ {USER}/gvfs/cdd * -iname" * .wav "-print0 | xargs -0 aplay' – nobar

5

一部のUnix(ish)システムでは、just write audio data to /dev/audio (or /dev/dsp)とすることができます。 ALSAを使用している現代のLinuxシステムでは、代わりにaplayにパイプする必要があります。どちらの場合でも、特定のサウンドライブラリを使用する必要はありません—出力ストリームを開いて書き込むだけです。これは、これらのすべてがbytebeatワンライナーで行う方法です。

+0

+1。ここでのバイトビータの概要:http://www.metafilter.com/tags/bytebeat –

2

あなたがオーディオハードウェアとcomunicateする必要がありますが、あなたがそれを行うことが可能な時間は、直接長いオーバーです...

iはOpenALを示唆するかもしれませんか?

2

他のすべての答えは、抽象またはライブラリを示唆しています。ハードウェアに直接フォールバックする可能性は常にあります。 (これは良い考えであるかどうかはまったく別の質問で、決定するのはあなた次第です)

オーディオドライバのコードを調べることをお勧めしますか? Emu10k1ドライバは、Linuxのソースで利用可能な1つの例です。また

外観はこれで価値がある:私もいくつかの面白い男は(AB-)Floppy drive stepper motor as an audio outputを使用するプログラムを作成したアミーガの日を覚えている「Creating a Kernel Driver for the PC-Speaker

関連する問題