Python DTMF编码器 - 忽略特殊字符

时间:2017-10-06 23:41:45

标签: python audio dtmf

我想忽略用户在字符串中输入的特殊字符,同时输出DTMF信号声音。

基本上,我正在构建一个DTMF​​编码器,对于电话键盘的每个按键,系统将行音和列音相结合并发送两者。

例如:“12 34aB-cd $%^& 76”应输出“1234abcd76”的音调,忽略空格和电话键盘上找不到的所有其他字符。有没有更快更好的方法呢?

代码:

userInput = "12  34aB-cd$%^&76"

length = len(userInput)

sound = []

index = 0

time = 0.3
delayTime = 0.1

Fs = 8000

runningTime = np.linspace(0,time,time*Fs+1)
time2 = np.linspace(0, delayTime, delayTime*Fs+1)

lofreq = 0
hifreq = 0
totalfreq = 0

delay = np.sin(2*np.pi*20000*delayTime)

while index < length: 

if userInput[index] == 1:
    lofreq = np.sin(2*np.pi*697*runningTime) 
    hifreq = np.sin(2*np.pi*1209*runningTime)
    totalfreq = lofreq + hifreq
    sound.append(lofreq + hifreq)
    sound.append(delay)

elif userInput[index] == 2:
    lofreq = np.sin(2*np.pi*697*runningTime) 
    hifreq = np.sin(2*np.pi*1336*runningTime)
    totalfreq = lofreq + hifreq
    sound.append(lofreq + hifreq)
    sound.append(delay)

elif userInput[index] == 3:
    lofreq = np.sin(2*np.pi*697*runningTime) 
    hifreq = np.sin(2*np.pi*1447*runningTime)
    totalfreq = lofreq + hifreq
    sound.append(lofreq + hifreq)
    sound.append(delay)

elif userInput[index] == 'A' or 'a':
    lofreq = np.sin(2*np.pi*697*runningTime) 
    hifreq = np.sin(2*np.pi*1633*runningTime)
    totalfreq = lofreq + hifreq
    sound.append(lofreq + hifreq)
    sound.append(delay)

elif userInput[index] == 4:
    lofreq = np.sin(2*np.pi*770*runningTime) 
    hifreq = np.sin(2*np.pi*1209*runningTime)
    totalfreq = lofreq + hifreq
    sound.append(lofreq + hifreq)
    sound.append(delay)

elif userInput[index] == 5:
    lofreq = np.sin(2*np.pi*770*runningTime) 
    hifreq = np.sin(2*np.pi*1336*runningTime)
    totalfreq = lofreq + hifreq
    sound.append(lofreq + hifreq)
    sound.append(delay)

elif userInput[index] == 6:
    lofreq = np.sin(2*np.pi*770*runningTime) 
    hifreq = np.sin(2*np.pi*1447*runningTime)
    totalfreq = lofreq + hifreq
    sound.append(lofreq + hifreq)
    sound.append(delay)

elif userInput[index] == 'B' or 'b':
    lofreq = np.sin(2*np.pi*770*runningTime) 
    hifreq = np.sin(2*np.pi*1633*runningTime)
    totalfreq = lofreq + hifreq
    sound.append(lofreq + hifreq)
    sound.append(delay)

elif userInput[index] == 7:
    lofreq = np.sin(2*np.pi*852*runningTime) 
    hifreq = np.sin(2*np.pi*1209*runningTime)
    totalfreq = lofreq + hifreq
    sound.append(lofreq + hifreq)
    sound.append(delay)

elif userInput[index] == 8:
    lofreq = np.sin(2*np.pi*852*runningTime) 
    hifreq = np.sin(2*np.pi*1336*runningTime)
    totalfreq = lofreq + hifreq
    sound.append(lofreq + hifreq)
    sound.append(delay)

elif userInput[index] == 9:
    lofreq = np.sin(2*np.pi*852*runningTime) 
    hifreq = np.sin(2*np.pi*1477*runningTime)
    totalfreq = lofreq + hifreq
    sound.append(lofreq + hifreq)
    sound.append(delay)

elif userInput[index] == 'C' or 'c':
    lofreq = np.sin(2*np.pi*852*runningTime) 
    hifreq = np.sin(2*np.pi*1633*runningTime)
    totalfreq = lofreq + hifreq
    sound.append(lofreq + hifreq)
    sound.append(delay)

elif userInput[index] == '*':
    lofreq = np.sin(2*np.pi*941*runningTime) 
    hifreq = np.sin(2*np.pi*1209*runningTime)
    totalfreq = lofreq + hifreq
    sound.append(lofreq + hifreq)
    sound.append(delay)

elif userInput[index] == 0:
    lofreq = np.sin(2*np.pi*941*runningTime) 
    hifreq = np.sin(2*np.pi*1336*runningTime)
    totalfreq = lofreq + hifreq
    sound.append(lofreq + hifreq)
    sound.append(delay)

elif userInput[index] == '#':
    lofreq = np.sin(2*np.pi*941*runningTime) 
    hifreq = np.sin(2*np.pi*1447*runningTime)
    totalfreq = lofreq + hifreq
    sound.append(lofreq + hifreq)
    sound.append(delay)

elif userInput[index] == 'D' or 'd':
    lofreq = np.sin(2*np.pi*941*runningTime) 
    hifreq = np.sin(2*np.pi*1633*runningTime)
    totalfreq = lofreq + hifreq
    sound.append(lofreq + hifreq)
    sound.append(delay)

index = index + 1

sound_out = np.concatenate(声音)

打印(sound_out)

音频(sound_out,rate = Fs)

1 个答案:

答案 0 :(得分:0)

创建可接受字符列表,例如

chars = [1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]

并在代码中实现一个条件,检查每个字符是否不在此列表中。如果该字符不在此列表中,则可以确定输出中不需要该字符。