为什么是温声.播放声音不播放指定文件中的声音?



我做了一个摩尔斯电码转换器,工作正常。然后我想发出与编码消息相对应的哔哔声。我尝试了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_')}).

相关内容

  • 没有找到相关文章

最新更新