Tag: pcm

使用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, […]

将PCM 16bit LE转换为WAV

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

有人可以在这里找到PCM音频数据的高通滤波器样本吗?

美好的一天。 我是DSP的穷人。 我很难理解算法。 我有一个ac#应用程序,一个记录声波的录音机function,但这个声音是所有声音的混合物。 具体来说,当我收到数据时,我将过滤此数据以仅保存高频滤波后的音频数据,例如截止频率为15khz。 对于此滤波器,给出的是具有大小和截止频率的数据样本 C / C ++很好 在我收到数据样本时,应用高通滤波器,然后将结果保存到wav。 -thong

如何从WAV样本数据中提取频率?

我正在用c开发一个应用程序来读取简单的PCM WAV文件。 我的问题是,我应该如何解释数据块中的样本,以便我可以提取样本的频率? 给定WAV示例,原始数据如何表示频率。 例如,这个数据块,24 17 1e f3,对于立体声,16位,左声道样本是,0x1724 = 5924d,意味着5924Hz? 对于签名的样本或人类听不到的频率,怎么可能呢?

混合16位线性PCM流并避免削波/溢出

我试图将2个16位线性PCM音频流混合在一起,我似乎无法克服噪音问题。 我认为将样品混合在一起时它们会溢出。 我有以下function…… short int mix_sample(short int sample1, short int sample2) { return #mixing_algorithm#; } ……这就是我尝试过的#mixing_algorithm# sample1/2 + sample2/2 2*(sample1 + sample2) – 2*(sample1*sample2) – 65535 (sample1 + sample2) – sample1*sample2 (sample1 + sample2) – sample1*sample2 – 65535 (sample1 + sample2) – ((sample1*sample2) >> 0x10) // same as divide by 65535 其中一些产生了比其他产品更好的效果,但即使是最好的结果也包含了很多噪音。 任何想法如何解决?

将原始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 […]