Tag: 音频

将URL传递给从WAV文件中提取样本的特定示例代码

我不知道在SOF上访问这样一个特定问题是否合法,但我在这里: 我发现了这段精彩的代码 ,它从WAV文件中获取所有样本并将其传递给数组。 代码编译,但我似乎无法弄清楚在哪里传递文件所在的参数以及它的名称。 有帮助吗? PS如果这段代码完成它所说的那样,我认为它可能对很多人有用。 谢谢!

如何传入一个void参数的对象?

我正在使用MusicPlayer API,我正在尝试解决用户回调问题。 我有用户事件放在MIDI的每个音符事件中。 播放音符时,这些用户事件将音符的整数值传递给用户回调函数* inEventData: void noteUserCallback (void *inClientData, MusicSequence inSequence, MusicTrack inTrack, MusicTimeStamp inEventTime, const MusicEventUserData *inEventData, MusicTimeStamp inStartSliceBeat, MusicTimeStamp inEndSliceBeat) { UserEvent* event = (UserEvent *)inEventData; UInt32 size = event->length; UInt32 note = event->playedNote; UInt32 timestamp = event->tStamp; NSLog(@”Size: %lu Note: %lu, Timestamp: %lu”, size, note, timestamp); switch (note) { case 60: [whiteKey60 […]

将PCM转换为wav文件

#include #include int main() { FILE *fin,*fout; char buffer[1028]; int readcount=0; short NumChannels = 1; short BitsPerSample = 16; int SamplingRate =8000; short numOfSamples = 160; int ByteRate = NumChannels*BitsPerSample*SamplingRate/8; short BlockAlign = NumChannels*BitsPerSample/8; int DataSize = NumChannels*numOfSamples * BitsPerSample/8; int chunkSize = 16; int totalSize = 36 + DataSize; short audioFormat = 1; if((fout […]

用FFTW计算音频数据的离散傅里叶变换

我对信号处理很陌生,所以请原谅我,如果我吵了一下。 我已经下载并安装了适用于Windows的FFTW。 文档还可以,但我仍然有疑问。 我的总体目标是从计算机上的声卡中捕获以44100采样/秒采样的原始音频数据(此任务已使用库和我的代码实现),然后对此音频数据块执行DFT。 我只对在音频中找到一系列频率成分感兴趣,而且我不会执行任何逆DFT。 在这种情况下,所有必要的是真实到真实的转换,因此fftw_plan_r2r_1d()函数? 我要转换的数据块长度为11025个样本。 我的函数调用如下所示。 这将产生11025个频段的频谱arrays。 我如何知道结果中的最大频率成分? 我相信bin间距是Fs / n,44100/11025,所以4.这是否意味着我将在arrays中从0 Hz一直到44100Hz,步长为4,或者高达一半的频谱奈奎斯特频率22200? 这对我来说是一个问题,因为我只想搜索60Hz到3000Hz的频率。 有没有办法限制变换范围? 我没有看到该函数的任何参数,或者可能还有另一种方法? 非常感谢您提供任何帮助。 p = fftw_plan_r2r_1d(11025, audioData, spectrum, FFTW_REDFT00, FFTW_ESTIMATE);

杰克的“32位浮动单声道音频”

我正在玩杰克 ,我注意到默认音频类型JACK_DEFAULT_AUDIO_TYPE被设置为“32位浮点单声道音频”。 我有点困惑:IEEE定义32位C浮点范围大约从3.4E-38到3.4E + 38,我想知道jack_default_audio_sample_t可以容纳的最大和最小“未失真”幅度是jack_default_audio_sample_t 。 例如,如果某些DSP算法给出了[0,1]范围内的样本,我怎样才能正确地在它们和Jack的格式之间进行转换?

我有一个.mp3文件。 如何从C中的其余声音中分离出人声?

它是否有可能在C [我知道它有可能一般 – GOM播放器做到了]? 让我开始吧……你怎么说? 你如何确定人声与其他声音的区别?

使用C编程频谱图

我正在尝试用C制作音频频谱图,并考虑使用BASS库: http://www.un4seen.com 。 我在谷歌和这里搜索过,但大多数例子都是用C ++编写的。 如果您对此有任何经验或资源,请提供帮助; 非常感谢。 所以这就是我想要做的: 从麦克风输入读取。 对数据进行采样。 应用短时傅里叶变换。 然后取出幅度并以特定频率绘制它。 像这样的东西: http://upload.wikimedia.org/wikipedia/commons/c/c5/Spectrogram-19thC.png 如果你能提供帮助就会很棒。

使用C创建立体声WAV文件

我正在寻找用C创建一个WAV file ,并在这里看到了一个例子。 这看起来不错,但我有兴趣添加两个缓冲区来制作音频立体声(每个耳朵可能有不同的声音) 。 如果我将通道数设置为2,则音频仅从左通道播放(显然是正确的,因为左声道是第一个通道)。 我已经读过我必须将它与正确的频道交错。 不幸的是,我没有找到很多在线帮助创建立体声WAV。 write_little_endian((unsigned int)(data[i]),bytes_per_sample, wav_file); 我试图创建第二个缓冲区,振幅减半,看看我是否可以交错。 for (j=0; i<BUF_SIZE; i++) { phase +=freq_radians_per_sample; buffertwo[i] = (int)((amplitude/2) * sin(phase));; } write_wav("test.wav", BUF_SIZE, buffer, buffertwo, S_RATE); (更改函数以获取两个短整数缓冲区) 而且只是做 write_little_endian((unsigned int)(data[i]),bytes_per_sample, wav_file); write_little_endian((unsigned int)(datatwo[i]),bytes_per_sample, wav_file); 但这不起作用。 理论上这应该是交错的。

AudioQueue吃了我的缓冲区(前15毫秒)

我正在以编程方式生成音频。 我听到缓冲区之间的沉默差距。 当我将手机连接到示波器时,我发现每个缓冲器的前几个样本都丢失了,而且它们的位置是静音。 这种沉默的长度从几乎没有变化到20毫秒。 我的第一个想法是我的原始回调函数需要太多时间。 我用尽可能短的替换它 – 它反复重新排队相同的缓冲区。 我观察到同样的行为。 AudioQueueRef aq; AudioQueueBufferRef aq_buffer; AudioStreamBasicDescription asbd; void aq_callback (void *aqData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer) { OSStatus s = AudioQueueEnqueueBuffer(aq, aq_buffer, 0, NULL); } void aq_init(void) { OSStatus s; asbd.mSampleRate = AUDIO_SAMPLES_PER_S; asbd.mFormatID = kAudioFormatLinearPCM; asbd.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; asbd.mBytesPerPacket = 1; asbd.mFramesPerPacket = 1; asbd.mBytesPerFrame […]

用于音频重采样的库

在嵌入式(Windows CE)C ++项目中,我必须将任意采样率重新采样(或向上)到44100 Hz。 是否有用于音频重采样的免费便携式C / C ++库?