我目前正在处理 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)
对此的任何帮助都会很棒