【数据分析day05】Scipy读/写.mat文件,wav,mp3

您所在的位置:网站首页 scipy读取mat文件 【数据分析day05】Scipy读/写.mat文件,wav,mp3

【数据分析day05】Scipy读/写.mat文件,wav,mp3

2023-03-13 18:44| 来源: 网络整理| 查看: 265

Scipy文件输入/输出,wav,mp3 读写.mat 文件 写入 .savemat() 读取 .loadmat() wav 读 wavfile.read() 拼接 np.vstack() 写 wavfile.write() MP3 读: AudioSegment.from_mp3() 转化为wav: wavfile.write() 裁剪(就是按毫秒切片) 导出 export()

读取png文件命名为“moon”(df),降噪后处理成“moon_cleaned”(df),并将两个df数据存储到.mat文件中 mat :标准二进制文件 常规图片读取用"plt.imread" mat文件读取用 scipy.io 库的 .loadmat() 和.savemat()

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')

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3