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

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

Luz2年前 (2023-03-27)DayDayUp3805

流程解析

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

  1. MORSE_CODE = { 'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 
  2.                'F': '..-.', 'G': '--.', 'H': '....', 'I': '..', 'J': '.---', 
  3.                'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'O': '---', 
  4.                'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-', 
  5.                'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--', 
  6.                'Z': '--..', '0': '-----', '1': '.----', '2': '..---', 
  7.                '3': '...--', '4': '....-', '5': '.....', '6': '-....', 
  8.                '7': '--...', '8': '---..', '9': '----.', 
  9.                '.': '.-.-.-', ',': '--..--', '?': '..--..', 
  10.                '/': '-..-.', '-': '-....-', '(': '-.--.', ')': '-.--.-', 
  11.                ' ': '/' }

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

  1. def text_to_morse_code(text):
  2.     morse_code = ""
  3.     for char in text:
  4.         morse_char = MORSE_CODE.get(char.upper(), None)
  5.         if morse_char is not None:
  6.             morse_code += morse_char + " "
  7.     return morse_code

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

  1. from pydub import AudioSegment
  2. from pydub.generators import Sine
  3. def generate_audio(morse_code, frequency=600, duration=100):
  4.     audio = AudioSegment.empty()
  5.     for char in morse_code:
  6.         if char == ".":
  7.             tone = Sine(frequency).to_audio_segment(duration)
  8.         elif char == "-":
  9.             tone = Sine(frequency).to_audio_segment(duration * 3)
  10.         elif char == " ":
  11.             tone = AudioSegment.silent(duration=duration * 3)
  12.         else:
  13.             continue
  14.         audio += tone + AudioSegment.silent(duration=duration)
  15.     return audio

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

  1. def save_audio(audio, file_path):
  2.     audio.export(file_path, format="wav")
  3. # 示例
  4. text = "Hello World"
  5. morse_code = text_to_morse_code(text)
  6. audio = generate_audio(morse_code)
  7. save_audio(audio, "hello_world.wav")

完整代码

  1. from pydub import AudioSegment
  2. from pydub.generators import Sine
  3. import numpy as np
  4. # Morse code dictionary
  5. MORSE_CODE = { 'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 
  6.                'F': '..-.', 'G': '--.', 'H': '....', 'I': '..', 'J': '.---', 
  7.                'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'O': '---', 
  8.                'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-', 
  9.                'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--', 
  10.                'Z': '--..', '0': '-----', '1': '.----', '2': '..---', 
  11.                '3': '...--', '4': '....-', '5': '.....', '6': '-....', 
  12.                '7': '--...', '8': '---..', '9': '----.', 
  13.                '.': '.-.-.-', ',': '--..--', '?': '..--..', 
  14.                '/': '-..-.', '-': '-....-', '(': '-.--.', ')': '-.--.-', 
  15.                ' ': '/' }
  16. def text_to_morse_code(text):
  17.     morse_code = ""
  18.     for char in text:
  19.         morse_char = MORSE_CODE.get(char.upper(), None)
  20.         if morse_char is not None:
  21.             morse_code += morse_char + " "
  22.     return morse_code
  23. def generate_audio(morse_code, frequency=600, duration=100):
  24.     audio = AudioSegment.empty()
  25.     for char in morse_code:
  26.         if char == ".":
  27.             tone = Sine(frequency).to_audio_segment(duration)
  28.         elif char == "-":
  29.             tone = Sine(frequency).to_audio_segment(duration * 3)
  30.         elif char == " ":
  31.             tone = AudioSegment.silent(duration=duration * 3)
  32.         else:
  33.             continue
  34.         audio += tone + AudioSegment.silent(duration=duration)
  35.     return audio
  36. def save_audio(audio, file_path):
  37.     audio.export(file_path, format="wav")
  38. if __name__ == "__main__":
  39.     text = "Hello World"
  40.     morse_code = text_to_morse_code(text)
  41.     audio = generate_audio(morse_code)
  42.     save_audio(audio, "hello_world.wav")

运行结果

920133450115196998541ba2c2f6579.jpg

发表评论

访客

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