我做了一个摩尔斯电码转换器,工作正常。然后我想发出与编码消息相对应的哔哔声。我尝试了winsound
模块。但它没有播放任何声音。我从 在线摩尔斯电码翻译器。如果通过音频播放器播放,声音工作正常。但它不适用于PlaySound()
.
from winsound import PlaySound
import pyperclip as pc
morse_code_dictionary = {'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': '--..',
'1': '.----', '2': '..---', '3': '...--',
'4': '....-', '5': '.....', '6': '-....',
'7': '--...', '8': '---..', '9': '----.',
'0': '-----', ', ': '--..--', '.': '.-.-.-',
'?': '..--..', '/': '-..-.', '-': '-....-',
'(': '-.--.', ')': '-.--.-', ' ': '/', '': ''}
morse_code_to_alphabet_dictionary = {
x: y for y, x in morse_code_dictionary.items()}
md, mad = morse_code_dictionary, morse_code_to_alphabet_dictionary
def valid_morse(message):
char_code_list = message.split(" ")
return all(char_code in mad for char_code in char_code_list)
def encode():
text = input("Please input your text here.n=")
result = ""
try:
for char in text.upper():
result += md[char] + " "
except KeyError:
result = "invalid charecter input!!!"
return result
def decode():
code = input("Enter your code here.n=")
result = ""
if not valid_morse(code):
result = "Your code was not valid or not in my knowladge. Please try again!!!"
for single_char in code.split(" "):
result += mad[single_char]
return result.capitalize()
while True:
ask = input(
"Do you want to encode or decode?nTo encode press 1nTo decode press 2n=")
if ask.isdigit():
ask = int(ask)
if ask not in [1, 2]:
print("Invalid inpput!!!nTry Again!!!")
continue
elif ask == 1:
result = encode()
elif ask == 2:
result = decode()
break
print(result)
print("Result copied in ClipBoard")
pc.copy(result)
path = "*/"
for i in result:
if i == ".":
PlaySound(path+"morse_dot.ogg", 3)
elif i == "-":
PlaySound(path + "morse_dash.ogg", 3)
elif i == "/":
PlaySound(path + "morse_dash.ogg", 3)
input("Press Enter To Exit()")
您传递了3
作为PlaySound
的标志参数,这相当于SND_ASYNC | SND_NODEFAULT
.(1)
这种标志组合在您的情况下没有意义。
-
通过
SND_NODEFAULT
您告诉PlaySound
如果播放声音文件失败,则省略默认声音。这很糟糕,因为您根本不会注意到播放任何声音是否有效。 -
您的情况不需要
SND_ASYNC
。
由于您传递的第一个参数是文件名,因此您必须使用标志SND_FILENAME
.
在最简单的情况下,您应该能够使用PlaySound(path+"morse_dot.ogg", winsound.SND_FILENAME)
(在顶部添加import winsound
后)。
如果这会播放默认的"哔哔"声,那么您就知道winsound
能够播放声音,但它无法播放您指定的文件中的声音。
这可能失败的一个原因是*/morse_dot.ogg
不是有效的文件路径。你是说./morse_dot.ogg
吗?另一个原因可能是文档指出PlaySound
播放 WAV 文件,但您指定了.ogg
文件。
(1)文档中未列出标志的数值,但您可以使用一行代码轻松获取它们:import winsound; print({k: v for k, v in vars(winsound).items() if k.startswith('SND_')})
.