This is a simple Pseudo Stereo Algorythm for mono audio track.
Based on physic's laws.
For you usage...
It works fine (for me)...
.
Code:
#
# Pseudo Stereo algorythm
# Based on physic's laws
#
audio = BassAudioSource("...your sound file...")
audio = GetChannel(audio, 1) # Get MONO signal Left channel -> Получаем левый канал, звук "МОНО"
audio = ConvertToMono(audio)
left_channel = audio
right_channel = DelayAudio(audio, 0.0121) # t=0.0121 sec (v=331 m/sec) ~4 m between sound source L and R in room -> 0.0121 сек (331 м/сек) ~ 4 м между источниками звука L и R
left_channel = Normalize(left_channel, 0.99)
right_channel = Normalize(right_channel, 0.99)
left_channel_delay = DelayAudio(left_channel, 0.000755) # t=0.000775 sec (v=331 m/sec) ~0.25 m between ears -> 0.000755 сек (331 м/сек) ~ 0.25 м (25 см) среднее расстояние между "ушами"
right_channel_delay = DelayAudio(right_channel, -0.000755) # t=0.000775 sec (v=331 m/sec) ~0.25 m between ears -> 0.000755 сек (331 м/сек) ~ 0.25 м (25 см) среднее расстояние между "ушами"
left_channel = MixAudio(left_channel, right_channel_delay, 0.6, 0.4)
right_channel = MixAudio(right_channel, left_channel_delay, 0.6, 0.4)
left_channel = Normalize(left_channel, 0.99)
right_channel = Normalize(right_channel, 0.99)
stereo = MergeChannels(left_channel, right_channel)
stereo = Normalize(stereo, 0.99)
.
This is a New Pseudo Stereo Algorythm for mono audio track.
Algorythm is described in Russian magazine "Radio" №7 1982 year.
For you usage...
It works fine (for me)...
.
Code:
#
# New pseudo Stereo algorythm
# Radio Magazine 07-1982, page 47-50
#
#
# Plugins:
#
# SoxFilter()
#
LoadPlugin("C:\PROGRAM FILES\AVISYNTH 2.5\PLUGINS\SOXFILTER_11\soxfilter.dll")
# Constants
#
K2 = 0.5 # K2 = [0.00 .. 1.00]
FNCH = 300.00 # Low Pass Filter (ФНЧ) = [150 .. 500] Hz (Гц)
SLevel = 1.00 # Sound Volume Level (Уровень звука) = [0.75 .. 1.00]
# Constants
# ! Do not change this constants !
#
Kf1 = 0.17 # ! Do not change this constant !
Kf2 = 0.83 # ! Do not change this constant !
Kf3 = 1.83 # ! Do not change this constant !
Kf4 = 2.00 # ! Do not change this constant !
KLevel = 0.85 # ! Do not change this constant ! # Требует небольшой подстройки под конктретный звук
SQRT2 = 1.414 # Square root 2 (Корень из 2)
# Constants
#
LChannel = 1 # Get Left Channel (Левый канал)
LowPass = "lowpass " # Low Pass Filter (ФНЧ)
HighPass = "highpass " # High Pass Filter (ФВЧ)
VLevel = "vol " # Volume Level normalization
# Constants
#
SLevel2 = 2.00 # Sound Volume Level (Уровень звука) = [1.00 .. 3.00] # First Sound Volume Level normalization
SLevel3 = 10.0 # Final Sound Volume Level normalization
# Variables
#
# RightChannel
# LeftChannel
# LeftChannel2 # Mono signal (Моно сигнал), work variable...
# Afnch
# Bfvch
# Stereo
#
# EqC1 # Variable
# EqC2 # Variable
# EqC3 # Variable
# EqC4 # Variable
#
# EqZL # Variable
# EqZR # Variable
K2 = (K2 < 0.00) ? 0.00 : (K2 > 1.00) ? 1.00 : K2
FNCH = (FNCH < 150.00) ? 150.00 : (FNCH > 500.00) ? 500.00 : FNCH
SLevel = (SLevel < 0.75) ? 0.75 : (SLevel > 1.00) ? 1.00 : SLevel
SLevel2 = (SLevel2 < 1.00) ? 1.00 : (SLevel2 > 3.00) ? 3.00 : SLevel2
BlankClip(length=72250, width=768, height=576, audio_rate=44100, fps=25.0) # Only for test
Left=WAVSource("C:\Z_DISK_C\PICTURE\JENYOK\SCHOOL_47_KURGAN\VIDEO\DVD 25YEARS DISK6 ФИЛЬМ УЧИТЕЛЬ V1_00 (OLD, +AVI, +AVS)\ZAVS\teacher t01 2_0ch 256kbps 44.1khz.wav")
LeftChannel2 = Left.KillVideo() # Get Audio Channel, kill Video content
#LeftChannel2 = GetChannel(LeftChannel2, LChannel).KillVideo() # Get Audio Channel, kill Video content
LeftChannel2 = ConvertToMono(LeftChannel2)
LeftChannel2 = SoxFilter(LeftChannel2, VLevel+String(SLevel2)) # Normalize sound Volume Level = SLevel2
#
# Afnch = LowPass_Filter(LeftChannel2, FNCH)
#
#
# Bfvch = LeftChannel2 - Afnch
#
# Bfvch = HighPass_Filter(Bfvch, FNCH)
#
#
# LeftChannel = SQRT(2) * (Afnch - 2 * K2 * Afnch + 1.83 * K2 * LeftChannel2 - 0.83 * K2 * K2 * LeftChannel2)
#
# RightChannel = SQRT(2) * (Bfvch + 2 * K2 * Afnch - 0.17 * K2 * LeftChannel2 - 0.83 * K2 * K2 * LeftChannel2)
#
Afnch = SoxFilter(LeftChannel2, LowPass+String(FNCH)) # 300 Hz (Гц) Low Pass Filter (ФНЧ 300 Гц)
Afnch = SoxFilter(Afnch, VLevel+String(SLevel)) # Normalize sound Volume Level = SLevel
Bfvch = MixAudio(LeftChannel2, Afnch, 1.0, -1.0) #
Bfvch = SoxFilter(Bfvch, VLevel+String(SLevel*KLevel)) # Normalize sound Volume Level = SLevel*KLevel
Bfvch = SoxFilter(Bfvch, HighPass+String(FNCH)) # 300 Hz (Гц) High Pass Filter (ФВЧ 300 Гц)
Bfvch = SoxFilter(Bfvch, VLevel+String(SLevel)) # Normalize sound Volume Level = SLevel
EqC1 = SoxFilter(Afnch, VLevel+String(Kf4 * K2))
EqC2 = SoxFilter(LeftChannel2, VLevel+String(Kf3 * K2))
EqC3 = SoxFilter(LeftChannel2, VLevel+String(Kf2 * K2 * K2))
EqC4 = SoxFilter(LeftChannel2, VLevel+String(Kf1 * K2))
EqZL = MixAudio(Afnch, EqC1, 1.0, -1.0)
EqZL = SoxFilter(EqZL, VLevel+String(SLevel)) # Normalize sound Volume Level = SLevel
EqZL = MixAudio(EqZL, EqC2, 0.5, 0.5)
EqZL = SoxFilter(EqZL, VLevel+String(SLevel)) # Normalize sound Volume Level = SLevel
EqZL = MixAudio(EqZL, EqC3, 1.0, -1.0)
EqZL = SoxFilter(EqZL, VLevel+String(SLevel)) # Normalize sound Volume Level = SLevel
EqZR = MixAudio(Bfvch, EqC1, 0.5, 0.5)
EqZR = SoxFilter(EqZR, VLevel+String(SLevel)) # Normalize sound Volume Level = SLevel
EqZR = MixAudio(EqZR, EqC4, 1.0, -1.0)
EqZR = SoxFilter(EqZR, VLevel+String(SLevel)) # Normalize sound Volume Level = SLevel
EqZR = MixAudio(EqZR, EqC3, 1.0, -1.0)
EqZR = SoxFilter(EqZR, VLevel+String(SLevel)) # Normalize sound Volume Level = SLevel
LeftChannel = SoxFilter(EqZL, VLevel+String(SQRT2))
RightChannel = SoxFilter(EqZR, VLevel+String(SQRT2))
Stereo = MergeChannels(LeftChannel, RightChannel)
Stereo = SoxFilter(Stereo, VLevel+String(SLevel3)) # Normalize sound Volume Level = SLevel3
Stereo = ConvertAudioTo16bit(Stereo)
AudioDub(last, Stereo)
ConvertToYUY2()