【发布时间】:2014-02-08 14:44:04
【问题描述】:
我基本上有一些我想理解的 Python 源代码(不是我自己的)。这是一个抗锯齿异或音频振荡器。我根本不知道 python - 但它的可读性很强,除了几件事:
首先 - 完整代码:
f0 = 500.
fs = 44100.
T0 = f0/fs
P0 = fs/f0
t = arange(0,3*fs)
L = len(t)
imax = 2**16
# =============================================================================
# SIGNALS
# =============================================================================
# -----------------------------------------------------------------------------
#
def trivial_xor():
s = zeros(L)
sd1 = zeros(L)
sd2 = zeros(L)
s = zeros(L)
w = 0.5
p = 0
for n in range(0,L):
d1 = 2*p - 1
if p < w: d2 = 0
else: d2 = -0.5
x1 = int(d1 * imax) & 0xFFFF
x2 = int(d2 * imax) & 0xFFFF
y = (x1 ^ x2) / float(imax)
s[n] = 2*y - 1
sd1[n] = d1
sd2[n] = d2
p += T0
if p > 1: p -= 1
return s
# -----------------------------------------------------------------------------
#
def trivial_xor_withSources():
s = zeros(L)
sd1 = zeros(L)
sd2 = zeros(L)
s = zeros(L)
w = 0.5
p = 0
for n in range(0,L):
d1 = 2*p - 1
if p < w: d2 = 0
else: d2 = -0.5
x1 = int(d1 * imax) & 0xFFFF
x2 = int(d2 * imax) & 0xFFFF
y = (x1 ^ x2) / float(imax)
s[n] = 2*y - 1
sd1[n] = d1
sd2[n] = d2
p += T0
if p > 1: p -= 1
return s,sd1,sd2
# -----------------------------------------------------------------------------
#
def PTR1_xor():
s = trivial_xor() - 2*T0
#
T1 = 2*T0
P1 = 1/T1
cdc = 1 + T1
p0 = p1 = 0
#
for n in range(0,L):
if p0 < 0.5:
h = 0.5
if p1 < T1:
s[n] = p1*(2 - 2*h*P1) + 2*h - cdc
elif p0 < 0.75:
h = 0.5
if p1 < T1:
s[n] = p1*(2 - 2*h*P1) + 2*h - cdc + 1
else:
h = 1
pp = p1 - 0.5
if pp < T1:
s[n] = pp*(2 - 2*h*P1) + 2*h - cdc
#
p0 += T0
p1 += T1
if p0 > 1: p0 -= 1
if p1 > 1: p1 -= 1
return s
这一切看起来都很简单——除了我认为是缓冲区之外,我只需要知道 c++ 中的这些函数是什么?
////////////////////////////
t = arange(0,3*fs)
L = len(t)
imax = 2**16
////////////////////////////
def trivial_xor_withSources():
s = zeros(L)
sd1 = zeros(L)
sd2 = zeros(L)
s = zeros(L)
w = 0.5
p = 0
for n in range(0,L):
我打算实时使用它。其余的看起来就像简单的数学。非常感谢任何帮助!
安德鲁
【问题讨论】:
-
您甚至没有表明您正在从
numpy导入arange。您反复说明您的代码是多么简单易读,但是您显然缺少行(例如导入),并且只能从函数名称中推断出您要对函数执行的操作。一些解释会很棒。
标签: python c++ file-conversion