将.pcm音频原始数据附加到wav中(在C中)

时间:2018-01-04 15:17:17

标签: c audio wav pcm

在谷歌搜索了很长时间后,我无法找到答案。所以,我想在stackoverflow上提出问题。由于公司政策的原因,我无法在此分享代码,但我可以分享我获取知识的链接。 所以,我想要做几天 - 将.pcm文件转换为.wav文件格式。 我正在分享一些关于wav标题的链接以及我如何设计struct wav然后在.wav文件中写入该标题之后我想在写入wave标题之后附加.pcm原始数据但是我在想的问题是在附加pcm数据。 点击我在c - link1wave-header infolink2link3中编写代码所遵循的链接。

预先requsite将pcm转换为wav。作为输入

  • sample_rate = 44100
  • 渠道= 1
  • bits_per_sample(bit_depth或data_width)= 16

我不知道它需要字节顺序(byte_order)。 所以,我们以前需要这些东西。好的,现在逐一告诉我这些事情。

  1. CHUNK_SIZE
  2. no_of_samples
  3. fmt_length
  4. byte_rate
  5. block_align
  6. Subchunk2_size或data_size
  7. 现在,我将分享我所知道的。如果我错了,请纠正我。

    • chunk_size = 36 + data_size或subchuck2_size 注意:data_size我通过ftell(ptr)计算并且ptr指向pcm文件或另一种方法是data_size =(channels * no_of_samples * bits_per_sample)/ 8.
    • no_of_samples =(data_size * 8)/(channels * bits_per_sample);
    • fmt_length = 16
    • byte_rate =(sample_rate * bits_per_sample * channels)/ 8
    • block_align =(channels * bits_per_sample)/ 8
    • data_size =(channels * no_of_samples * bits_per_sample)/ 8
    • float time =(float)file_size /(float)((sample_rate * channels * bits_per_sample)/ 8);

    混淆在chunk_size和data_size或(subchunk2_size)。

    将wav标题写入文件后如何编写pcm数据

    for(n = 0; n < chunk_size; n++)
    {
        a = fgetc(ptr2);
        fwrite(&a,sizeof(char),1,ptr);
    }
    

    注意:ptr2是pcm文件的fopen返回。

    所以,我认为,我正在以错误的方式将pcm数据附加到wav文件中。

    请告诉我解决方案。我提前感谢你。指导完全赞赏。

0 个答案:

没有答案