Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 40|回复: 5

python音频处理

[复制链接]

386

主题

1205

帖子

3817

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3817
发表于 2025-1-16 16:53:37 | 显示全部楼层 |阅读模式
回复

使用道具 举报

386

主题

1205

帖子

3817

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3817
 楼主| 发表于 2025-1-16 16:54:21 | 显示全部楼层
python如下代码观察wav的16进制文件
  1. import binascii
  2. file_path = 'a.wav'  # 指定文件路径
  3. with open(file_path, 'rb') as file:  # 以二进制模式打开文件
  4.     data = file.read()  # 读取整个文件内容
  5.     hex_data = binascii.hexlify(data).decode('utf-8')  # 将数据转换为16进制字符串
  6.     print(hex_data)  # 打印16进制内容
  7.     pass  # 此处留空,后续步骤将在文件上下文中进行
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

386

主题

1205

帖子

3817

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3817
 楼主| 发表于 2025-1-16 16:55:03 | 显示全部楼层
结果显示
52494646d606000057415645666d74201000000001000100112b0000112b00000100080064617461b20600008080808080808080808080808080808080808080808080808080808080807e80808080808080808080807e7e807e808080807e807e80808080807e7e7e7e7e7e7e7e807e80808080807e7e808080808080808080808080808080808080807e80808080808080808080807e7e80807e7e7e80808080808080808080808080808080808080808080808080808080808080808080808080808080807e7e7e808080808080808282807e7c7c7c7e7e7e7e8082868886827e7a767476787a7c7e82888c8e908c827a76726e6c72767c84889094948e88807c7674727070747a7e808890908a84807c787674767c7e7e828686848282868886807a787676767a7c7e8284868c928e8a8278726c686e747a828a92929088807a76727270707272787e889092989c908e7c6a5b51555f7c9cb5bbaba58e624943435984a3b1b7ab886e5b4943597e96abbbb1927a6c6e685d5f7280929ea7a39898947c5d535553536a888696947a7c909a8886848284785f5f6c7e98a9af98765f5d64728a92868c8a6e55627c8296abb18e6e66645f5d84abb3a1a582645d353d727298bbab8c6e6a5d6a7a8c9ca1887e946c4d6c8c9a9c90826472949e988a785b5b5f667ca5a59c82595166574b5f92bba79aa18878685b7aa1bd9e8e96785b43496a889494a5a7987a7878846453517ab1c57c5f66493957afd3b9884d3b516e9ac1d5e6bf764b3b4f5578867e94bda7786a5d5d59537eadc9b5a7946c4d3f70afb5a56c4d3b434770b5e6d9b58c5b29124b68a5b9d5df7c250c253b78bbd9e4bd744b51535d9edfe6c9966247727c8a6c536e767a8eafa17e6e66535b6e889ec3ab783b1a417aa1afbf8e3d2b415992c9ddbb7c3d2f183172c7fcf2b95f12000a3f7ca5d5e6bd8457352f437aadd3d5c3a36629142f708ea1bfb59e76624d5172889ea9a198988e8a7c4f3d4f96b396746a64686a9cafabb7b5966c473f475f8cb9c3d1c98a4b14083384d3f2d79c6451434d708ca7b3b7b7ab8670573b31539ad1d9c5b790410e0e4d9ab7d5ead17a2f233f6278a5c7cd9653414d5b687692a5b3aba19c886859707e7e7a889e8a72768080745b5d708c98abb79e74574f55748c9a9894827878645d76887e7676789ea78a807a645f788e8c7a685f6e86969e9888827253516c909aa19c8e74626470867e5f6c8488889c9a72515f6c5d5b8ab5b38e74665d575d7eabb7a782685766707ca19a90846657686e68808a8888a1a3988062555b687a8ca3a196886c5343578eafaba39e806259626e7894a5947064686a768ca9ad9e866a4d394f748494abbbb59a805d47515b6470707e9cadafa99a826868686470787e86969c9a948c78685d596e8290989c8e8c8680746e728a9a8e705d646c7696afaba7866a514d627c8c909a9896928a76646a70808a888a847a787a7a828a8892968a746c6a727c889a9e987c5f5b727e82909c9898927e6a625f6a7c8c98a3947a7c7870707e7e80929e94948c765d57687c8a8e928e7c7a788282848e867c787c80847a8088847a6e64687078888c9aada78e725d59666e748a989684807a6a6c7c807a828c8a847c7c7e848886827670706e727a868c8e949284706872787a7c84868080807e82868686847c7874726a6a74767e8a8e8e948e7e767a7c7a7c80807c787272767e8884868c8a8078727072747a848c8c868280807c7c7c767a82807876787c808688888688847874787e7e7e7e7e7e7e8084848280807a7878787880868a8a84807c7a787a7e7e828a8a7e72727a807e8084827c787a7e7e80868684807c7674787c8084848282807a787a7c7e7e7e80848684807c80807c7a787c7c7c7e808080808280808280807e7a7a7c7a7a7e82868684807e7e7e7c7e80807e7c7c7e80808288867e7c7c7a7a7c808282807e7c7c7a7e7e7e84888a8a847e7a787a7a7c7e80808282828282828282807e7e7e7c7e7e80848482807e7c7e80828280828482807c7c7e7e8082828282807e808284827e7e7e808080808080808282828280807e7e7e7e80808482828282827e7e80827e80807c7c7c808282828080807e8080807e8080808080807e7e807e7e7e7e80807e8080808080808080807e7e7e7e7c7c7e80828282807e7c7c7e7c7c7e80828282807e7e7e7c7c7c7e7e7e808080808080807e7c7c7c7c7e8080807e8080807e7e80807e7e7c7c7c7c7e7e7e7e7e80807e7e7e7e7e7e7c7e7e7e8080808282807e7c7a7a7e80808082807e7e7e7e7e807e7c7c7c7c7e808280807e7c7c7e7e80808280807e7e7e7c7c7c7e7e7e7e80808282807e7c7c7c7e7c7e808282807c7e7e7e807e7c7a7c7e7e7e7e80808080807e7e7e7c7c7c7e7e80808080807e7e7e7e7e7e808284807c7c7e7e7e7e7e807e8080807e7e80
回复

使用道具 举报

386

主题

1205

帖子

3817

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3817
 楼主| 发表于 2025-1-17 11:09:38 | 显示全部楼层
  1. import binascii
  2. import math

  3. #让16进制后面加上对应的ascii码
  4. def hex_to_ascii_with_dots(hex_string):
  5.     # 确保十六进制字符串的长度是偶数,如果不是,则需要在前面补零
  6.     if len(hex_string) % 2 != 0:
  7.         hex_string = '0' + hex_string
  8.    
  9.     ascii_string = []
  10.     for i in range(0, len(hex_string), 2):
  11.         # 获取两个十六进制字符并转换为整数
  12.         hex_byte = hex_string[i:i+2]
  13.         byte_value = int(hex_byte, 16)
  14.         
  15.         # 如果字节值小于或等于 127,则转换为 ASCII 字符,否则显示为 '.'
  16.         if byte_value <= 127 and byte_value>18:
  17.             ascii_char = chr(byte_value)
  18.         else:
  19.             ascii_char = '.'
  20.         
  21.         ascii_string.append(ascii_char)
  22.    
  23.     # 将列表转换为字符串并返回
  24.     return ''.join(ascii_string)

  25. #将16进制文件保存为wav
  26. def hex_string_to_wav(hex_string, output_file):
  27.     # 去掉可能存在的空格或换行符,并检查字符串长度是否为偶数
  28.     hex_string = hex_string.replace(" ", "").replace("\n", "").replace("\r", "")
  29.     if len(hex_string) % 2 != 0:
  30.         raise ValueError("Hex string length must be even")
  31.    
  32.     # 将16进制字符串转换为字节数组
  33.     byte_array = bytearray.fromhex(hex_string)
  34.    
  35.     # 将字节数组写入文件
  36.     with open(output_file, 'wb') as file:
  37.         file.write(byte_array)

  38. #让16进制文件两个成对显示,符合8位习惯
  39. def printHexdata(hex_data,numPerLine = 32):
  40.     for i in range(round(len(hex_data)/numPerLine)):
  41.         for j in range(round(numPerLine/2)):
  42.             print(hex_data[numPerLine*i:numPerLine*(i+1)][j*2:j*2+2],end  = ' ')
  43.         print(hex_to_ascii_with_dots(hex_data[numPerLine*i:numPerLine*(i+1)]))

  44. #生成正弦信号,也就是电子音
  45. def change_hexdata(hex_data):
  46.     new_hexdata = hex_data[0:88]
  47.     for i in range(44,round(len(hex_data)/2)):
  48.         new_hexdata=new_hexdata + hex(round(120+50*math.sin(16*i/180*math.pi)))[2:]
  49.     return new_hexdata

  50. file_path = 'a.wav'  # 指定文件路径
  51. with open(file_path, 'rb') as file:  # 以二进制模式打开文件
  52.     data = file.read()  # 读取整个文件内容
  53.     hex_data = binascii.hexlify(data).decode('utf-8')  # 将数据转换为16进制字符串
  54.     #print(type(hex_data))
  55.    
  56.     #print(hex_data)  # 打印16进制内容
  57.     printHexdata(hex_data[0:320])
  58.     print('修改后')
  59.     print(len(hex_data))
  60.     hex_data = change_hexdata(hex_data)
  61.     print(len(hex_data))
  62.     printHexdata(hex_data[0:320])

  63.     hex_string_to_wav(hex_data, 'output.wav')
  64.     pass  # 此处留空,后续步骤将在文件上下文中进行

复制代码
回复

使用道具 举报

386

主题

1205

帖子

3817

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3817
 楼主| 发表于 2025-1-19 23:56:53 | 显示全部楼层
回复

使用道具 举报

386

主题

1205

帖子

3817

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3817
 楼主| 发表于 5 天前 | 显示全部楼层
import numpy as np

# 创建一个示例信号
x = np.linspace(0, 2 * np.pi, 100)#注意,根据采样定理,采样频率应该是信号最低信号的2倍以上,才不会出错
y = np.sin(x) + 0.5 * np.sin(2 * x)  # 合成信号

# 执行快速傅里叶变换
y_fft = np.fft.fft(y)

# 计算频率轴
n = y.size
freq = np.fft.fftfreq(n,d = 1)#q其中,d表示时间间隔,显然实际的时间间隔是

# 绘制结果
import matplotlib.pyplot as plt
plt.plot(freq, np.abs(y_fft))
plt.title('FFT of the signal')
plt.xlabel('Frequency')
plt.ylabel('Amplitude')
plt.show()
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-1-28 03:31 , Processed in 0.042195 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表