Tag: audio

未找到libFLAC符号和vtable错误

我已经从macintosh os x 10.6.8下的源代码编译了libFLAC,并成功测试了WAV到FLAC的转换(从命令行)。 我也使用了默认构建:./ configure –prefix =“$ base / flac / more /” – exec-prefix =“$ base / flac / main /” – disable-asm-optimizations && make && make install 现在将FLAC头文件和库的路径添加到一个全新的项目中之后。 我试图使用libFLAC解码并将FLAC音频加载到系统内存中,在libFLAC捆绑的示例代码下。 但是,我使用标准C +方法得到symbols not found错误标准C和vtable symbols not found错误(如下所示)。 Errors under the C approach: “ FLAC _stream_decoder_get_state”,引自: _main in main.o “ FLAC _stream_decoder_new”,引自: _main in […]

使用C创建立体声sin WAV

我试图在C中创建一个立体声正弦波WAV,可能有一个不同的(可能是空白的)左右声道。 使用此function为每个通道生成一个音调: int16_t * create_tone(float frequency, float amplitude, float duration) 然后我打开一个FILE*并调用create_wav 。 以下是我用来创建WAV的两个结构: struct wav_h { char ChunkID[4]; int32_t ChunkSize; char Format[4]; char Subchunk1ID[4]; int32_t Subchunk1Size; int16_t AudioFormat; int16_t NumChannels; int32_t SampleRate; int32_t ByteRate; int16_t BlockAlign; int16_t BitsPerSample; char Subchunk2ID[4]; int32_t Subchunk2Size; }; struct pcm_snd { int16_t channel_left; int16_t channel_right; }; 这是创建WAV文件的实际function: int create_wav_file(FILE* file, […]

将mp3解码为整数流

我正在寻找一个易于使用的lib,它将MP3文件转换为一系列int值(反之),最好不要将它们全部转储到RAM中。 像API一样“将下一个16kB解码到此缓冲区”将是理想的选择。 我需要C或简单的C ++绑定。 MP3 RAWfilterCLI工具可以工作,但我不必将未压缩的文件保存在磁盘上。

如何在WAV文件数据上执行FFT?

我试图通过检测存在的最高频率来分析文件的音频质量(压缩音频通常会被过滤到低于20KHz的值)。 我正在使用soundstretch库中的类来读取WAV文件数据,该类将PCM样本作为浮点数返回,然后使用fftw3库对这些样本执行FFT。 然后对于每个频率(四舍五入到最接近的KHz),我总计该频率的幅度。 因此,对于不包含16KHz以上频率的低质量文件,我预计在16KHz以上没有振幅或振幅很小,但是我没有得到我期望的结果。 以下是我的代码: #include #include #include #include #include “include/WavFile.h” using namespace std; using namespace soundtouch; #define BUFF_SIZE 6720 #define MAX_FREQ 22//KHz static float freqMagnitude[MAX_FREQ]; static void calculateFrequencies(fftw_complex *data, size_t len, int Fs) { for (int i = 0; i < len; i++) { int re, im; float freq, magnitude; int index; re = […]

防止使用整数进行自动转换

我正在开发一个音频应用程序(用C ++编写),我有很多相互调用的函数,它们可以采用帧数(即1个单声道或2个立体声浮点样本)或原始数量的样本…… 跟踪每个函数(样本或框架?)的语义以及何时通过nChannels跟踪多个或div,所以我想以某种方式做一个typedef samples_t和frames_t(到unsigned int)并让编译器帮助变得越来越困难我出去…… 是否有任何简单的方法可以将从frames_t到samples_t的隐式转换在C ++中标记为错误?

从C代码获取ALSA峰值

我正在尝试使用ALSA和C检索当前音频峰值。我希望将此值设置为介于0.0和1.0(或者可能为0和100)之间的标量。 在Windows上我使用IAudioMeterInformation ,它允许我构建一个非常基本的VU表。 编辑:我指的是仅检测扬声器输出,而不是麦克风。

将PCM 16bit LE转换为WAV

我正在尝试用C编写一个程序,将捕获的Raw 16kHz PCM 16位文件转换为16位WAV 。 我已经阅读了一些post和推荐使用libsox 。 安装它,现在我真的很难理解man-page 。 到目前为止(通过阅读源dist中的示例)我已经找到了structs : sox_format_t sox_signalinfo_t 可能可以用来描述我正在输入的数据。 如果有必要,我也知道我正在处理多少信息(时间)? 一些指导表示赞赏!

FFMPEG寻求带来音频伪像

我正在使用ffmpeg实现音频解码器。 在阅读音频甚至寻找已经有效的时候,我无法找到一种方法来清除缓冲区后寻求所以当应用程序在搜索后立即开始读取音频时我没有任何文物。 avcodec_flush_buffers似乎对内部缓冲区没有任何影响。 所有解码器(mp3,aac,wma,…)都会出现此问题,但PCM / WAV(由于未压缩音频,因此不使用内部缓冲区来保存数据以进行解码)。 代码片段很简单: av_seek_frame(audioFilePack->avContext, audioFilePack->stream, posInTimeFrame, AVSEEK_FLAG_ANY); avcodec_flush_buffers(audioFilePack->avContext->streams[audioFilePack->stream]->codec); 解释: audioFilePack->avContext = FormatContext audioFilePack->stream = Stream Position (also used to read audio packets) audioFilePack->avContext->streams[audioFilePack->stream]->codec = CodecContext for the codec used 关于我应该做什么的任何想法,我可以寻求并获得没有剩余音频? 谢谢!

跨平台声音API

我正在研究开发一个需要实时流式传输音频的应用程序。 我更喜欢使用一些用C或C ++编写的跨平台(windows / linux / BSD)开源库,即使使用相应的操作系统的Sound API编写它仍然是一种选择。 我已经阅读了一些关于各种声音库的内容,包括SFML,SDL和PortAudio。 不可否认,我还没有对FreeBSD和Linux中的Sound进行过充分的研究(这两者之间有多相似?) 主要要求是 从所选麦克风/麦克风获取音频以通过网络发送, 将数据发送到选择的输出设备, 处理声音(过滤,清理噪声,多路复用流等)但这可以在我拥有音频数据后完成,库本身不需要能够执行任何此操作。 具有相当低的延迟 我主要担心的是,这些提到的API似乎主要针对游戏(声音通常从磁盘加载,并且没有太多(如果有的话)录音,而不是通过网络流式传输,录制和播放之间同等重要。 有没有人对这些或其他声音API有任何指示/警告/建议,或者有关长远路径并在相应操作系统的API中实现这一点的优点/缺点? 注意:虽然这个:“要求我们推荐或找到书籍,工具,软件库,教程或其他场外资源的问题都是Stack Overflow的偏离主题”当一个人也认为“as他们倾向于吸引固执己见的答案和垃圾邮件“然后我不认为这个问题应该被关闭。 如上所述寻找这样一个库的人将很难找到任何东西,这个问题的答案几乎总结了所有可用的选项。 因此,这是“通常涵盖……程序员常用的软件工具”; 已接受答案的类别。

Android中支持的OpenSL ESfunction

Android应该通过可通过NDK访问的OpenSL es API支持3D音频。 这或多或少有效,我设法通过创建的播放器和输出组合播放声音。 但是当我尝试使用3D位置接口(SL_IID_3DLOCATION常量)来实现一个听众时,这是播放3D声音所必需的。 但是当我尝试将常量设置为SL_BOOLEAN_TRUE时,CreateListener方法的结果为12传递给LogCat。 12是OpenSL es常量SL_RESULT_FEATURE_UNSUPPORTED的值。 您可以在下面找到代码的一小部分,任何人都可以确认我是否做错了或者该function是否真的未报告,这意味着OpenSL es实现不支持3D音频? #define SL_RESULT_FEATURE_UNSUPPORTED ((SLuint32) 0x0000000C) const SLInterfaceID listener_ids[] = {SL_IID_3DLOCATION}; const SLboolean listener_req[] = {SL_BOOLEAN_TRUE}; result = (*engine)->CreateListener(engine, &listenerObject, 1, listener_ids, listener_req); __android_log_print(ANDROID_LOG_VERBOSE, DEBUG_TAG, “CREATE: [%i]”, result); assert(SL_RESULT_SUCCESS == result); result = (*listenerObject)->Realize(listenerObject, SL_BOOLEAN_FALSE); __android_log_print(ANDROID_LOG_VERBOSE, DEBUG_TAG, “REALIZE: [%i]”, result); assert(SL_RESULT_SUCCESS == result);