当前位置:   article > 正文

python读取wav音频文件的音调高低_wave怎么读取音量

wave怎么读取音量
  1. '''
  2. #显示声音文件的波形 双声道
  3. import wave
  4. # 导入 wave 模块
  5. import matplotlib.pyplot as plt
  6. # 用于绘制波形图
  7. import numpy as np
  8. # 用于计算波形数据
  9. import os
  10. # 用于系统处理,如读取本地音频文件
  11. f = wave.open(r"tkzc.wav",'rb' )
  12. params = f.getparams ()
  13. nchannels,sampwidth, framerate, nframes = params [:4]#从0~ 4之前的数
  14. print(nchannels,sampwidth,framerate,nframes)
  15. # 读取波形数据
  16. strData = f.readframes(nframes)
  17. # 将波形数据转换为数组
  18. waveData = np.fromstring(strData,dtype=np.int16)
  19. waveData = waveData*1.0/(max(abs(waveData)))
  20. time = np.arange(0,nframes)*(1.0 / framerate)#计算音频的时间
  21. waveData = np.reshape(waveData,[nframes,nchannels])
  22. f.close()
  23. # 绘制波形
  24. plt.figure()
  25. plt.subplot(5,1,1)
  26. plt.plot(time,waveData[:,0])
  27. plt.xlabel("Time(s)")
  28. plt.ylabel("Amplitude")
  29. plt.title("Ch-1 wavedata")
  30. plt.subplot(5,1,3)
  31. plt.plot(time,waveData[:,1])
  32. plt.xlabel("Time(s)")
  33. plt.ylabel("Amplitude")
  34. plt.title("Ch-2 wavedata")
  35. plt.show()
  36. '''
  37. import wave
  38. # 导入 wave 模块
  39. import matplotlib.pyplot as plt
  40. # 用于绘制波形图
  41. import numpy as np
  42. # 用于计算波形数据
  43. import os
  44. # 用于系统处理,如读取本地音频文件
  45. import pyaudio
  46. f = wave.open(r"tkzc.wav",'rb' )
  47. params = f.getparams ()
  48. nchannels,sampwidth, framerate, nframes = params [:4]#从0~ 4之前的数
  49. print(nchannels,sampwidth,framerate,nframes) # 2 2 44100 6767924 声道数, 量化位数(byte单位), 采样频率, 采样点数
  50. p = pyaudio.PyAudio()
  51. stream = p.open(format=p.get_format_from_width(f.getsampwidth()),
  52. channels=f.getnchannels(),
  53. rate=f.getframerate(),
  54. output=True)
  55. j = 0 #播放的秒数
  56. #f.rewind() #指针回到开头
  57. # 读取波形数据
  58. strData = f.readframes(framerate)
  59. #print(strData)
  60. while strData != b'':
  61. sum = 0
  62. # 将波形数据转换为数组
  63. waveData = np.fromstring(strData,dtype=np.int16)
  64. #print(len(waveData)) # 长度 88200
  65. for i in waveData:
  66. sum = sum + abs(waveData[i])
  67. print(sum/len(waveData))
  68. print(j)
  69. # waveData 数据 这是一秒钟的数据 采样频率 44100 两个声道 长度 88200 44100 * 2 两个声道的数据
  70. # [ -14 -11 -15 ... -1956 6 -1780] # 长度 88200 44100 * 2 两个声道的数据
  71. # 可以将这个列表的所有数据相加 负的先转化为正的 然后除以 88200 获得的数据越大 说明此处的音量越大
  72. stream.write(strData) # 播放
  73. strData = f.readframes(framerate) #读取下一帧
  74. j=j+1 # 时间加1秒
  75. stream.stop_stream()
  76. stream.close()
  77. p.terminate()
  78. f.close()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/967032
推荐阅读
相关标签
  

闽ICP备14008679号