当前位置: 首页 > 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.lryc.cn/news/621908.html

相关文章:

  • 来火山引擎「算子广场」,一键处理多模态数据
  • 标题:移动端安全加固:发散创新,筑牢安全防线引言:随着移动互联网
  • OpenCV Python——VSCode编写第一个OpenCV-Python程序 ,图像读取及翻转cv2.flip(上下、左右、上下左右一起翻转)
  • 【数据结构初阶】--排序(三):冒泡排序、快速排序
  • 有红帽认证证书可以0元置换华为openEuler-HCIA/HCIP认证
  • html抽奖功能
  • 【Twincat3】IO的SCAN 不可选中,SCAN中后扫描不到设备
  • langGraph--2--langServe+langGraph示例
  • 高等数学 8.3 平面及其方程
  • 开发Chrome/Edge插件基本流程
  • 使用 Serverless 架构快速构建基于 Iceberg 的事务型实时数据湖
  • redis6的多线程原理
  • 永磁同步电机控制 第一篇、认识电机
  • 图像生成适配器对比与选择:LoRA、ControlNet、T2I-Adapter 与 IP-Adapter
  • UE UDP通信
  • tun/tap 转发性能优化
  • 记录一下 StarRocks 点查的 Profile Metrics
  • C++结构体详解
  • 局部变量与全局变量的关系及应用
  • 【swift开发】SwiftUI概述 SwiftUI 全面解析:苹果生态的声明式 UI 革命
  • Unity_导航网格
  • 什么是国产化防爆平板?有哪些功能特点?应用在什么场景?
  • Unity与OpenGL中的材质系统详解
  • 【完整源码+数据集+部署教程】孔洞检测系统源码和数据集:改进yolo11-RetBlock
  • 汽车线束高压屏蔽层接地设计
  • uniapp小程序ocr-navigator身份证拍照上传替换方案
  • 解决在uniapp真机运行上i18n变量获取不到问题
  • USB ADB 简介
  • 为什么游戏会出现“卡顿”:`clock.tick()` v.s. `clock.get_fps()`
  • 【Cuda 编程思想】LinearQaunt-分块量化矩阵乘法计算过程