Tag: audio

在PortAudio中连续录制(来自麦克风或输出)

我正在尝试在PortAudio中创建一个音乐可视化应用程序,我做了一些基础研究,并找到了一些关于如何从麦克风录制到(临时)文件的示例。 但是没有示例在录制期间数据未用于运行时。 那么如何启动连续的音频流,我可以从当前的“帧”中捕获数据? 这就是我尝试这样做的方式: #include #include #include #include #include “portaudio.h” #define SAMPLE_RATE (44100) typedef struct{ int frameIndex; int maxFrameIndex; char* recordedSamples; } testData; PaStream* stream; static int recordCallback(const void* inputBuffer, void* outputBuffer, unsigned long frameCount, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void* userData){ testData* data = (testData*)userData; const char* buffer_ptr = (const char*)inputBuffer; char* index_ptr = […]

如何以赫兹获得DFT / FFT输出频率?

我想开发音符探测器作为我的学位项目,我想从头开始。 我已经编写了“.wav”文件的代码,该文件从该音频音乐文件中提取所有信息,并为我提供振幅。 然后我为DFT编写了一个代码 – 它给出了一个复数的输出,其中一个轴(实/虚)是幅度/幅度,另一个是相位。 现在问题我想要频率的答案(赫兹不在矢量中)所以我可以检查我的DFT是否给了我正确的输出。 如何将DFT输出转换为频率? 我必须用C语言编写代码,我不想使用任何内置库

绝对的初学者指导在C / C ++中使用音频?

我一直对音频转换软件感到好奇,但是从初学者的角度来看,我从未见过如何编写一个简单的程序,例如将mp3文件转换为wav。 我不是在询问所涉及的任何复杂算法,只是使用简单库的一个小例子。 搜索SO,我提出了几个名字,包括: 瘸 综合工具包 OpenAL的 DirectSound的 但我无法找到任何这些库的直接示例。 通常我不介意涉及大量的代码,但在这里我完全不了解这个主题,所以我总觉得我在黑暗中拍摄。 这里的任何人都有一个关于使用这些库转换声音文件的简单示例/教程吗? 我的问题专门针对C / C ++,因为这些是我目前正在学习的两种语言,所以我想继续关注它们。 编辑 :我忘了提一件事:我在* NIX系统上。

将原始PCM转换为FLAC?

编辑:我已经更新了下面的代码,类似于我所取得的进展。 我正在尝试自己编写.wav标题。 截至目前,代码无法正常工作,音频未正确写入文件。 该代码不包含任何将其转换为.flac文件的尝试。 我正在使用Raspberry Pi( Debian Linux )来记录ALSA库的音频。 录音工作正常,但我需要将输入音频编码到FLAC编解码器中。 这是我迷路的地方。 我花了相当多的时间试图弄清楚如何将这些原始数据转换为FLAC ,但我不断提出如何将.wav文件转换为.flac文件的示例。 这是我用ALSA录制音频的当前( 更新 )代码(可能有点粗糙,我还在拿起C ++): // Use the newer ALSA API #define ALSA_PCM_NEW_HW_PARAMS_API #include #include #include #include struct Riff { char chunkId[4]; // “RIFF” (assuming char is 8 bits) int chunkSize; // (assuming int is 32 bits) char format[4]; // “WAVE” }; struct […]

用于MP3,AAC,WAV的跨平台(C / C ++)音频库

我正在尝试找到一个具有以下function的跨平台音频库(按重要性排序): 完整的Windows,Mac,Linux支持 C / C ++ API 免费/便宜但商业上可行 MP3支持 AAC支持 WMA支持 FLAC支持 OGG支持 ARM Linux支持会很好 开源 我发现了一些东西,比如OpenAL,libao,Bass等,但它们似乎都有操作系统,编解码器或两者的限制。 在大多数情况下,MP3和AAC支持是必须的,因为我正在使用媒体播放器,并希望它支持这些常见格式。 有什么建议?

使用libavcodec将音频编码到aac

我正在使用libavcodec(截至3/3/10的最新git)将原始pcm编码为aac(启用了libfaac支持)。 我这样做是通过每次使用codec_context-> frame_size样本重复调用avcodec_encode_audio来实现的。 前四个调用成功返回,但第五个调用永远不会返回。 当我使用gdb中断时,堆栈已损坏。 如果我使用audacity将pcm数据导出到.wav文件,那么我可以使用命令行ffmpeg转换为aac而没有任何问题,所以我确定这是我做错了。 我写了一个小的测试程序来复制我的问题。 它从文件中读取测试数据,可在此处获取: http : //birdie.protoven.com/audio.pcm (签名16位LE pcm约2秒) 如果我直接使用FAAC,我可以完成所有工作,但如果我可以使用libavcodec,那么代码会更清晰,因为我也编码video,并将两者都写入mp4。 ffmpeg版本信息: FFmpeg version git-c280040, Copyright (c) 2000-2010 the FFmpeg developers built on Mar 3 2010 15:40:46 with gcc 4.4.1 configuration: –enable-libfaac –enable-gpl –enable-nonfree –enable-version3 –enable-postproc –enable-pthreads –enable-debug=3 –enable-shared libavutil 50.10. 0 / 50.10. 0 libavcodec 52.55. 0 / 52.55. 0 libavformat […]

用于游戏的跨平台声音API?

是否只有声音的API? Allegro或SDL等API为我的需求提供了太多。 我只需要一个可以执行以下操作的库: InitSound(); Sound *door = LoadSound(“door.wav”); PlaySound(door,volume); 如果它可以支持Vorbis或MP3等压缩格式,那也会很棒。

如何使用傅里叶变换从WAV文件中提取半精确频率

我们说我有一个WAV文件。 在此文件中,是精确1秒间隔的一系列正弦音。 我想使用FFTW库按顺序提取这些音调。 这特别难吗? 我怎么会这样呢? 另外,将这种音调写入WAV文件的最佳方法是什么? 我假设我只需要一个简单的音频库来输出。 我选择的语言是C.

如何使用C中的FFTW从PortAudio中提取样本的频率信息

我想制作一个程序,用PortAudio录制音频数据(我完成了这部分),然后显示录制音频的频率信息(现在,我想显示每组样本的平均频率)他们进来的时候)。 从我做过的一些研究中,我知道我需要进行FFT。 所以我用谷歌搜索了一个库,在C中找到了FFTW。 但是,现在我有点失落。 我应该怎么处理我记录的样本以从中提取一些频率信息? 我应该使用什么样的FFT(我假设我需要一个真实的数据1D?)? 一旦我进行了FFT,如何从它给我的数据中获取频率信息? 编辑:我现在也发现了自相关算法。 好点吗? 更简单? 非常感谢,对不起,如果这样,我绝对没有经验。 我希望它至少有点意义。