-->
当前位置:首页 > DayDayUp > 正文内容

使用python来生成对应字符串的摩斯电码音频

Luz2年前 (2023-03-27)DayDayUp3435

流程解析

定义摩尔斯代码:您需要定义摩尔斯电码和字符之间的映射关系。下面是一个示例字典,它将英文字母和数字映射到它们对应的摩尔斯代码:

MORSE_CODE = { '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': '--..', '0': '-----', '1': '.----', '2': '..---', 
               '3': '...--', '4': '....-', '5': '.....', '6': '-....', 
               '7': '--...', '8': '---..', '9': '----.', 
               '.': '.-.-.-', ',': '--..--', '?': '..--..', 
               '/': '-..-.', '-': '-....-', '(': '-.--.', ')': '-.--.-', 
               ' ': '/' }

将输入字符串转换为摩尔斯代码:将输入字符串转换为摩尔斯代码,使用点和短线表示每个字符。

def text_to_morse_code(text):
    morse_code = ""
    for char in text:
        morse_char = MORSE_CODE.get(char.upper(), None)
        if morse_char is not None:
            morse_code += morse_char + " "
    return morse_code


生成音频文件:使用pydub库生成音频文件

from pydub import AudioSegment
from pydub.generators import Sine
def generate_audio(morse_code, frequency=600, duration=100):
    audio = AudioSegment.empty()
    for char in morse_code:
        if char == ".":
            tone = Sine(frequency).to_audio_segment(duration)
        elif char == "-":
            tone = Sine(frequency).to_audio_segment(duration * 3)
        elif char == " ":
            tone = AudioSegment.silent(duration=duration * 3)
        else:
            continue
        audio += tone + AudioSegment.silent(duration=duration)
    return audio


将音频文件保存到磁盘:最后,将音频文件保存到磁盘

def save_audio(audio, file_path):
    audio.export(file_path, format="wav")
# 示例
text = "Hello World"
morse_code = text_to_morse_code(text)
audio = generate_audio(morse_code)
save_audio(audio, "hello_world.wav")



完整代码

from pydub import AudioSegment
from pydub.generators import Sine
import numpy as np
# Morse code dictionary
MORSE_CODE = { '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': '--..', '0': '-----', '1': '.----', '2': '..---', 
               '3': '...--', '4': '....-', '5': '.....', '6': '-....', 
               '7': '--...', '8': '---..', '9': '----.', 
               '.': '.-.-.-', ',': '--..--', '?': '..--..', 
               '/': '-..-.', '-': '-....-', '(': '-.--.', ')': '-.--.-', 
               ' ': '/' }
def text_to_morse_code(text):
    morse_code = ""
    for char in text:
        morse_char = MORSE_CODE.get(char.upper(), None)
        if morse_char is not None:
            morse_code += morse_char + " "
    return morse_code
def generate_audio(morse_code, frequency=600, duration=100):
    audio = AudioSegment.empty()
    for char in morse_code:
        if char == ".":
            tone = Sine(frequency).to_audio_segment(duration)
        elif char == "-":
            tone = Sine(frequency).to_audio_segment(duration * 3)
        elif char == " ":
            tone = AudioSegment.silent(duration=duration * 3)
        else:
            continue
        audio += tone + AudioSegment.silent(duration=duration)
    return audio
def save_audio(audio, file_path):
    audio.export(file_path, format="wav")
if __name__ == "__main__":
    text = "Hello World"
    morse_code = text_to_morse_code(text)
    audio = generate_audio(morse_code)
    save_audio(audio, "hello_world.wav")


运行结果

920133450115196998541ba2c2f6579.jpg

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。