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

16进制pcm数据转py波形脚本

将16bit的单声道或者双声道的16进制的pcm数据转成波形图片出来分析数据,

python脚本如下:

import numpy as np
import matplotlib.pyplot as plt# 1: 单声道,2:双声道
PCM_CHANNELS = 2# 你提供的十六进制数据
hex_str = """
00 00 00 00 a3 fe a3 fe 45 fd 45 fd 00 00 00 00
94 0b 94 0b 41 1b 41 1b db 24 db 24 fe 22 fe 22
0e 1b 0e 1b 14 13 14 13 0d 0d 0d 0d fb 06 fb 06
e9 00 e9 00 d6 fa d6 fa c3 f4 c3 f4 ba ee ba ee
bb e8 bb e8 c6 e2 c6 e2 e5 dc e5 dc 18 d7 18 d7
60 d1 60 d1 c6 cb c6 cb 4a c6 4a c6 ec c0 ec c0
b6 bb b6 bb a7 b6 a7 b6 c0 b1 c0 b1 08 ad 08 ad
80 a8 80 a8 29 a4 29 a4 08 a0 08 a0 1f 9c 1f 9c
6e 98 6e 98 fa 94 fa 94 c5 91 c5 91 cd 8e cd 8e
18 8c 18 8c a6 89 a6 89 77 87 77 87 8f 85 8f 85
ee 83 ee 83 93 82 93 82 81 81 81 81 b8 80 b8 80
39 80 39 80 03 80 03 80 17 80 17 80 76 80 76 80
1d 81 1d 81 0e 82 0e 82 49 83 49 83 ca 84 ca 84
93 86 93 86 a2 88 a2 88 f5 8a f5 8a 8c 8d 8c 8d
67 90 67 90 80 93 80 93 d8 96 d8 96 6f 9a 6f 9a
3e 9e 3e 9e
46 a2 46 a2 86 a6 86 a6 f7 aa f7 aa 99 af 99 af
6d b4 6d b4 69 b9 69 b9 8e be 8e be dc c3 dc c3
4a c9 4a c9 d7 ce d7 ce 84 d4 84 d4 46 da 46 da
1e e0 1e e0 0c e6 0c e6 06 ec 06 ec 0b f2 0b f2
1b f8 1b f8 2d fe 2d fe 40 04 40 04 54 0a 54 0a
5e 10 5e 10 5f 16 5f 16 56 1c 56 1c 3a 22 3a 22
0a 28 0a 28 c6 2d c6 2d 65 33 65 33 e6 38 e6 38
49 3e 49 3e 85 43 85 43 9a 48 9a 48 88 4d 88 4d
46 52 46 52 d5 56 d5 56 34 5b 34 5b 5d 5f 5d 5f
4e 63 4e 63 08 67 08 67 85 6a 85 6a c4 6d c4 6d
c5 70 c5 70 84 73 84 73 00 76 00 76 3a 78 3a 78
2d 7a 2d 7a d9 7b d9 7b 3e 7d 3e 7d 5b 7e 5b 7e
2e 7f 2e 7f b9 7f b9 7f fa 7f fa 7f f1 7f f1 7f
9d 7f 9d 7f 01 7f 01 7f 1b 7e 1b 7e ec 7c ec 7c
75 7b 75 7b b7 79 b7 79 b1 77 b1 77 68 75 68 75
db 72 db 72 0a 70 0a 70 fb 6c fb 6c ac 69 ac 69
1e 66 1e 66 58 62 58 62 59 5e 59 5e 21 5a 21 5a
b7 55 b7 55 1c 51 1c 51 4f 4c 4f 4c 59 47 59 47
3a 42 3a 42 f1 3c f1 3c 89 37 89 37 00 32 00 32
58 2c 58 2c 99 26 99 26 c4 20 c4 20 d8 1a d8 1a
e1 14 e1 14 dd 0e dd 0e cd 08 cd 08 bc 02 bc 02
a9 fc a9 fc 95 f6 95 f6 89 f0 89 f0 87 ea 87 ea
8d e4 8d e4 a7 de a7 de d4 d8 d4 d8 14 d3 14 d3
71 cd 71 cd ec c7 ec c7 84 c2 84 c2 42 bd 42 bd
27 b8 27 b8 33 b3 33 b3 6d ae 6d ae d7 a9 d7 a9
70 a5 70 a5 3f a1 3f a1 46 9d 46 9d 83 99 83 99
fd 95 fd 95 b5 92 b5 92 aa 8f aa 8f e1 8c e1 8c
5b 8a 5b 8a 17 88 17 88 1a 86 1a 86 63 84 63 84
f3 82 f3 82 cb 81 cb 81 ed 80 ed 80 57 80 57 80
0b 80 0b 80 09 80 09 80 52 80 52 80 e3 80 e3 80
be 81 be 81 e2 82 e2 82 4e 84 4e 84 02 86 02 86
fd 87 fd 87 3c 8a 3c 8a bf 8c bf 8c 86 8f 86 8f
8c 92 8c 92 d1 95 d1 95 56 99 56 99 13 9d 13 9d
0a a1 0a a1 3a a5 3a a5 9c a9 9c a9 30 ae 30 ae 
f6 b2 f6 b2 e6 b7 e6 b7 ff bc ff bc 42 c2 42 c2
a5 c7 a5 c7 29 cd 29 cd ce d2 ce d2 89 d8 89 d8
5b de 5b de 44 e4 44 e4 39 ea 39 ea 3b f0 3b f0
49 f6 49 f6 5a fc 5a fc 6d 02 6d 02 82 08 82 08
8f 0e 8f 0e 93 14 93 14 8e 1a 8e 1a 77 20 77 20
4d 26 4d 26 11 2c 11 2c b8 31 b8 31 42 37 42 37
af 3c af 3c f6 41 f6 41 17 47 17 47 12 4c 12 4c
de 50 de 50 7b 55 7b 55 ea 59 ea 59 23 5e 23 5e
25 62 25 62 f0 65 f0 65 7f 69 7f 69 d1 6c d1 6c
e5 6f e5 6f b8 72 b8 72 48 75 48 75 96 77 96 77
9e 79 9e 79 5f 7b 5f 7b da 7c da 7c 0d 7e 0d 7e
"""# 转成字节数组
data_bytes = bytes.fromhex(hex_str)# 按16位小端解析
pcm_data = np.frombuffer(data_bytes, dtype=np.int16)if PCM_CHANNELS == 2:# 双声道:偶数索引是左声道,奇数索引是右声道left = pcm_data[0::2]right = pcm_data[1::2]
elif PCM_CHANNELS == 1:# 单声道:左右声道数据相同left = pcm_dataright = pcm_data
else:raise ValueError(f"不支持的声道数: {PCM_CHANNELS}")# 绘制波形
plt.figure(figsize=(12, 6))plt.subplot(2, 1, 1)
plt.plot(left, label="Left Channel")
plt.legend()plt.subplot(2, 1, 2)
plt.plot(right, label="Right Channel", color='orange')
plt.legend()plt.suptitle("PCM Waveform (16-bit)")
plt.xlabel("Sample index")
plt.show()

http://www.dtcms.com/a/332727.html

相关文章:

  • Vim 常用快捷键及插件
  • 关于simplifyweibo_4_moods数据集的分类问题
  • 大白话解析“入口点合约”
  • Linux系统--库制作与原理
  • Java—注解
  • mysql-条件查询案例
  • zabbix部署问题后常见问题
  • Codeforces 无路可走
  • 分布式系统设计的容错机制
  • AI优质信息源汇总:含X账号,Newsletter,播客,App
  • 如何在 FastAPI 中玩转 APScheduler,让任务定时自动执行?
  • 上下文块嵌入(contextualized-chunk-embeddings)
  • collections:容器数据类型
  • C语言——深入理解指针(四)
  • 完整技术栈分享:基于Hadoop+Spark的在线教育投融资大数据可视化分析系统
  • 使用XXL-SSO实现登录认证以及权限管控
  • 解决 MySQL 查询速度缓慢的问题
  • Filebeat 轻量级日志采集实践:安装、配置、多行合并、JSON 解析与字段处理
  • Java集合Map与Stream流:Map实现类特点、遍历方式、Stream流操作及Collections工具类方法
  • 【软件设计模式】前置知识类图、七大原则(精简笔记版)
  • C++ 调试报错 常量中有换行符
  • 基于桥梁三维模型的无人机检测路径规划系统设计与实现
  • Cursor 分析 bug 记录
  • 3D视觉与空间智能
  • imx6ull-驱动开发篇25——Linux 中断上半部/下半部
  • 智谱开源了最新多模态模型,GLM-4.5V
  • 关系型数据库从入门到精通:MySQL 核心知识全解析
  • 高并发系统性能优化实战:实现5万并发与毫秒级响应
  • Kafka生产者——提高生产者吞吐量
  • LeetCode 面试经典 150_数组/字符串_最长公共前缀(20_14_C++_简单)(暴力破解)(求交集)