C++;用于生成和读取音频的库 我正在寻找一个C++库(对于Linux,但最好是跨平台),它将让我轻松读取一些简单的格式的音频文件,如原始字节流,以相同的简单格式生成音频数据,并编写音频文件。我不在乎阅读和写作的格式,只要它是免费的(啤酒和演讲),并且得到普遍支持。我将在一个非常并行的程序中读取、转换和生成许多小的音频片段,因此我需要库速度快且线程安全

C++;用于生成和读取音频的库 我正在寻找一个C++库(对于Linux,但最好是跨平台),它将让我轻松读取一些简单的格式的音频文件,如原始字节流,以相同的简单格式生成音频数据,并编写音频文件。我不在乎阅读和写作的格式,只要它是免费的(啤酒和演讲),并且得到普遍支持。我将在一个非常并行的程序中读取、转换和生成许多小的音频片段,因此我需要库速度快且线程安全,c++,linux,audio,C++,Linux,Audio,我喜欢但不需要的附加功能是简单的DSP功能(FFT、滤波器)和通过声卡录制/播放 谷歌搜索没有发现任何东西,但也许我使用了错误的搜索词。我几乎只找到了用于录制或播放应用程序的库,目前还不清楚它们是否有能力从原始字节生成声音,即使它们有,但就我的目的而言,它们似乎有些过头了。我一直在考虑编写我自己的库来处理WAV文件,因为它们看起来很简单,但如果可以避免的话,我不想重新发明轮子。我可能完全不喜欢这里,但从你的描述来看,你似乎在寻找类似或的东西。OpenAL是完全免费的,但FMOD仅用于非商业用途。

我喜欢但不需要的附加功能是简单的DSP功能(FFT、滤波器)和通过声卡录制/播放


谷歌搜索没有发现任何东西,但也许我使用了错误的搜索词。我几乎只找到了用于录制或播放应用程序的库,目前还不清楚它们是否有能力从原始字节生成声音,即使它们有,但就我的目的而言,它们似乎有些过头了。我一直在考虑编写我自己的库来处理WAV文件,因为它们看起来很简单,但如果可以避免的话,我不想重新发明轮子。

我可能完全不喜欢这里,但从你的描述来看,你似乎在寻找类似或的东西。OpenAL是完全免费的,但FMOD仅用于非商业用途。两者都是线程安全的,并且是跨平台的

正如您所猜测的,由于缺乏(好的)文档和适当的示例,开始使用OpenAL比FMOD困难得多

和呢?但没有DSP功能。

文件R/W:

快速傅立叶变换:

硬件接口:

是跨平台且广泛使用的:

GStreamer是一个用于构建媒体处理组件图形的库。它支持的应用范围从简单的Ogg/Vorbis播放、音频/视频流到复杂的音频(混合)和视频(非线性编辑)处理


查看BASS库www.un4seen.com
BASS是非商业用途的免费

平台:Win32、OSX、Linux
BASS还可用于Win64、WinCE、iOS、Android和ARM Linux平台

BASS是一个音频库,用于多种平台上的软件。它的 目的是为开发者提供强大高效的样本, 流(MP3、MP2、MP1、OGG、WAV、AIFF、自定义生成等) 操作系统编解码器和附加组件)、MOD音乐(XM、IT、S3M、MOD、MTM、UMX)、MO3 音乐(MP3/OGG压缩MODs)和录音功能。一气呵成 压缩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功能,用于交换立体声16位通道的左/右通道

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;
    }
}
录制
灵活的录音系统,支持多种设备和输入选择(通过附加组件进行WMA编码和广播,通过BASSenc进行其他格式)

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]);
浮点fft[512];//fft数据缓冲器
BASS_channel GetData(通道、fft、BASS_DATA_FFT1024);

对于(int a=0;a我建议尝试STK: 你可以把你需要的东西复制到程序中(比如说读写WAV文件)。使用起来相当简单。它有教程(用C++代码)。他们说它是跨平台的。如果你要编译它,只需记住将'-dy-LytleLyEndiaNu''添加到你的G+命令行。


我们只需看看第一个教程。它们确实很短,简单明了。

我知道你说你想要C++来加速,但是我建议你用八度音阶来做原型,然后移植到C++中。对于C++,你可以使用PARTAUDIO @ TJD:大部分繁重的处理都是用遗传算法来完成的,所以没有。还有很多原型要做,而且我认为octave不适合做这项任务。@Samaursa:我还没有决定这是商业项目还是开源项目,或者只是一个爱好项目……这可能取决于它的成功程度。一个免费的所有用途许可证将是最好的。
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]);