Scipy文件输入/输出mat,wav,mp3

Scipy文件输入/输出mat,wav,mp3

moon (df)
在这里插入图片描述
降噪后的moon_cleaned (df)
在这里插入图片描述

导入: import scipy.io as spio

读写.mat 文件

写入 .savemat()

将上面两个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})

读取 .loadmat()

读取上面的“moon_cleaned.mat”文件

data = spio.loadmat('./moon_cleaned.mat')
data

在这里插入图片描述
可分别取df,这里取‘moon_origin’为例:

data['moon_origin']	

在这里插入图片描述

wav

使用scipy处理wav文件

  • WAV为微软公司(Microsoft)开发的一种声音文件格式,音质好
  • 单声道是一维矩阵,立体声(双声道)是二维
  • 标准的采样频率为:11.025kHz(语音效果)、22.05kHz(音乐效果)、44.1kHz(高保真效果)
  • 导包:from scipy.io import wavfile

读 wavfile.read()

	from scipy.io import wavfile
	
	# 返回值为元组,分别为:“采样频率: 和 ”数据“
	_, deng = wavfile.read('../data/邓紫棋-喜欢你.wav')

wav的音乐文件, 数据类型必须是int16,取值范围: -32768 ~ +32767
在这里插入图片描述
查看矩阵形状

deng.shape

在这里插入图片描述
10776444 / 44100 剩下的是秒数

#算分钟数
10776444 / 44100 / 60

在这里插入图片描述
4.072分钟 相当于 4分42秒

截取一半的音频只需要 len(deng)//2 (整除)

再读取另一首歌

_, lin = wavfile.read('../data/林俊杰-爱不会绝迹.wav')
lin

拼接 np.vstack()

将两首歌各自截取一半,再拼接成一首歌

# 拼接
mix_music = np.vstack((deng[:len(deng)// 2], lin[:len(lin)//2]))

写 wavfile.write()

# 导出
wavfile.write('mix_music.wav', 44100, mix_music)

MP3

使用pydub+ ffmpeg处理mp3文件

  • 需要安装pydub
  • ffmpeg需要下载,并解压将3个文件放至Python安装目录中的bin目录下,然后还要配置环境变量
  • pydup中的AudioSegment可以处理mp3文件

导包:

from pydub import AudioSegment

读: AudioSegment.from_mp3()

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

在这里插入图片描述

转化为wav: wavfile.write()

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

在这里插入图片描述

导出 export()

mix.export('./mix.mp3')

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

irrationality

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值