当前位置: 首页 > news >正文

python使用技巧(二十七):音频WAV和PCM的互相转换

wav和pcm是语音信号处理中最常见的文件格式,时常会遇到需要两种文件格式的相互转换。wav存储的一般是解码后为[-1, 1]的float数据,文件头有44个字节记录文件的采样率、长度等等信息。pcm存储的是int型整数,不含任何采样率相关信息。虽然原理比较简单,但是整理后更便于利用。
wav转pcm:原理:将文件头去掉,数据转成int型即可

import numpy as np
def wav2pcm(wavfile, pcmfile, data_type=np.int16):
    f = open(wavfile, "rb")
    f.seek(0)
    f.read(44)
    data = np.fromfile(f, dtype= data_type)
    data.tofile(pcmfile)

pcm转wav:原理:利用wave库,添加通道信息、采样位数、采样率等信息作为文件头,pcm数据直接写入即可。

import wave
def pcm2wav(pcm_file, wav_file, channels=1, bits=16, sample_rate=16000):
    pcmf = open(pcm_file, 'rb')
    pcmdata = pcmf.read()
    pcmf.close()

    if bits % 8 != 0:
        raise ValueError("bits % 8 must == 0. now bits:" + str(bits))

    wavfile = wave.open(wav_file, 'wb')
    wavfile.setnchannels(channels)
    wavfile.setsampwidth(bits // 8)
    wavfile.setframerate(sample_rate)
    wavfile.writeframes(pcmdata)
    wavfile.close()

参考:https://www.cnblogs.com/dreamboy2000/p/15337029.html
https://www.cnblogs.com/dreamboy2000/p/15336973.html
python pcm音频添加头转成Wav格式文件的方法:https://www.jb51.net/article/154351.htm
java实现:https://github.com/adaJQD/avstudy

C++将音频PCM数据封装成wav文件的方法:https://www.jb51.net/article/234519.htm

Python实现将mp3音频格式转换为wav格式:https://www.jb51.net/article/233677.htm

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java学习备忘录(一)安装篇(原创)
  • C语言使用技巧(三十二):读写txt文件指定行指定所有行类型数据
  • AI模型设计:安装C++版本的libtensorflow(1.10~2.6.0)以及TFC++ demo源码的实现
  • 酒店管理(链表和文件操作)
  • AI模型设计:配置C++版本pytorch(libtorch 1.12)开发环境以及demo源码的实现
  • 2004年6月22日
  • ubuntu20.04安装Android Studio
  • C/C++使用技巧(二十二):再谈C/C++多文件编译生成与调用的静态库/动态库[本文所有源码分享]
  • 新的生活今天开始~
  • AI模型设计:完美实现C语言调用python训练的tensorflow2.5-gpu循环神经网络模型并进行预测
  • 2004下半年高级程序员考试大纲(整理版)
  • C/C++语言使用技巧(三十三):强大的数学计算库gsl与算法实现
  • Java学习备忘录(二)基础语法和数组(原创)
  • 完美解决linux编译动态库出现的问题:ERROR: ld.so: object LD_PRELOAD cannot be preloaded: ignored
  • Docker容器和主机互相拷贝传输文件
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 30天自制操作系统-2
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Web设计流程优化:网页效果图设计新思路
  • 爬虫模拟登陆 SegmentFault
  • 前端相关框架总和
  • 如何选择开源的机器学习框架?
  • 详解移动APP与web APP的区别
  • ​如何防止网络攻击?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • (5)STL算法之复制
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (十五)使用Nexus创建Maven私服
  • (四)事件系统
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .Net MVC4 上传大文件,并保存表单
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET成年了,然后呢?
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • @KafkaListener注解详解(一)| 常用参数详解
  • @取消转义
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [ACTF2020 新生赛]Include
  • [ActionScript][AS3]小小笔记
  • [Angular 基础] - 表单:响应式表单
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [C#]使用PaddleInference图片旋转四种角度检测
  • [C/C++入门][ifelse]20、闰年判断
  • [C++]C++基础知识概述
  • [C++]C++类基本语法
  • [caffe(二)]Python加载训练caffe模型并进行测试1
  • [GUET-CTF2019]encrypt
  • [hdu1561] The more, The Better 【树形DP】