没有库生成声音?

kec*_*ito 12 c c++ audio

我试图找到有关如何生成声音的文档,教程和示例.我的意思是不使用会隐藏所有有趣内容的库.

我对声音感兴趣,我想开始用它做点什么,但我不知道从哪里开始.

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

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

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

nob*_*bar 9

这是一个让你入门的例子.

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

   }
Run Code Online (Sandbox Code Playgroud)

通过ALSA接口在Linux上编译和运行:

make wf && ./wf |aplay
Run Code Online (Sandbox Code Playgroud)

通过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
Run Code Online (Sandbox Code Playgroud)

GStreamer声称是跨平台的.感兴趣的主要特征是您可以创建(或使用现有的)插件来构建音频过滤器管道.


Ilm*_*nen 5

在某些Unix(ish)系统中,您可以将音频数据写入/dev/audio(或/dev/dsp)并播放.在使用ALSA的现代Linux系统上,您可能需要将其管道化aplay.但在任何一种情况下,您都不需要使用任何特定的声音库 - 只需打开输出流并写入即可.这就是所有那些bytebeat one-liners的做法.