将 pydub 音频电平映射到柏林噪声

时间:2021-01-04 22:27:50

标签: python dictionary audio pydub

我目前正在处理 mp3 格式的音频循环,我正在尝试编写一个脚本,该脚本可以将我拥有的循环的音量映射到生成的 Perlin 噪声的灰度值。

我必须生成我需要的噪声值的脚本工作正常:

from pydub.playback import play
from perlin_noise import PerlinNoise
from pydub import AudioSegment

def CreateNoiseArray(rows,ncolumns,octave1 = 3,octave2 = 6,octave3 = 12,octave4 = 24):
    noise1 = PerlinNoise(octaves = octave1)
    noise2 = PerlinNoise(octaves = octave2)
    noise3 = PerlinNoise(octaves = octave3)
    noise4 = PerlinNoise(octaves = octave4)
    column = []
    for i in range(rows):
        row = []
        for j in range(ncolumns):
            noise_val =         noise1([i/rows, j/ncolumns])
            noise_val += 0.5  * noise2([i/rows, j/ncolumns])
            noise_val += 0.25 * noise3([i/rows, j/ncolumns])
            noise_val += 0.125* noise4([i/rows, j/ncolumns])
            row.append(noise_val)
        column.append(row)
    return column

print(CreateNoiseArray(4,2))

用所使用的包覆盖和连接循环的方式也相当简单,老实说,对于这个例子来说,我所追求的并不需要太多。如果我有一个更长的数组哦,孩子,这个方法会不会很笨拙。我主要在那里使用字典,但我可以帮助使最后一部分可行:

PATH = 'path/to/loops/loop'

levelarray = CreateNoiseArray(4,2)
looplib = {}

for i in range(len(levelarray)):
    looplib['loop'+str(i)] = [AudioSegment.from_mp3(PATH+str(i)+'.mp3')]
    for j in range(len(levelarray[i])):
        looplib['loop'+str(i)].append(levelarray[i][j])
# This is where I'm going astray
loop0full = (looplib['loop0'][0]+looplib['loop0'][1])+(looplib['loop0'][0]+looplib['loop0'][2])
loop1full = (looplib['loop1'][0]+looplib['loop0'][1])+(looplib['loop1'][0]+looplib['loop1'][2])
loop2full = (looplib['loop2'][0]+looplib['loop0'][1])+(looplib['loop2'][0]+looplib['loop2'][2])
loop3full = (looplib['loop3'][0]+looplib['loop0'][1])+(looplib['loop3'][0]+looplib['loop3'][2])

l0l1 = loop0full.overlay(loop1full)
l2l3 = loop2full.overlay(loop3full)

lall = l0l1.overlay(l2l3)
#play(lall)

对此的任何帮助都会很棒

0 个答案:

没有答案
相关问题