PCM和WAV音频格式的区别,以及python自动转换

2023-05-16

目录

  • WAV和PCM的简单介绍
    • PCM
    • WAV
  • 关于音频的基础知识
    • 声道数channels
    • 采样位数bits
    • 采样频率sample_rate
  • 进阶内容
  • 互相转换代码

WAV和PCM的简单介绍

PCM

pcm:pulse code modulation,脉冲编码调制。将声音等模拟信号变成符号化的脉冲列,予以记录。是由[0]、[1]等符号构成的数字信号,未经过任何编码和压缩处理。pcm是没有压缩的编码方式。

WAV

wav:wav是一种无损音频文件格式,wav都有一个文件头,文件头包括音频流的【编码参数】,而对音频流的编码没有硬性规定,符合ACM规范的编码都行,所以wav格式通常只要在其他编码(pcm、MP3)下,加相应的decode(头文件)就可以转换
在这里插入图片描述
图片引用来源:
WAV和PCM的关系和区别

关于音频的基础知识

声道数channels

声道数即声音通道的数目。比如单声道就是左右声道播放是同一个声音,立体声可以使左右声道分工,使听起来有空间效果。

采样位数bits

也可以称为采样值或取样值,或叫采样精度、位深度,就是将采样样本幅度量化。例如8bits就是把纵坐标分成2的8次方,即256份。可以衡量声音波动变化的一个参数(声卡的分辨率)

采样频率sample_rate

取样频率,每秒取得声音样本的次数。频率越高,声音的质量也就越好,还原也就越真实。

由于人耳的分辨率很有限,太高的频率并不能分辨出来。在16位声卡中有22KHz、44KHz等几级,其中,22KHz相当于普通FM广播的音质,44KHz已相当于CD音质了,目前的常用采样频率都不超过48KHz
在这里插入图片描述
图片引用来源:PCM和WAV数据结构

pcm文件所占容量:储存量=(采样频率*采样位数*声道*时间)/ 8 | (8为单位,字节数)

进阶内容

PCM和WAV数据结构

互相转换代码

import wave
import numpy as np

# pcm转wav格式,单声道,采样精度,采样率
def pcm2wav(pcm_file, wav_file, channels=1, bits=16, sample_rate=16000):
    with open(pcm_file,'rb') as f:
        pcmdata = f.read()

    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()
    
# wav转pcm格式
def wav2pcm(wav_file, pcm_file, data_type=np.int16):
    with open(wav_file,'rb') as f:
        f.seek(0)
        f.read(44)
        data = np.fromfile(f,dtype=data_type)
        data.tofile(pcm_file)

#wav_file,pcm_file分别是两种格式文件的读取(存储)路径

————————————————————————
新学内容,外行,可能有误

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PCM和WAV音频格式的区别,以及python自动转换 的相关文章

随机推荐

  • Linux操作文件的系统调用

    操作文件的系统调用 1 文件操作有关的系统调用 open xff08 xff09 read xff08 xff09 write xff08 xff09 close xff08 xff09 1 xff09 open xff08 xff09 i
  • MySQL 分组查询

    文章目录 分组查询分组函数1 功能2 分类3 特点3 简单的使用4 和distinct搭配使用5 count函数的具体介绍6 和分组函数一同查询的字段有要求 分组查询1 语法2 简单的分组查询3 添加筛选条件3 1添加分组前的筛选3 2添加
  • Android-推荐一个视频播放库JZVideo

    最近项目当中有用到视频播放器这个功能 xff0c 分享一个我的开发心得 一般情况下 xff0c 我们不会去写一个视频播放器 xff0c 因为需要很多知识和播放场景考虑 分享一个我使用到的视频播放器的库 xff0c JZVideo 俗称饺子播
  • java zip压缩/解压工具类 ZipUtil

    public class ZipUtil public static void main String args throws Exception String ss 61 new String 2 ss 0 61 34 D adManag
  • echarts纯option制作自定义日历

    type 61 39 custom 39 34 tooltip 34 34 position 34 34 top 34 34 formatter 34 function p var format 61 echarts format form
  • hdparm命令详解

    hdparm命令来自于英文词组 hard disk parameters 的缩写 其功能是用于显示与设定硬盘参数 对于初次接手一块硬盘设备 了解相关性能属性有很好的帮助 nbsp 语法格式 hdparm 参数 设备名 nbsp 常用参数 n
  • Debian中配置JDK的环境

    在安装完Debian后 xff0c 系统中已经包含了open jdk但是该版本的jdk在开发java程序时有可能出现一些错误 xff0c 但对于不是开发而是普通使用的情况下一般没有太多问题 如果想要进行开发java的程序 xff0c 必须更
  • 【工控机开发】debian下安装QT及Opencv

    1 debian下安装QT开发环境 最近有需求要把虚拟机里面的程序直接在一台工控机上跑 xff0c 也就需要搭建相应的开发环境 首先说明下 xff0c debian下安装QT与在ubuntu下应该是有所区别的 xff0c 一开始偶我在deb
  • 考勤统计,一张表查询每月的员工考勤数据

    近期根据公司人事要求 写了一些关于考勤统计的报表 主要是查询员工每月的考勤数据 要求一行数据显示员工的当月的每天的考勤信息 标的样式如下 然后 根据考勤表 写了如下SQL语句 来实现报表的查询 谨以此做记录 以备后续查阅 SELECT De
  • 无法为数据库中的对象分配空间,因为‘PRIMARY‘文件组已满问题处理方式

    今天公司同事反馈 在手机APP端进行业务操作时 提示无法为数据库中的对象分配空间 因为 PRIMARY 文件组已满 如下所示 出现这个问题的原因是数据库中设置了Log日志限制了文件增长 设置如下所示 然后修改了相关设置 解决该问题 一般出现
  • C#如何连接SAP调用SAP接口函数

    在项目中我们经常会遇到SAP与其他应用系统对接的情况 xff0c 如OA对接SAP的FI HR模块 xff0c 生产系统对接SAP的MM模块等等 这里和大家介绍下C 如果调用SAP接口 xff0c 从而调用SAP接口函数 下面先贴出代码 这
  • SQLServer 分页分页查询优化方案,1秒内查询20万条数据的表

    最近在做sql分页查询的话 发现数据表中的数据量非常大的话 使用count 去统计行数的话 还是非常慢的 20多万条数据的表 用count查询 大概在9秒左右 服务器是4核8G内存的 5秒左右的时间 还是比较难以接受的 9秒时间的SQL语句
  • SQL Server 实现邮件发送功能(配置步骤及存储过程源码)

    日常企业开发中经常会遇到邮件推送的场景 我们利用SQL Server也可以实现邮件发送功能 本文主要和大家分享下利用SQL Server实现邮件发送的具体步骤 1 配置邮件服务器 配置邮件服务器 在SQL Server服务器上面选择 管理
  • Android-推荐一个视频压缩库RxFFmpeg

    最近项目当中有遇到上传视频的时候 xff0c 需要做合理压缩的需求 分享一下我使用的视频压缩库 xff0c 希望能帮助遇到同样有视频处理的需求的小伙伴 RxFFmpeg依赖 这个开源库一共有三个版本 xff0c 这里贴两个版本的依赖 xff
  • C# winForm 软件自动升级实现方式

    对于C winform开发者来说 xff0c 软件自动升级功能是一个很重要的功能 作者根据自身经验 xff0c 和大家分享一下软件升级的实现方式 注意 xff1a 本文主要介绍通过WebService升级软件 作者的另一篇通过FTP方式升级
  • 考勤查询统计SQL脚本。

    本文主要记录下平时工作中考勤统计中的SQL脚本 以便于后续翻阅 同时和大家分享一下 不足的地方还请大牛多多给与点评 nbsp 1 首先是查询某员工的考勤记录 可以根据年份 月份 或者时间段查询结果 同时也可以去掉人员筛选条件 查询多个人的考
  • SQL语句删除具有外键约束(foreign key)的表。因为该对象正由一个 FOREIGN KEY 约束引用。

    关于包含外键的表 xff0c 清理数据的时候 xff0c 如truncateTable xff0c 网上大部分的解决办法是 xff0c 删除外键 删除数据 再新建表 这里介绍一种不需要删除外键 xff0c 只需要修改外键属性就可以删除数据的
  • Unicode&ASCII中双向控制字符 U+202D和U+202C

    ASCII编码对照表 911查询 ASCII编码转换 xff0c ASCII码在线查询工具 ASCII 在线转换器 xff0c ASCII码 xff0c ASCII 转码 在线工具 Unicode 中的 BIDI 双向性算法 掘金 1 场景
  • C++魔方阵

    问题描述 输入一个自然数 xff2e xff08 1 amp le N amp le 9 xff09 xff0c 要求输出如下的魔方阵 xff0c 即边长为2 N 1 xff0c xff2e 在中心出现一次 xff0c 其余位置上的数字从外
  • PCM和WAV音频格式的区别,以及python自动转换

    目录 WAV和PCM的简单介绍PCMWAV 关于音频的基础知识声道数channels采样位数bits采样频率sample rate 进阶内容互相转换代码 WAV和PCM的简单介绍 PCM pcm xff1a pulse code modul