文章目录

  • 一、soundfile
  • 二、librosa
  • 三、pydub
  • 四、madmom
  • 五、spleeter

   学习必须要经常总结,通过总结梳理才能记得牢,也方便以后用到的时候回头查阅,这也是我写CSDN的主要目的。刚参加了音乐节拍检测的比赛,由于是初次接触计算音乐学这个领域,我学习了一些常用的工具,怕以后不用忘了,赶紧趁热总结一下。

一、soundfile

soundfile常用于音频文件读写:

import soundfile as sfdata, samplerate = sf.read('existing_file.wav')
sf.write('new_file.flac', data, samplerate)
#sf.write('new_file.wav', data, samplerate)

flac是一种无损压缩音乐格式

二、librosa

  librosa是常用的音频处理库,注意librosa安装时要先装ffmpeg。在docker ubuntu中安装:

apt-get update && apt-get install -y ffmpeg
pip install librosa

我这次主要用librosa来进行加载音频和重采样:

wav,sr = librosa.load(file,sr=44100)
drums = librosa.resample(drums, orig_sr=44100, target_sr=22050, fix=True, scale=False)

此外,librosa还常用来提取音频特征,例如梅尔频谱和梅尔倒谱:
librosa.feature.melspectrogram()
librosa.feature.mfcc()

三、pydub

  pydub是一个非常强大的音频处理和编辑工具。我这次主要用来增加减少音强,和合成多个音轨:

#合成音轨
bass = AudioSegment.from_file('bass.wav').set_frame_rate(22050).set_channels(1)
other = AudioSegment.from_file('other.wav').set_frame_rate(22050).set_channels(1)
vocals = AudioSegment.from_file('vocals.wav').set_frame_rate(22050).set_channels(1)
NoDrum_audio = bass.overlay(other).overlay(vocals)
nodrum_wav = np.frombuffer(NoDrum_audio.raw_data,np.short)/32768
#增加5个分贝
NoDrum_audio_5 = NoDrum_audio + 5

  使用时必须要先加载成AudioSegment类的数据,然后再用overlay,合成后可以用上面np.frombuffer的方式再转换为和librosa加载后相同的numpy数组。

四、madmom

  madmom是一个强大的音乐分析工具,专用来分析音乐。我这次主要用它来提取特征和使用它的HMM包来提取beat和downbeat(即音乐节拍和强拍)并计算多种评价指标得分。

#提取特征,这里用madmom的多线程器提取频谱特征以及频谱的一阶差分,
#分成三组参数[1024, 2048, 4096],[3, 6, 12]提取后再合并。
from madmom.audio.signal import SignalProcessor, FramedSignalProcessor
from madmom.audio.stft import ShortTimeFourierTransformProcessor
from madmom.audio.spectrogram import (FilteredSpectrogramProcessor, LogarithmicSpectrogramProcessor,SpectrogramDifferenceProcessor)
from madmom.processors import ParallelProcessor, Processor, SequentialProcessor
def madmom_feature(wav):sig = SignalProcessor(num_channels=1, sample_rate=44100 )multi = ParallelProcessor([])frame_sizes = [1024, 2048, 4096]num_bands = [3, 6, 12]for frame_size, num_bands in zip(frame_sizes, num_bands):frames = FramedSignalProcessor(frame_size=frame_size, fps=100)stft = ShortTimeFourierTransformProcessor()  # caching FFT windowfilt = FilteredSpectrogramProcessor(num_bands=num_bands, fmin=30, fmax=17000, norm_filters=True)spec = LogarithmicSpectrogramProcessor(mul=1, add=1)diff = SpectrogramDifferenceProcessor(diff_ratio=0.5, positive_diffs=True, stack_diffs=np.hstack)# process each frame size with spec and diff sequentiallymulti.append(SequentialProcessor((frames, stft, filt, spec, diff)))# stack the features and processes everything sequentiallypre_processor = SequentialProcessor((sig, multi, np.hstack))feature = pre_processor.process( wav)return feature

下面用madmom自带的HMM模块处理beat和downbeat联合检测算法生成的激活值

from madmom.features.downbeats import DBNDownBeatTrackingProcessor as DownBproc
hmm_proc = DownBproc(beats_per_bar = [3,4], num_tempi = 80, transition_lambda = 180, observation_lambda = 21, threshold = 0.5, fps = 100)
#act是用神经网络等音频节拍检测算法处理得到的激活值
beat_fuser_est = hmm_proc(act)
beat_pred = beat_fuser_est[:,0]
downbeat_pred = beat_pred[beat_fuser_est[:,1]==1]

下面对节拍检测结果和节拍标注值计算多种评估指标:

from madmom.evaluation.beats import BeatEvaluation
scr = BeatEvaluation(beat_pred,beat_true)
print(scr.fmeasure,scr.pscore,scr.cemgil,scr.cmlc,scr.cmlt,scr.amlc,scr.amlt)

五、spleeter

  spleeter是一款效果非常不错的音乐音轨分离工具。可以分成两音轨,四音轨或五音轨,它本身是用tensorflow写的,必须要先下载预训练权重,第一次使用会自动下载。我安装时发现它和madmom版本冲突,多次尝试后发现用一个较早的版本1.4.9版才可以。安装时用pip install spleeter==1.4.9即可。
  网上给出的用法都是在命令行中调用,我琢磨了一个在python代码中调用的方法:

import librosa
from spleeter.separator import Separator
separator = Separator('spleeter:4stems')
wav,sr = librosa.load(file,sr=44100)
wav = wav.reshape(-1,1)
prediction = separator.separate(wav)
drums = prediction['drums'][:,0]
bass = prediction['bass'][:,0]
other = prediction['other'][:,0]
vocals = prediction['vocals'][:,0]

注意,由于spleeter的预训练权重是在44100采样频率下训练的,所以使用时也必须44100Hz加载音乐。

声学、音乐计算常用工具总结(soundfile、librosa、pydub、madmom、spleeter)相关推荐

  1. 计算各种形钢的重量用什么软件_造价常用工具不会用,30个常用工程算量工具免费送,速来领取收藏...

    因为建筑行业对造价人员的数量不断提升,很多的建筑行业人才都纷纷转行去做造价工程师,但是很多刚刚转行做造价,或者是想要考取造价工程师的建筑人才发现,有很多的常用算量工具不会使用,导致在工作或者是学习的时 ...

  2. 常用工具类 Math:数学计算 Random:生成伪随机数 SecureRandom:生成安全的随机数 2020-2-13

    常用工具类 阅读: 324836 Java的核心库提供了大量的现成的类供我们使用.本节我们介绍几个常用的工具类. Math 顾名思义,Math类就是用来进行数学计算的,它提供了大量的静态方法来便于我们 ...

  3. A001、熟悉研发环境windows_常用工具使用

    目录 1.内容介绍 2.职业发展 2.1为什么需要知道 2.2职业规划 3.学习心态 4.学习方法 5.学习要求 6.计算机常识 6.1为什么需要了解 6.2什么是计算机 6.3计算机组成 6.3.1 ...

  4. 西湖大学鞠峰组:环境宏病毒组学分析思路与常用工具

    环境宏病毒组学分析思路与常用工具 袁凌1, 2,倪艳4,鞠峰1, 2, 3 * 1 浙江省海岸带环境与资源研究重点实验室,工学院, 西湖大学, 杭州, 浙江 2  前沿技术研究所, 浙江西湖高等研究院 ...

  5. java dump分析工具_java性能分析与常用工具

    本次源码已放在Github:https://github.com/nateshao/jvm-tuning 个人博客 https://nateshao.gitee.io http://www.nates ...

  6. Exchange bin先常用工具

    Exchange 常用工具 Microsoft Exchange技术文档链接:http://technet.microsoft.com/zh-cn/library/aa996417(EXCHG.65) ...

  7. Android Framework常用工具及LOG调试方法

    概述 Framework开发是一项非常繁琐复杂的工作,需要阅读大量的源代码,分析及其多的LOG信息来定位错误位置.这个时候如果使用一些工具或者知道如何定位重要LOG信息,就可以使一些复杂的工作变的简单 ...

  8. linux常用工具命令

    linux常用工具命令 @(LINUX)[linux] linux常用工具命令 一dmidecode 1硬件平台 2内存 3cpu 二1sar 三iostat 1iostat -xk 1 四vmsta ...

  9. curl命令java_让 Bug 无处藏身,Java 线上问题排查思路、常用工具

    本文总结了一些常见的线上应急现象和对应排查步骤和工具.分享的主要目的是想让对线上问题接触少的同学有个预先认知,免得在遇到实际问题时手忙脚乱. 只不过这里先提示一下.在线上应急过程中要记住,只有一个总体 ...

最新文章

  1. 前端Vue学习之路(五)插件的使用
  2. MySQL导数据工具对比
  3. Bootstrap+MetroNic_1.5.4 Head meta
  4. 编译性语言、解释性语言和脚本语言
  5. CodeIgniter URL添加后缀
  6. js获取日期实例之昨天今天和明天、后天
  7. 华为员工利用Bug越权访问机密卖给第三方,获利1.6万元,被判有期徒刑一年...
  8. Java 学习 day09
  9. 网件rax40可以刷梅林_深度爆料网件RAX40评价如何?怎么样呢?真实体验曝光
  10. ppt抽奖vba代码
  11. C++ 房贷计算 : 等额本金和等额本息
  12. 国产操作系统之中兴新支点NewStartOS安装
  13. LANP 配置文件
  14. clt用MeGUI处理切割音频
  15. Sqlserver 日期查询处理
  16. Hypervisor 技术的演进
  17. mongo-java 实现使用and拼接多个or查询条件
  18. 机器学习在美团配送系统的实践:用技术还原真实世界-笔记
  19. 苹果手机通话没有声音是怎么回事_手机通话声音太小?只需要打开这个开关,声音变大好几倍...
  20. InputStream读JSON数据时乱码

热门文章

  1. js中的各种宽度计算
  2. 【unity基础系列】1、unity Texture Type设置为Advanced时纹理的格式列表
  3. 2015年10月15日学习html基础笔记
  4. 基于libUSB的USB设备固件更新程序(下载数据)(转)
  5. 深入理解C指针之四:指针和数组
  6. HDOJ-3785 寻找大富翁(优先队列)
  7. 用boost.signal实现多播委托
  8. python b64encode_Python base64模块详解 | 学步园
  9. spring autowired idea都匹配上了_你清楚这几个Spring常用注解吗?
  10. 北斗导航 | Select Satellite 选星算法