moon (df)
降噪后的moon_cleaned (df)
导入: import scipy.io as spio
将上面两个df数据,存储到“moon_cleaned.mat”文件中,分布命名为{‘moon_cleaned’和’moon_origin’
import scipy.io as spio
spio.savemat('moon_cleaned.mat', mdict={'moon_cleaned': moon_cleaned, 'moon_origin': moon})
读取上面的“moon_cleaned.mat”文件
data = spio.loadmat('./moon_cleaned.mat')
data
data['moon_origin']
使用scipy处理wav文件
from scipy.io import wavfile
# 返回值为元组,分别为:“采样频率: 和 ”数据“
_, deng = wavfile.read('../data/邓紫棋-喜欢你.wav')
wav的音乐文件, 数据类型必须是int16,取值范围: -32768 ~ +32767
查看矩阵形状
deng.shape
#算分钟数
10776444 / 44100 / 60
截取一半的音频只需要 len(deng)//2 (整除)
再读取另一首歌
_, lin = wavfile.read('../data/林俊杰-爱不会绝迹.wav')
lin
将两首歌各自截取一半,再拼接成一首歌
# 拼接
mix_music = np.vstack((deng[:len(deng)// 2], lin[:len(lin)//2]))
# 导出
wavfile.write('mix_music.wav', 44100, mix_music)
使用pydub+ ffmpeg处理mp3文件
导包:
from pydub import AudioSegment
jing = AudioSegment.from_mp3('../data/难念的经.mp3')
type(jing)
返回一个AudioSegment对象
可直接运行播放音频(需要等一阵子)
jing
jing_data = jing.get_array_of_samples()
注意:这里不要直接打印它(因为数据特别长,可能会卡死)
查看一下类型
type(jing_data)
转换成 ndarray
# 转化为ndarray
jing_ndarray = np.array(jing_data.tolist())
查看形状
jing_ndarray.shape
查看类型
jing_ndarray.dtype
wavfile.write('经.wav', 44100, jing_ndarray.reshape(-1, 2).astype(np.int16))
转换后 4M --> 40+M
导入另一首歌 并 查看时长
love = AudioSegment.from_mp3('../data/Love Story.mp3')
love.duration_seconds
返回的是秒
切片的时候切的是音乐的时长, 单位是毫秒.
先算出两首歌的时长毫秒数
jing.duration_seconds * 1000
love.duration_seconds * 1000
# 切片的时候切的是音乐的时长, 单位是毫秒.
jing[: 20000]
剪辑合并各一半的两首歌
mix = jing[: 269609 // 2] + love[: 234527 // 2]
mix
mix.export('./mix.mp3')