2012-02-04 114 views
10

我想找到有关如何生成声音的文档,教程,示例。我的意思是没有使用将隐藏所有有趣的东西的图书馆。在没有库的情况下生成声音?

我对声音很感兴趣,我想开始做一些事情,但我不知道从哪里开始。

纠正我,如果我错了,但生成声音的最低级别是其中之一(DirectSound ,CoreAudio,ALSA,OSS),具体取决于操作系统。所以我必须选择一个操作系统并学习合适的音响系统?

这真的是值得的,或者我应该学习一个包装所有上述内容并提供跨平台兼容性的库?

也许这个问题不是很清楚,我很抱歉,但事实证明,我甚至不知道我想要什么。我只是想为我的论文找到一些有趣的东西。

+1

您应该给SDL一个镜头。 – 2012-02-04 00:27:32

+0

这并不直接回答你的问题,只是它是一个有趣的事实,关于一个音乐家用电脑制作声音并不是为了制作声音:http://en.wikipedia.org/wiki/Aphex_Twin#ZX81_competition – 2012-02-04 00:34:40

+0

@AlexReynolds这很鼓舞人心。 – kechapito 2012-02-04 00:46:29

回答

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; 
     } 

    } 

编译和经由运行在Linux ALSA接口:

make wf && ./wf |aplay 

编译和经由运行在Linux的GStreamer接口:

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 2012-02-05 02:33:13

+0

这就是我需要的。谢谢。 – kechapito 2012-02-05 13:54:12

+0

播放CD:'find/run/user/$ {USER}/gvfs/cdd * -iname“* .wav”-print0 | xargs -0 aplay' – nobar 2013-05-06 00:02:05

5

在某些Unix(ish)系统上,您可以使用just write audio data to /dev/audio (or /dev/dsp)并且它会播放。在使用ALSA的现代Linux系统上,您可能需要将其传输到aplay。不管是哪种情况,您都不需要使用任何特定的声音库—只需打开一个输出流并写入它。这就是所有那些bytebeat单线球员做到这一点的方式。

+0

+1。这里介绍一下bytebeaters的概述:http://www.metafilter.com/tags/bytebeat – 2012-02-04 01:07:39

2

您需要与音频硬件comunicate,但次,你可以做到这一点直接早已过去......

可能我建议OpenAL

2

所有其他答案只是建议一些抽象或图书馆。总是有可能直接回退硬件。 (这是一个好主意是一个完全不同的问题,完全取决于你自己决定)

我可以建议看音频驱动程序代码吗?驱动程序只是Linux源代码中的一个例子。

另外值得一看是这样的:“Creating a Kernel Driver for the PC-Speaker

我还记得在Amiga的日子,其中有些滑稽的花花公子创建的(AB-)使用Floppy drive stepper motor as an audio output的程序。

相关问题