I have recently put up a video introducing the basics of audio compression (dynamic range compression) for voice:
The patch used in this video is this one (remember AGPL):
2 SetSwapLimit
"temp/input.wav" ReadFile ^signal
?signal !orig
[Low peak cut]
(?signal,150,3)ButterworthLowPass !lower
(?signal,150,3)ButterworthHighPass !upper
(>lower,60,2)ButterworthHighPass !lower
(?lower Normalise,100,100)Follow !shape
(?shape,(1,?shape MaxValue)/)NumericVolume !shape
(0.1,>shape dbs+48)DirectMix !shape
(
>lower,
>shape
)Divide !lower
(
>lower,
>upper
)Mix Normalise !signal
[ De-ess ]
(?signal,4000,5)ButterworthLowPass !lower
(?signal,4000,5)ButterworthHighPass !upper
(?upper Normalise,100,100)Follow !shape
(?shape,(1,?shape MaxValue)/)NumericVolume !shape
(0.1,>shape dbs+48)DirectMix !shape
(
>upper,
>shape
)Divide !upper
(
>lower,
>upper dbs+3
)Mix Normalise !signal
{
(
(?signal Reverse,1,50)Follow Reverse,
(?signal ,1,50)Follow,
)Mix !shape
(?shape,(2,?shape MaxValue)/)NumericVolume !shape
(0.04,>shape)DirectMix Clip !shape
(>signal,?shape)Multiply Normalise !signal
(
(?signal Normalise,25,25)Follow,
(?signal Normalise Reverse,25,25)Follow Reverse,
)Mix !shape
(?shape,(1,?shape MaxValue)/)NumericVolume !shape
(0.3,>shape dbs+24)DirectMix !shape
(
>signal,
>shape
)Divide Normalise !signal
}!envelope-compress
{
(?signal,50,10)Granulate !grains
Bunch !output
(
>grains,
{
^grain ^time
(
(?time,(?time,?grain length)+,?signal)Cut !sample
(?grain Rectify MaxValue !v,?gate-point)Gt,
{
(
(?v,?slam-point)Gt,
{
(>grain,(?slam-point,?v)/)NumericVolume !grain
},
{
[ Do nothing ]
}
)Choose Invoke
}
,
{
(>grain,(1,(?gate-point,?v)/)/)NumericVolume !grain
}
)Choose Invoke
((>grain swapout,>time),>output)AddEnd !output
}
)InvokeAll
>output MixAt Normalise !signal
}!compress
{
0.02 !gate-point
0.50 !slam-point
[ Do in pairs to avoid running out of memory ]
(
(
?compress,
)DoAll Mix Swapout,
(
?compress,
)DoAll Mix Swapout,
(
?compress,
)DoAll Mix Swapout,
(
?compress,
)DoAll Mix Swapout,
)Mix Normalise !signal
}!granular-compress
?envelope-compress Invoke
[ Reverb ]
(15 Silence,?signal)Concatenate !note-left
?signal !note-right
(>note-left ,1000,0.25)RBJLowPass !note-left
(>note-right,1000,0.25)RBJLowPass !note-right
(
1,2,
{
!outer
(
1,4,
{
!t
{((30,(?t,(24,?outer)*)*)+ Prime Silence,?note-left )Concatenate} Do !nlTask
{((45,(?t,(15,?outer)*)*)+ Prime Silence,?note-right)Concatenate} Do !nrTask
{((>nlTask Done, -15)Volume,(700,(?t,3)*)-,1)ButterworthLowPass} Do !nlTask
{((>nrTask Done, -15)Volume,(700,(?t,3)*)-,1)ButterworthLowPass} Do !nrTask
{(>nlTask Done, ?note-left )Mix Normalise} Do !nlTask
{(>nrTask Done, ?note-right)Mix Normalise} Do !nrTask
?nlTask Done !note-left
?nrTask Done !note-right
}
)Repeat
}
)Repeat
(
>note-left dbs-12,
?signal
)Mix Normalise !left
(
>note-right dbs-12,
>signal
)Mix Normalise !right
(>left ,3000,2,6)RBJPeaking Normalise !left
(>right,3000,2,6)RBJPeaking Normalise !right
(>left, 150,2,12)RBJPeaking Normalise !left
(>right,150,2,12)RBJPeaking Normalise !right
>left !signal ?granular-compress Invoke
>signal dbs+6 WaveLimit !left
>right !signal ?granular-compress Invoke
>signal dbs+6 WaveLimit !right
(
(
>left,
>right
),"temp/step-1.wav"
)WriteFile32
No comments:
Post a Comment