一个用于音频时间刻度修改的开源Python库。

pytsmod的Python项目详细描述


PyTSMod公司

PyPIBuild StatusPythonlicensedownloads

PyTSMod是python3中时间尺度修改算法的开源库。同步波形(如PSOM-Add)和同步时域相似性算法(如PSOM-Add)和TSODER-Add。我们还计划增加更多的TSM算法和基音变换算法。在

完整的文档可在https://pytsmod.readthedocs.io上找到

open-issuesclosed-issuesopen-prsclosed-prs

算法的实现基于这些论文和库:

TSM Toolbox: MATLAB Implementations of Time-Scale Modification Algorithms. Jonathan Driedger, Meinard Müller. Proceedings of the 17th International Conference on Digital Audio Effects (DAFx-14), 2014.

A review of time-scale modification of music signals. Jonathan Driedger, Meinard Müller. Applied Sciences, 6(2), 57, 2016.

DAFX: digital audio effects Udo Zölzer. John Wiley & Sons, 2011.

安装PyTSMod

PyTSMod托管在PyPI上。要安装,请在Python环境中运行以下命令:

$ pip install pytsmod

或者,如果使用poetry,则可以通过以下命令克隆存储库并生成包:

^{pr2}$

要求

要使用PyTSMod,需要版本为>;=3.6的Python和以下软件包。在

  • 数量(>;=1.16.0)
  • 压缩(>;=1.0.0)
  • libROSA(大于等于0.8.0)
  • 声音文件(>;=0.10.0)

使用PyTSMod

使用OLA、WSOLA和PV-TSM

OLA、WSOLA和PV-TSM可以作为模块导入,直接在Python中使用。为了轻松获得结果,您只需要两个参数,输入音频序列x和时间拉伸因子s。下面是一个最小的示例:

importnumpyasnpimportpytsmodastsmimportsoundfileassf# you can use other audio load packages.x,sr=sf.read('/FILEPATH/AUDIOFILE.wav')x=x.Tx_length=x.shape[-1]# length of the audio sequence x.s_fixed=1.3# stretch the audio signal 1.3x times.s_ap=np.array([[0,x_length/2,x_length],[0,x_length,x_length*1.5]])# double the first half of the audio only and preserve the other half.x_s_fixed=tsm.wsola(x,s_fixed)x_s_ap=tsm.wsola(x,s_ap)

时间拉伸系数s

时间拉伸因子s可以是常量值(alpha),也可以是包含第一行输入信号的采样点和第二行中输出信号的采样点的2xn锚定点阵列。在

使用TD-PSOLA

使用TD-PSOLA时,需要估计要修改的源的基音信息。另外,你应该知道你使用的基音跟踪算法的跳跃大小和帧长度。下面是一个最小的例子:

importnumpyasnpimportpytsmodastsmimportcrepe# you can use other pitch tracking algorithms.importsoundfileassf# you can use other audio load packages.x,sr=sf.read('/FILEPATH/AUDIOFILE.wav')_,f0_crepe,_,_=crepe.predict(x,sr,viterbi=True,step_size=10)x_double_stretched=tsm.tdpsola(x,sr,f0_crepe,alpha=2,p_hop_size=441,p_win_size=1470)# hop_size and frame_length for CREPE step_size=10 with sr=44100x_3keyup=tsm.tdpsola(x,sr,f0_crepe,beta=pow(2,3/12),p_hop_size=441,p_win_size=1470)x_3keydown=tsm.tdpsola(x,sr,f0_crepe,target_f0=f0_crepe*pow(2,-3/12),p_hop_size=441,p_win_size=1470)

时间拉伸因子α

在这个版本中,TD-PSOLA只支持固定时间拉伸因子α。在

变桨因子β和目标

您可以用两种方法修改音频序列的音调。第一个是beta,它是固定的基音偏移因子。另一个是target_f0,它支持您要转换的目标音调序列。不能同时使用这两个参数。在

从命令行使用PyTSMod

从版本0.3.0开始,这个包包含一个名为tsmod的命令行工具,它可以从shell轻松地创建结果文件。要生成拉伸系数为1.3的input.wav的WSOLA结果并保存到output.wav,请运行:

$ tsmod wsola input.wav output.wav 1.3  # ola, wsola, pv, pv_int are available.

目前支持OLA、WSOLA和相位声码器(PV)。TD-PSOLA被排除在外,因为很难将提取的基音数据发送到TD-PSOLA。此外,命令行中不支持非线性TSM。在

有关详细信息,请使用-h--help命令查看tsmod的详细用法。在

音频示例

原始音频来自TSM工具箱。在

拉伸系数α=0.5

NameMethodOriginalOLAWSOLAPhase VocoderPhase Vocoder (phase locking)TSM based on HPSS
CastanetsViolinTSM Toolboxwavwavwavwavwavwav
-PyTSMod-wavwavwavwavwav
DrumSoloTSM Toolboxwavwavwavwavwavwav
-PyTSMod-wavwavwavwavwav
PopTSM Toolboxwavwavwavwavwavwav
-PyTSMod-wavwavwavwavwav
SingingVoiceTSM Toolboxwavwavwavwavwavwav
-PyTSMod-wavwavwavwavwav

拉伸系数α=1.2

^{tb2}$

拉伸系数α=1.8

^{3}$

参考文献

[1]乔纳森·德里格,梅纳德·穆勒。”TSM工具箱:时间尺度修正算法的MATLAB实现”,第17届国际数字音频效果会议论文集(DAFx-14)。2014年。在

[2]乔纳森·德里格,梅纳德·穆勒。”音乐信号的时间尺度修正述评“,应用科学,6(2),57。2016年。在

[3]乌多·泽尔泽。”DAFX:digital audio effects“,John Wiley&Sons。2011年。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
decimal Java BigDecimal除法并获取N位数字   以不同的时间间隔重新启动Java计时器   java JFreeChart空指针问题   java Maven:通过cmd使用Install命令获取编译错误   计算CSV文件中行数的java内置方法?   在WorldWind Java/JOGL中使用自定义着色器   JavaSpringMVC安全性甚至在第一步都不起作用   java面板无法打开?   java抓住可丢弃的东西是一种不好的做法吗?   java如何安排JComboBox项   windows使用java设置系统时间的毫秒数   java如何检查ISO日期字符串中是否存在偏移量   java如何获取JPanel中鼠标指针的位置(无需任何鼠标操作)?   java如何获取log4j2。从pom读取文件名的属性文件。springboot中的xml   java编写二叉搜索树的插入方法   Java泛型覆盖静态方法解决方案   java在下面的代码中,语句SumDif()的作用是什么。run();意思是   java与集合对象有关系的类是否与集合的元素有关系?   java一旦恢复了用户的图像,如何将其保存在Drawable中