因为工作中用到了wav格式的音频,所以就搜集了一些关于wav音频的处理。
主要包括:音频信息,读取内容,获取时长,切割音频,pcm与wav互转
获取音频信息:
with wave.open(wav_path, "rb") as f:
f = wave.open(wav_path)
print(f.getparams())
返回内容为:
声道,采样宽度,帧速率,帧数,唯一标识,无损
采样点的个数为 2510762,采样的频率为44100HZ,通过这两个参数可以得到声音信号的时长
每个采样点是16 bit = 2 bytes ,那么将采样点的个数 2510762
2/(1024
1024)=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”的存储块用来存实际听到的声音的信息,物理上描述的振幅和时间:长度(时间)和振幅,当然人的耳朵听听见的是长度和音调。
也就是说可以读取这个数组,在配合频率的信息直接画出波形图。
file = wave.open(wave_path)
# print('---------声音信息------------')
# for item in enumerate(WAVE.getparams()):
# print(item)
a = file.getparams().nframes # 帧总数
f = file.getparams().framerate # 采样频率
sample_time = 1 / f # 采样点的时间间隔
time = a / f # 声音信号的长度
sample_frequency, audio_sequence = wavfile.read(wave_path)
# print(audio_sequence) # 声音信号每一帧的“大小”
x_seq = np.arange(0, time, sample_time)
plt.plot(x_seq, audio_sequence, 'blue')
plt.xlabel("time (s)")
plt.show()
音频的截取,通过时间片段来获取部分音频
因为音频以毫秒计时,在截取音频时,我统统转为了毫秒
按毫秒截取
start_time = int(start_time)
end_time = int(end_time)
sound = AudioSegment.from_mp3(main_wav_path)
word = sound[start_time:end_time]
word.export(part_wav_path, format="wav")
# 音频切片,获取部分音频 时间的单位是毫秒
start_time = 13950
end_time = 15200
get_ms_part_wav(main_wav_path, start_time, end_time, part_wav_path)
如果需要写入秒,我也是将其转为了毫秒单位
start_time = int(start_time) * 1000
end_time = int(end_time) * 1000
sound = AudioSegment.from_mp3(main_wav_path)
word = sound[start_time:end_time]
word.export(part_wav_path, format="wav")
有时会有比较大的音频文件,我是将分钟和秒进行结合,然后在自己拆分
start_time = (int(start_time.split(':')[0])*60+int(start_time.split(':')[1]))*1000
end_time = (int(end_time.split(':')[0])*60+int(end_time.split(':')[1]))*1000
sound = AudioSegment.from_mp3(main_wav_path)
word = sound[start_time:end_time]
word.export(part_wav_path, format="wav")
# 音频切片,获取部分音频 时间的单位是分钟和秒 样式:0:12
start_time = "0:35"
end_time = "0:38"
get_minute_part_wav(main_wav_path, start_time, end_time,
minute_part_wav_path)
其他更多详见代码,都加油注释
函数使用都有说明
GitHub代码,公众号:python疯子 后台回复:wav
1.背景介绍
随着人工智能(AI)的发展和应用越来越广泛,
音频
领域也经历了长足的发展。近年来,随着互联网的飞速发展、人们生活节奏日益加快、生活成本的不断下降等诸多因素的影响,
音频
在社会生活中越来越受到重视。如今的
音频
数据量呈爆炸式增长,尤其是在移动互联网、社交网络等新时代背景下,各类
音频
数据已经成为生活中的不可或缺的一部分。在这浩大的市场需求下,如何高
#merge_files_in_a_folder # 合并
音频
def merge_files(path_read_folder, path_write_
wav
_file):
files = os.listdir(path_read_folder)
merged_signal = []
for filename in ...
wav
e 模块提供了一个
处理
WAV
声音格式的便利接口。它不支持压缩/解压,但是支持单声道/立体声。
用法:
wav
e.open(file, mode=None),
mode为
rb:生成
wav
_read 对象
wb:生成
wav
_write 对象
注意不支持同时
读写
。
注:关于 r、w、rb、wb
r和w是普通读和写文件(简单理解为人工编写的文件);
rb和wb是
读写
二进制文件(简单理解为可以操作图片等非手工编写的文件)
(1)
Wav
e_read对象
(2)
Wav
e_write 对象
python
视频剪裁,剪切,合并
from moviepy.editor import *
clip1 = VideoFileClip("1.mp4").subclip(0,158) #
读取
视频1.mp4,并截取0-158秒的
内容
clip2 = VideoFileClip("1.mp4").subclip(188.209) # #
读取
视频1.mp4,并截取188-209秒的
内容
final_clip = concatenate_videoclips([clip1,clip2]) #视频合并
声音物理意义:声音是一种纵波,纵波是质点的振动方向与传播方向同轴的波。如敲锣时,锣的振动方向与波的传播方向就是一致的,所以声波是纵波。纵波是波动的一种(波动分为横波和纵波);
通常对声音进行采样量化后,得到声音的"时间—振幅"
信息
;
下图是用Adobe Audition打开一段
音频
数据:
说明:图中上半部分为波形图,下半部分为频谱图;
频谱通过对波形的傅里叶变换,把波形中的每个频率拆开
python
打开
音频文件
(IO)语音音量大小与响度的相关计算语音
处理
最基础的部分就是如何对
音频文件
进行
处理
。声音的物理意义:声音是一种纵波,纵波是质点的振动方向与传播方向同轴的波。如敲锣时,锣的振动方向与波的传播方向就是一致的,所以声波是纵波。纵波是波动的一种(波动分为横波和纵波)通常情况下对声音进行采样量化之后得到了声音的“时间—振幅”
信息
。
Python
打开
wav
文件的操作
wav
文件利用pyt...
本章的主题为如何用
Python
处理
音频文件
,也就是说如果你有一个声音文件,你希望对其进行一些修改,那么
Python
也有相应的模块可以来做这件事。10.1 要解决什么问题如果我们有一段录音,但在录制过程中夹杂了一些噪音。现在我们希望将这些噪音过滤掉,那么我们能否用
Python
来解决呢?当然可以。除此之外,我们还可以进行一些简单的信号
处理
,比如傅里叶变换之类的操作。10.2 实现思路本章的题目旨在抛砖...