首页 > 其他 > 详细

音乐文件的处理-pydub

时间:2020-11-25 09:49:03      阅读:19      评论:0      收藏:0      [点我收藏+]
import numpy as np
import array
from pydub import AudioSegment

# 读取音频文件
path = r‘E:\ML\project\music\data\Delacey-Dream-It-Possible.mp3‘

song = AudioSegment.from_file(file=path)

# 写音频文件
song.export(out_f=r‘E:\ML\project\music\data\test.wav‘, format=‘wav‘)

# 获取相关属性
# 长度
size = len(song)
print("音频文件的长度信息(毫秒):{}".format(size))
channel = song.channels
# 通道数据,音频文件有单通道和双通道
print("音频文件的通道数据:{}".format(channel))
# 音频文件的抽样频率
frame_rate = song.frame_rate
print("音频文件的抽样频率:{}".format(frame_rate))

# 设置相关属性
# 如果降低音乐的通道、抽样频率等特征的值会带来音频的损失
# 但是增加不会带来损失
song = song.set_channels(channels=2)
song = song.set_frame_rate(frame_rate=44100)
song = song.set_sample_width(sample_width=2)
print("=" * 50)
print("音频文件的长度信息(毫秒):{}".format(len(song)))
print("音频文件的通道数目:{}".format(song.channels))
print("音频文件的样本宽度:{}".format(song.sample_width))
print("音频文件的抽样频率:{}".format(song.frame_rate))
song.export(out_f=r‘E:\ML\project\music\data\test01.wav‘, format=‘wav‘)

# 音频文件的截断处理
# 后去前两分钟的数据保存
song[:120000].export(out_f=r‘E:\ML\project\music\data\test02.wav‘, format=‘wav‘)
# 获取前10s数据保存
song[:10000].export(out_f=r‘E:\ML\project\music\data\test03.wav‘, format=‘wav‘)
# 获取中间十秒
mid = len(song) // 2
song[mid - 5000:mid + 5000].export(out_f=r‘E:\ML\project\music\data\test04.wav‘,
                                   format=‘wav‘)

# 填充保存
# 将song兑现装换为numpy的array对象
# 数组的大小 = 音频数据长度(秒为单位)* 通道数 * 抽样频率
samples = np.array(song.get_array_of_samples()).reshape(-1)
print("形状:{}".format(samples.shape))
print("前10个数字:{}".format(samples[:10]))
print("中间10个数字:{}".format(samples[20000:20010]))

# 填充操作(填充一分钟)
append_size = 60 * song.channels * song.frame_rate
"""
数组填充api为numpy中的pad
pad_with: 给定在什么位置填充,以及填充多少个数据,eg:当前参数在samples这个数组
前面填充append_size个值
mode: 填充方式,一般使用constant, 表示常量填充
constant_value: 填充常数的时候,常数值是什么
"""
samples = np.pad(samples, pad_width=(append_size, 0), mode=‘constant‘, constant_values=(0, 0))
print(samples.shape)

# 将填充后的数值转换成AudioSegment对象
song = song._spawn(array.array(song.array_type, samples))
song.export(out_f=r‘E:\ML\project\music\data\test05.wav‘, format=‘wav‘)

# 音频的增加,减小操作
(song + 10).export(out_f=r‘E:\ML\project\music\data\test06.wav‘, format=‘wav‘)
(song - 10).export(out_f=r‘E:\ML\project\music\data\test07.wav‘, format=‘wav‘)
# 循环
(song * 2).export(out_f=r‘E:\ML\project\music\data\test08.wav‘, format=‘wav‘)

音乐文件的处理-pydub

原文:https://www.cnblogs.com/01black-white/p/14033645.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!