不同的声音播放模块不工作
Different sound playing modules not working
我为我妹妹制作了一个学习数学的程序,现在想添加声音。所以查看如何向我的程序添加声音并找到 winsound
模块。我写了这段代码:
import winsound
winsound.PlaySound("victory.wav", winsound.SND_FILENAME)
stopper = input("Input something to stop the program!")
但由于某些原因,它只播放默认的 windows 声音。 (Bliiiiiingg)
文件 victory.wav
与 python 脚本位于同一文件夹中。后来看到有人和我有同样的问题,他说加上全路径就解决了。所以我这样做了:
winsound.PlaySound(r"C:\Users\Nutzer\Desktop\gui\victory.wav", winsound.SND_FILENAME)
但是还是不行。所以我尝试了不同的添加路径的方法:
winsound.PlaySound("C:/Users/Nutzer/Desktop/gui/victory.wav", winsound.SND_FILENAME)
# and
winsound.PlaySound("C:\Users\Nutzer\Desktop\gui\victory.wav", winsound.SND_FILENAME)
还是不行。然后我决定切换模块,所以我安装了playsound
模块并编写了以下代码:
import playsound
playsound.playsound("victory.wav",block=True)
它说无法播放文件,这意味着它找到了文件。我们正在取得进展。
所以我将文件扩展名更改为 .mp3 并再次添加完整路径:
playsound._playsoundWin("C:\Users\Nutzer\Desktop\gui\victory.mp3",block=True)
现在它说的不一样了:
Error 277 for command:
open "C:\Users\Nutzer\Desktop\gui\victory.mp3"
Fehler beim Starten von MCI.
Error 305 for command:
close "C:\Users\Nutzer\Desktop\gui\victory.mp3"
Zusätzliche Zeichen nach einer Zeichenkette mit Anführungszeichen sind nicht erlaubt.
Failed to close the file: "C:\Users\Nutzer\Desktop\gui\victory.mp3"
Traceback (most recent call last):
File "C:\Users\Nutzer\Desktop\gui\wer_support.py", line 3, in <module>
playsound._playsoundWin("C:\Users\Nutzer\Desktop\gui\victory.mp3",block=True)
File "C:\Users\Nutzer\AppData\Local\Programs\Python\Python39\lib\site-packages\playsound.py", line 72, in _playsoundWin
winCommand(u'open {}'.format(sound))
File "C:\Users\Nutzer\AppData\Local\Programs\Python\Python39\lib\site-packages\playsound.py", line 64, in winCommand
raise PlaysoundException(exceptionMessage)
playsound.PlaysoundException:
Error 277 for command:
open "C:\Users\Nutzer\Desktop\gui\victory.mp3"
Fehler beim Starten von MCI.
翻译过来就是“Error starting MCI”。
然后我决定安装 pygame
并使用 mixer
库:
import pygame.mixer as mixyy
mixyy.init()
mixyy.music.load("victory.mp3")
mixyy.music.play(loops=0)
input = input("Press enter to stop the program.")
令人惊讶的是,这确实奏效了。但它导致编译后的文件大小从16MB增加到70MB,编译后的文件甚至打不开。
所以我打消了这个想法,找到了一个名为mp3play
的模块,并复制了示例代码,并为我调整了它:
import mp3play
filename = r'C:\Users\Nutzer\Desktop\gui\victory.mp3'
clip = mp3play.load(filename)
clip.play()
import time
time.sleep(min(30, clip.seconds()))
clip.stop()
现在是这样说的:
Traceback (most recent call last):
File "C:\Users\Nutzer\Desktop\gui\wer_support.py", line 1, in <module>
import mp3play
File "C:\Users\Nutzer\AppData\Local\Programs\Python\Python39\lib\site-packages\mp3play\__init__.py", line 4, in <module>
from .windows import AudioClip as _PlatformSpecificAudioClip
File "C:\Users\Nutzer\AppData\Local\Programs\Python\Python39\lib\site-packages\mp3play\windows.py", line 27
print 'Error %s for "%s": %s' % (str(err), txt, buf)
^
SyntaxError: invalid syntax
我没有发现语法有任何问题,因为我从字面上复制了他们的示例 documentation。
我似乎什么都做不了。
我也试过的东西:
- 使用不同的文件。
- 使用各种文件类型。
- 正在重新安装 windows。
- 正在试穿 linux。
- 正在重新启动我的计算机。
- 正在另一台计算机上尝试。
- 正在试穿 mac。
- 使用不同的 python 解释器。
- 使用不同的代码可视化工具(VSC,Pycharm,空闲)。
有人可以告诉我如何解决这个问题吗?
您实际上同时问了很多问题,每次专注于一个问题可能会更好。但是,由于许多问题是相关的,我将在这里尝试回答它们:
赢声
在我的系统中,winsound
似乎工作正常。以下代码对我有用:
import winsound
winsound.PlaySound('victory.wav', winsound.SND_FILENAME)
但是,音频文件必须是 winsound 模块支持的有效 WAVE 文件(不是 MP3 文件或其他音频格式)。如果不支持,它将播放系统默认声音(您将其描述为 Bliiiiiingg)。这可以通过传递 winsound.SND_NODEFAULT
标志来避免:
import winsound
winsound.PlaySound('victory.wav', winsound.SND_FILENAME | winsound.SND_NODEFAULT)
在这种情况下,当尝试播放无效的文件格式时,您将收到错误 RuntimeError: Failed to play sound
。
遗憾的是,错误信息没有说明问题的原因。将无效路径传递给不受支持的文件时,您将遇到相同的错误。但是,通常 Windows 应用程序确实支持正斜杠 ('/'
) 和反斜杠 ('\'
)。如有疑问,请暂时将文件复制到与您的脚本相同的目录,并完全删除路径的目录部分,这样您就可以确定问题所在。
注意WAV format是容器格式,支持不同的编码。可能并非所有 formats/encodings 都受支持,因此您只需要尝试哪个有效或无效。
播放声音
我也试过 playsound
,它对我的一些 WAV 和 MP3 文件有效,但对所有文件都无效。如果它不起作用,我会遇到以下一个或多个错误:
playsound.PlaysoundException:
Error 259 for command:
play sample.mp3 wait
The driver cannot recognize the specified command parameter.
playsound.PlaysoundException:
Error 263 for command:
open sample.mp3
The specified device is not open or is not recognized by MCI.
playsound.PlaysoundException:
Error 277 for command:
open "sample.mp3" alias playsound_0.9221509684918991
A problem occurred in initializing MCI.
GitHub 中有几个错误报告(请参阅问题 #36, #83, #113, #120 and #121)。 Stack Overflow 上也有关于此的问题:
- "A problem occurred in initializing MCI" playsound issues
- a problem occurred in initializing MCI python
- why python modules playsound is not working?
- Not able to play audio file in python
对我来说,playsound 似乎对某些文件格式有一些问题。可能的解决方案/work-arounds包括:
- 降级到 playsound 1.2.2 (
python -m pip install playsound==1.2.2
) -- 这在某处提到过,我注意到有些文件确实可以使用 1.2.2 播放而不能使用 1.3 播放。 0,但它仍然无法播放我的所有文件。
- 重新编码 MP3 文件,例如使用Audacity -- 这对我的文件不起作用。
- 以另一种格式保存文件(例如,将 MP3 转换为 WAV)-- 这对我的文件不起作用。
请注意,任意更改文件扩展名绝不是一个好主意。请确定文件的类型,并确保其具有正确的扩展名。将 WAV 文件重命名为“.mp3”或相反并不能神奇地使其可播放。
pygame
相同的 pygame
代码对我也有效。我不确定为什么 70 MB 是个问题,或者您使用什么框架来编译代码(我假设 py2exe
或类似的东西)。如果这确实是一个问题,您可能会问另一个问题。可能有减小尺寸的方法。
mp3play
pypi上的mp3play
module seems to be heavily outdated and not maintained anymore. Its website is dead, and the last release是2008年的,代码是用Python2.x写的,所以才会出现语法错误。 (语法错误不在你的代码中,而是在库中。)
TL;DR
winsound
适用于支持的文件类型(仅限 WAV)。
playsound
似乎只适用于某些 WAV 或 MP3 文件。
pygame
也可以正常工作。不确定为什么大小是个问题,但可能有解决方案。
mp3play
已过时,请勿使用。
- 不要随意更改文件扩展名。
我为我妹妹制作了一个学习数学的程序,现在想添加声音。所以查看如何向我的程序添加声音并找到 winsound
模块。我写了这段代码:
import winsound
winsound.PlaySound("victory.wav", winsound.SND_FILENAME)
stopper = input("Input something to stop the program!")
但由于某些原因,它只播放默认的 windows 声音。 (Bliiiiiingg)
文件 victory.wav
与 python 脚本位于同一文件夹中。后来看到有人和我有同样的问题,他说加上全路径就解决了。所以我这样做了:
winsound.PlaySound(r"C:\Users\Nutzer\Desktop\gui\victory.wav", winsound.SND_FILENAME)
但是还是不行。所以我尝试了不同的添加路径的方法:
winsound.PlaySound("C:/Users/Nutzer/Desktop/gui/victory.wav", winsound.SND_FILENAME)
# and
winsound.PlaySound("C:\Users\Nutzer\Desktop\gui\victory.wav", winsound.SND_FILENAME)
还是不行。然后我决定切换模块,所以我安装了playsound
模块并编写了以下代码:
import playsound
playsound.playsound("victory.wav",block=True)
它说无法播放文件,这意味着它找到了文件。我们正在取得进展。 所以我将文件扩展名更改为 .mp3 并再次添加完整路径:
playsound._playsoundWin("C:\Users\Nutzer\Desktop\gui\victory.mp3",block=True)
现在它说的不一样了:
Error 277 for command:
open "C:\Users\Nutzer\Desktop\gui\victory.mp3"
Fehler beim Starten von MCI.
Error 305 for command:
close "C:\Users\Nutzer\Desktop\gui\victory.mp3"
Zusätzliche Zeichen nach einer Zeichenkette mit Anführungszeichen sind nicht erlaubt.
Failed to close the file: "C:\Users\Nutzer\Desktop\gui\victory.mp3"
Traceback (most recent call last):
File "C:\Users\Nutzer\Desktop\gui\wer_support.py", line 3, in <module>
playsound._playsoundWin("C:\Users\Nutzer\Desktop\gui\victory.mp3",block=True)
File "C:\Users\Nutzer\AppData\Local\Programs\Python\Python39\lib\site-packages\playsound.py", line 72, in _playsoundWin
winCommand(u'open {}'.format(sound))
File "C:\Users\Nutzer\AppData\Local\Programs\Python\Python39\lib\site-packages\playsound.py", line 64, in winCommand
raise PlaysoundException(exceptionMessage)
playsound.PlaysoundException:
Error 277 for command:
open "C:\Users\Nutzer\Desktop\gui\victory.mp3"
Fehler beim Starten von MCI.
翻译过来就是“Error starting MCI”。
然后我决定安装 pygame
并使用 mixer
库:
import pygame.mixer as mixyy
mixyy.init()
mixyy.music.load("victory.mp3")
mixyy.music.play(loops=0)
input = input("Press enter to stop the program.")
令人惊讶的是,这确实奏效了。但它导致编译后的文件大小从16MB增加到70MB,编译后的文件甚至打不开。
所以我打消了这个想法,找到了一个名为mp3play
的模块,并复制了示例代码,并为我调整了它:
import mp3play
filename = r'C:\Users\Nutzer\Desktop\gui\victory.mp3'
clip = mp3play.load(filename)
clip.play()
import time
time.sleep(min(30, clip.seconds()))
clip.stop()
现在是这样说的:
Traceback (most recent call last):
File "C:\Users\Nutzer\Desktop\gui\wer_support.py", line 1, in <module>
import mp3play
File "C:\Users\Nutzer\AppData\Local\Programs\Python\Python39\lib\site-packages\mp3play\__init__.py", line 4, in <module>
from .windows import AudioClip as _PlatformSpecificAudioClip
File "C:\Users\Nutzer\AppData\Local\Programs\Python\Python39\lib\site-packages\mp3play\windows.py", line 27
print 'Error %s for "%s": %s' % (str(err), txt, buf)
^
SyntaxError: invalid syntax
我没有发现语法有任何问题,因为我从字面上复制了他们的示例 documentation。
我似乎什么都做不了。 我也试过的东西:
- 使用不同的文件。
- 使用各种文件类型。
- 正在重新安装 windows。
- 正在试穿 linux。
- 正在重新启动我的计算机。
- 正在另一台计算机上尝试。
- 正在试穿 mac。
- 使用不同的 python 解释器。
- 使用不同的代码可视化工具(VSC,Pycharm,空闲)。
有人可以告诉我如何解决这个问题吗?
您实际上同时问了很多问题,每次专注于一个问题可能会更好。但是,由于许多问题是相关的,我将在这里尝试回答它们:
赢声
在我的系统中,winsound
似乎工作正常。以下代码对我有用:
import winsound
winsound.PlaySound('victory.wav', winsound.SND_FILENAME)
但是,音频文件必须是 winsound 模块支持的有效 WAVE 文件(不是 MP3 文件或其他音频格式)。如果不支持,它将播放系统默认声音(您将其描述为 Bliiiiiingg)。这可以通过传递 winsound.SND_NODEFAULT
标志来避免:
import winsound
winsound.PlaySound('victory.wav', winsound.SND_FILENAME | winsound.SND_NODEFAULT)
在这种情况下,当尝试播放无效的文件格式时,您将收到错误 RuntimeError: Failed to play sound
。
遗憾的是,错误信息没有说明问题的原因。将无效路径传递给不受支持的文件时,您将遇到相同的错误。但是,通常 Windows 应用程序确实支持正斜杠 ('/'
) 和反斜杠 ('\'
)。如有疑问,请暂时将文件复制到与您的脚本相同的目录,并完全删除路径的目录部分,这样您就可以确定问题所在。
注意WAV format是容器格式,支持不同的编码。可能并非所有 formats/encodings 都受支持,因此您只需要尝试哪个有效或无效。
播放声音
我也试过 playsound
,它对我的一些 WAV 和 MP3 文件有效,但对所有文件都无效。如果它不起作用,我会遇到以下一个或多个错误:
playsound.PlaysoundException:
Error 259 for command:
play sample.mp3 wait
The driver cannot recognize the specified command parameter.
playsound.PlaysoundException:
Error 263 for command:
open sample.mp3
The specified device is not open or is not recognized by MCI.
playsound.PlaysoundException:
Error 277 for command:
open "sample.mp3" alias playsound_0.9221509684918991
A problem occurred in initializing MCI.
GitHub 中有几个错误报告(请参阅问题 #36, #83, #113, #120 and #121)。 Stack Overflow 上也有关于此的问题:
- "A problem occurred in initializing MCI" playsound issues
- a problem occurred in initializing MCI python
- why python modules playsound is not working?
- Not able to play audio file in python
对我来说,playsound 似乎对某些文件格式有一些问题。可能的解决方案/work-arounds包括:
- 降级到 playsound 1.2.2 (
python -m pip install playsound==1.2.2
) -- 这在某处提到过,我注意到有些文件确实可以使用 1.2.2 播放而不能使用 1.3 播放。 0,但它仍然无法播放我的所有文件。 - 重新编码 MP3 文件,例如使用Audacity -- 这对我的文件不起作用。
- 以另一种格式保存文件(例如,将 MP3 转换为 WAV)-- 这对我的文件不起作用。
请注意,任意更改文件扩展名绝不是一个好主意。请确定文件的类型,并确保其具有正确的扩展名。将 WAV 文件重命名为“.mp3”或相反并不能神奇地使其可播放。
pygame
相同的 pygame
代码对我也有效。我不确定为什么 70 MB 是个问题,或者您使用什么框架来编译代码(我假设 py2exe
或类似的东西)。如果这确实是一个问题,您可能会问另一个问题。可能有减小尺寸的方法。
mp3play
pypi上的mp3play
module seems to be heavily outdated and not maintained anymore. Its website is dead, and the last release是2008年的,代码是用Python2.x写的,所以才会出现语法错误。 (语法错误不在你的代码中,而是在库中。)
TL;DR
winsound
适用于支持的文件类型(仅限 WAV)。playsound
似乎只适用于某些 WAV 或 MP3 文件。pygame
也可以正常工作。不确定为什么大小是个问题,但可能有解决方案。mp3play
已过时,请勿使用。- 不要随意更改文件扩展名。