当前位置:   article > 正文

python处理wav音频文件:音频信息,读取内容,获取时长,切割音频,pcm与wav互转_python 读写 wav 时长

python 读写 wav 时长

因为工作中用到了wav格式的音频,所以就搜集了一些关于wav音频的处理。
主要包括:音频信息,读取内容,获取时长,切割音频,pcm与wav互转

获取音频信息:

  1. with wave.open(wav_path, "rb") as f:
  2. f = wave.open(wav_path)
  3. print(f.getparams())

返回内容为:
声道,采样宽度,帧速率,帧数,唯一标识,无损

返回信息

 

音频信息


采样点的个数为 2510762,采样的频率为44100HZ,通过这两个参数可以得到声音信号的时长
每个采样点是16 bit = 2 bytes ,那么将采样点的个数 25107622/(10241024)=4.78889MB,那么这个信息就是文件大小信息。

检验一下声音波形的时间
child1.wav 4.78MB,时长56s
time = 56.93337868480726
根据上面WAVE PCM soundfile format 的资料信息查询。有一个印象:WAV文件中由以下三个部分组成:

1."RIFF" chunk descriptor 2.The "fmt" sub-chunk 3.The "data" sub-chunk 存这些信息的时候都要要有 “ID”、“大小”、“格式”,这些信息标注了数据的位置,
“WAV”格式由“fmt”和“data”,两个部分组成,其中“fmt”的存储块用来存音频文件的格式,“data”的存储块用来存实际听到的声音的信息,物理上描述的振幅和时间:长度(时间)和振幅,当然人的耳朵听听见的是长度和音调。

也就是说可以读取这个数组,在配合频率的信息直接画出波形图。

波形图

  1. file = wave.open(wave_path)
  2. # print('---------声音信息------------')
  3. # for item in enumerate(WAVE.getparams()):
  4. # print(item)
  5. a = file.getparams().nframes # 帧总数
  6. f = file.getparams().framerate # 采样频率
  7. sample_time = 1 / f # 采样点的时间间隔
  8. time = a / f # 声音信号的长度
  9. sample_frequency, audio_sequence = wavfile.read(wave_path)
  10. # print(audio_sequence) # 声音信号每一帧的“大小”
  11. x_seq = np.arange(0, time, sample_time)
  12. plt.plot(x_seq, audio_sequence, 'blue')
  13. plt.xlabel("time (s)")
  14. plt.show()

音频的截取,通过时间片段来获取部分音频
因为音频以毫秒计时,在截取音频时,我统统转为了毫秒

  1. 按毫秒截取
  2. start_time = int(start_time)
  3. end_time = int(end_time)
  4. sound = AudioSegment.from_mp3(main_wav_path)
  5. word = sound[start_time:end_time]
  6. word.export(part_wav_path, format="wav")

调用:

  1. # 音频切片,获取部分音频 时间的单位是毫秒
  2. start_time = 13950
  3. end_time = 15200
  4. get_ms_part_wav(main_wav_path, start_time, end_time, part_wav_path)

如果需要写入秒,我也是将其转为了毫秒单位

  1. start_time = int(start_time) * 1000
  2. end_time = int(end_time) * 1000
  3. sound = AudioSegment.from_mp3(main_wav_path)
  4. word = sound[start_time:end_time]
  5. word.export(part_wav_path, format="wav")

有时会有比较大的音频文件,我是将分钟和秒进行结合,然后在自己拆分

  1. start_time = (int(start_time.split(':')[0])*60+int(start_time.split(':')[1]))*1000
  2. end_time = (int(end_time.split(':')[0])*60+int(end_time.split(':')[1]))*1000
  3. sound = AudioSegment.from_mp3(main_wav_path)
  4. word = sound[start_time:end_time]
  5. word.export(part_wav_path, format="wav")

调用格式

  1. # 音频切片,获取部分音频 时间的单位是分钟和秒 样式:0:12
  2. start_time = "0:35"
  3. end_time = "0:38"
  4. get_minute_part_wav(main_wav_path, start_time, end_time,
  5. minute_part_wav_path)

其他更多详见代码,都加油注释
函数使用都有说明

函数

函数调用

函数调用

 

GitHub代码,公众号:python疯子    后台回复:wav

python疯子

 

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

闽ICP备14008679号