我一直想尝试创建一个摩尔斯电码音频解码器一段时间,这将通过麦克风采用莫尔斯电码输入音频并使用python将其解码为英语。现在我的首要任务是能够识别dits和dahs。我尝试接近解码器的这一部分的方法如下:
import pyaudio
import struct
import math
from datetime import datetime
thresh = 0.002
sample_period = 0.01
RATE = 44100
sample_cycles = int(RATE*sample_period)
SHORT_NORMALIZE = (1.0/32768.0)
CHANNELS = 2
FORMAT=pyaudio.paInt16
def rms(sample):
count = len(sample)/2
format = "%dh"%(count)
shorts = struct.unpack( format, sample )
sum_squares = 0.0
for i in shorts:
n = i * SHORT_NORMALIZE
sum_squares += n*n
return math.sqrt( sum_squares / count )
pa=pyaudio.PyAudio()
stream = pa.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
frames_per_buffer = sample_cycles)
thresh_final=thresh
list1=""
counter=0
for i in range(1000):
try:
sample=stream.read(sample_cycles)
except IOError:
print("Error Recording")
amp=rms(sample)
if amp>thresh:
list1+="1"
else:
list1+="0"
list1=list1.split("0")
print(list1)
for i in range(len(list1)):
if len(list1[i])==45:
print ("Dah")
elif len(list1[i])==15:
print("Dit")
守则/目标的快速摘要:
正如您所知道的那样,效率并不高,所以有关如何处理摩尔斯电码音频解码的建议吗?
受其他帖子影响的代码:Detect tap with pyaudio from live mic
答案 0 :(得分:1)
如果您仍在寻找答案,我找到了一个名为morse-to-text - default的python
库,它将.wav
莫尔斯代码文件转换为text
。
如果您有mp3
,请先将其转换为wav
您可以使用内置的python
wave
,ffmpeg
或外部包装库pydub
。
以下是使用pydub
的示例,因为它非常易于使用。
from pydub import AudioSegment
codefile_mp3 = "sampleMorseCode.mp3"
codefile_wav = "sampleMorseCode.wav"
mcode = AudioSegment.from_mp3(codefile_mp3)
mcode.export(codefile_wav , format="wav")
将莫尔斯代码文件转换为wav
后,您可以按如下方式运行morse-to-text.py
命令行,或在python脚本中调用。
C:\morse-to-text>morse-to-text.py sampleMorseCode.wav
输出:
.-.. .- | .-. . ... .--. ..- . ... - .- | -.. . | . ... - . | -. .. ...- . .-..
| . ... | .- .-.. ..-. .-. . -.. | ...- .- .. .-..
LA RESPUESTA DE ESTE NIVEL ES ALFRED VAIL
它还会生成大量有关信号的数据,例如spectrogram
,fft
,frequency
,filter
等(如果您有兴趣的话。
Usage: C:\morse-to-text\morse-to-text.py soundfile.wav [--report[=pdf|=png]]
我刚刚从网上获得了一个样本莫尔斯代码文件。因此它不是英文的 希望这可以帮助。