当前位置:   article > 正文

语音处理:Python实现wav与pcm文件格式转换_python wav二进制数据转为pcm格式

python wav二进制数据转为pcm格式

语音处理:Python实现wav与pcm格式转换

知识点


  • wave包的读写及参数设置
  • 文件路径操作拼接
  • 音频相关参数了解

wav文件存储的参数信息有:通道数、采样率、位深,其他参数如文件大小,数据大小等。详细内容见:wav文件格式解析

wav转pcm


思路:

  • 利用wav工具包,跳过包头,直接读取裸流bytes数据
  • 将裸流数据wb模式按二进制写入pcm文件中
import os
import wave

def wav2pcm(input_dir, out_dir) :
    with open(input_dir, 'rb') as wavfile:
        ori_data = wavfile.read() ## 读出来是裸流bytes数据
        wavfile.close()
    with open(out_dir, 'wb') as pcmfile:
        pcmfile.write(ori_data)
        pcmfile.close()

if __name__ == '__main__':
    wav2pcm(os.path.join(r"D:\seq\input\6channel_file.wav"), 
            r"D:\seq\out\6channel_file_48k_16bit.pcm")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

pcm转wav


## 功能:将pcm文件转成对应wav文件,无压缩

import os
import wave

def pcm2wav(pcm_path, out_path, channel, sample_rate):
    with open(pcm_path, 'rb') as pcm_file:
        pcm_data = pcm_file.read()
        pcm_file.close()
    with wave.open(out_path, 'wb') as wav_file:
        ## 不解之处, 16 // 8, 第4个参数0为何有效
        wav_file.setparams((channel, 16 // 8, sample_rate, 0, 'NONE', 'NONE'))
        wav_file.writeframes(pcm_data)
        wav_file.close()

if __name__ == '__main__':
    dir = r"C:\Users\Administrator\Desktop\test"
    out_dir = dir + r"\outwav"
    sample_rate = 48000
    channel = 1
    out_path = os.path.join(out_dir, "16k.wav")
    pcm2wav(os.path.join(dir, "16k.pcm"), out_path, channel, sample_rate)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

参考资料


  1. Python的wave工具包读写WAV操作说明
  2. WAV和PCM的转换(Python版本)
  3. python音频处理常用到的操作
  4. python标准库wave的使用说明
  5. PCM数据包格式说明
  6. WAV文件格式解析
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/995061
推荐阅读
相关标签
  

闽ICP备14008679号