漫射声目标与通用上混的去相关算法及工具箱

s3a-decorrelation-toolbox的Python项目详细描述


S3A去相关器

S3A去相关器是一个用Python编写的开源Upmix算法。

该算法还可用于将任何音频源向任意数量的频道上混合。算法是盲的,生成的upmix保持单声道兼容。

它的设计目的是最大限度地提高周围环境、掌声和混响等漫反射声音对象的包络度,但可以用于任何源材料。

此存储库中的python工具箱包括脱机处理音频文件所需的工具,并包括一系列去相关过滤器。

简介

目前正在进行的一篇学术论文对算法的设计和验证进行了详细描述。有关详细信息,请联系m.cousins@surrey.ac.uk

算法分为两个阶段。第一阶段将音频分为三个部分:瞬变、噪声和谐波。然后,第二种方法对这些成分应用不同的去相关性,以最大限度地扩大包络,同时最大限度地减少人工制品的添加。

示例

示例将在此处提供这里

先决条件

decorrelator和toolbox是用python编写的,需要python 3发行版。 我们推荐使用Anaconda发行版,它与其他S3A软件(包括VISR)兼容。(尽管还没有用于S3A去相关工具箱的Conda包)

该包需要:librosa、pysoundfile、scipy、acoustics、matplotlib和pyloudnorm包。如果使用pip install安装软件包,这些依赖项将自动安装。

使用python 3.6和3.7进行测试。

安装

要安装,请打开一个终端窗口(Windows上的命令行)并使用命令

pip install s3a-decorrelation-toolbox

示例

最简单的例子是

import s3a_decorrelation_toolbox.s3a_decorrelator as s3a

s3a.s3a_decorrelator('/folder/input_file.wav',
'/folder/output_filename.wav', make_mono = True, duration = 10)

import s3a_decorrelation_toolbox.s3a_decorrelator as s3a

s3a.s3a_decorrelator('/folder/input_file.wav',
'/folder/output_filename.wav', preset = 'upmix', make_mono = True, duration = 10)

这需要一个名为input_file.wav的wav,如果需要,将其转换为mono(因为make_mono=true参数),然后将mono信号的前10秒(duration=10)混合为立体声(默认值),最后将输出文件保存为output_filename.wav

可选的preset='upmix'应该用于一般的音频upmix目的,其中声音不应该是漫射的,而默认的(preset='diffuse')更适合于应该漫射的雨和掌声等材料。

文件examples/demo_s3A_decorrelator.py包含了一些通用upmix的更多演示。

去相关算法

目前正在进行的一篇学术论文对算法的设计和验证进行了全面的描述,下面是breif概述。

背景

对于彼此不相关的信号,信号之间的相位关系需要随时间而变化。信号之间的静态相位关系意味着信号是相干的。去相关方法寻求最大化两个信号之间phse的随机性。这可以通过两种机制来实现,即基于相位的和基于振幅的。基于振幅的去相关是根据频率(即,一个输出信号中的偶数频率和第二个输出信号中的奇数频率)在输出信号之间划分输入信号的地方。因为100赫兹和101赫兹是不相干的。这导致输出信号之间的低相干度。基于相位的方法假设输入信号具有短的自相关,因此在延迟后可以与自身不相关。通过对同一信号添加不同的延迟,输出信号是不相关的。这两种机制的问题之一是它们如何处理瞬变。这两种机制都不能很好地用于一个transient和typicCal Artefact是一种时间涂抹,即用非delta函数的滤波器的脉冲响应代替清晰的脉冲。此外,考虑到诸如雨或掌声之类的材料,瞬变代表特定的事件,例如雨滴或单个的拍击,它们来自一个单一的方向,不需要去关联。事实上,这些单一的事件来自多个方向或随机时间,这使得它们变得像噪音一样。但单独的拍打/雨滴不需要去相关。

因此,s3A去相关器使用使用冲击谐波分离器的预处理级将信号分成瞬变、噪声和谐波分量。然后,可以使用相应的去相关方法去相关这些组件。

默认设置

使用的默认设置尝试通过将传输网随机平移到不同的扬声器并对稳态分量使用最佳滤波器(因为传输网涂抹的风险较小,所以可以更长)来最大化扬声器之间的去相关量。这将导致更好的去相关,特别是对于瞬变应来自所有方向的材料。

预设值

preset='<;preset"名称">;'可用于加载特定用例的一些可选默认设置。

preset='漫反射'使用所有默认设置并最大化包络。 preset='upmix'使用默认的稳态去相关方法和滤波器长度,但不去相关传输网。这是理想的向上混合任何单声道到立体声,其中单声道包括语音。声音中的瞬变应该在空间上组合在一起,以避免听起来很不自然。upmix确保所有瞬变信号都能在没有去相关的情况下传输到所有扬声器。 preset='向上混音单声道/lrcslsrs'向上混音单声道到5.1英寸,扬声器顺序为l、r、c、sub、ls、rs。所有传输网仅路由到中央信道。 preset='向上混音立体声/u lrcslsrs'向上混音立体声到5.1。tranisnets保持在左声道和右声道中。从左输入通道导出的不相关稳态分量保留在左输出通道上,而从右输出通道导出的不相关稳态分量保留在左输出通道上。

其他设置

make_mono=true'可用于在上混之前强制将输入音频设置为mono。这有助于测试您想在何处输入立体声,并将混合立体声与原始立体声进行比较。

duration是输出文件的长度(秒)。去相关算法目前效率不高,因此出于测试目的,可以使用10秒的短时间。

num_out_chas是输出文件将具有的输出通道数。

transient_decorrelation_method是来自decorr_工具箱的解相关对象的名称。例如,dt.lauridsen用于解除瞬变电流。 transient_decorrelation_arguments=dict()是包含tranisnet decorrelator参数的字典。例如,filterlength=20.5意味着瞬变去相关器将使用20.5 ms的长度 谐波和噪声分量具有类似的参数,称为谐波去相关法、谐波去相关法和噪声去相关法。

瞬态路由稳态路由是该组件的输出通道列表。例如,稳态路由'=[0,1,2,4,5]将所有噪声和谐波去相关输出路由到通道0,1,2,4和5,即不路由到5.1系统中的低音炮。在这种情况下,输出信道的数目(num_out_chans=6)大于被st中的较小项目数覆盖的去相关信号的数目。已就绪状态路由参数。

高级示例

Demo_u Decorrelator脚本中包含一些Upmix示例。

这是另一个例子。我们希望从5.1输入信号的环绕声道中获取环境,将其混频到22声道扬声器系统中,并将原来的前声道和瞬变加到原来的声道中。

import soundfile as sf
import s3a_decorrelation_toolbox.s3a_decorrelator as s3a

audioFile, fs = sf.read('5.1_input_filename.wav')

surround_Channels = audioFile[:,[4,5]]

audioOut = s3a.s3a_decorrelator(surround_Channels,                  # input a numpy array instead of filemane string.
                                    output_filename = None,         # dont write an output file
                                    'num_out_chans' = 2,             # output has 22 channels
                                    'transient_routing' = [4, 5],    # Transients go back to the channels they came from
                                    make_mono = False)              # Upmix from the 2 channels of 

audioOut[:, [0, 1 ,2 ,3 ]] += audioFile [:, [0, 1 ,2 ,3 ]] #add back in the non-surround channels

scipy.io.wavfile.write('output_filename.wav', fs, audioOut)

未来工作

在将来,这段代码将被转换为分离和过滤阶段的实时实现。 decorr_u工具箱中的decorrelator对象将被更新,以生成VISR卷积器

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

推荐PyPI第三方库


热门话题
java获取textview的文本并将其粘贴到另一个上   java ImageIO。write()不保存文件   java H2数据库排序字符串时间戳,格式为yyyyMMdd'T'hh:mm:ss。SSSSSSS'Z'   java匿名类与静态字段   java将一个句子拆分为字符串数组,并保留特殊字符或空格   JavaBIRT报告引擎。计算Javascript表达式时出错   日志表的java MySQL隔离级别读取未提交   java Android调用意图权限   java如何在iText 7中查找文本位置和边界   从Groovy调用Java类主方法时,避免参数数量不正确   java libGDX:在批处理调用stage constructor时,为舞台上的演员绘制纹理作为背景   java randoop可以利用usermade JUnit测试生成测试吗?   java Eclipse工作区将不再显示我的项目