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

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

问题描述:

我想在输出DTMF信号声音时忽略用户在字符串中输入的特殊字符。Python 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,率= FS)

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

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] 

并在你的代码中实现一个检查每个字符是否不在这个列表中的条件。如果角色不在这个列表中,你可以确定它在你的输出中是不需要的。