当 python 文件与声音文件位于不同的目录时,如何播放声音?

Posted

技术标签:

【中文标题】当 python 文件与声音文件位于不同的目录时,如何播放声音?【英文标题】:How do you play sounds when the python file is in a different directory as the sound file? 【发布时间】:2017-10-30 13:35:11 【问题描述】:

所以我正在制作一个基于文本的游戏,完成后,我想将最终产品编译为 .exe 格式,这样很容易分享(我打算使用 cx_freeze) 现在,我想为游戏添加一些背景音乐,下面的代码可以正常工作如果且仅当 python 文件在桌面上,我正在寻找的“sound.wav”也是如此在后台执行sound.wav的方法,无论它与python文件在同一目录还是不同目录,谢谢

import winsound
winsound.PlaySound('sound.wav', winsound.SND_FILENAME)

【问题讨论】:

或许使用绝对路径? @DeepSpace 怎么样?我对这门语言还很陌生 '/this/is/absolute/path/to/sound.wav' en.wikipedia.org/wiki/… @DeepSpace 不起作用 :( 有什么建议吗? 什么不起作用?你试过什么? 【参考方案1】:

使用os 包生成音乐文件的绝对路径,以确保它始终正常工作。

例如,如果您的项目结构是

root
    src
        your_python_file.py
    assets
        sound.wav

所以你可以通过

生成sound.wav的绝对路径
import os
# __file__ means the path of the current python script
root_dir = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
bg_path = os.path.join(root_dir, "assets", "sound.wav")

【讨论】:

【参考方案2】:

假设您有一个名为 foo 的子文件夹和另一个名为 subfoo 的子文件夹

如果您想进入foo 子文件夹,请使用foo/sound.wav,如果您想进入第二个子文件夹subfoo,请使用foo/subfoo/sound.wav

如果你想查字典,可以使用./。例如,如果您的声音位于 foo 并且您在 subfoo 中编写脚本,则可以使用 ./sound.wav 访问它以逐个向上使用 ./ 再次使用。

否则,您可以使用从C: 或您希望访问的驱动器开始的“绝对”文件路径。例如,如果您的文件文件名位于 Desktop 中,您可以使用:

C:/users/username/Desktop/foo/subfoo/sound.wav

【讨论】:

以上是关于当 python 文件与声音文件位于不同的目录时,如何播放声音?的主要内容,如果未能解决你的问题,请参考以下文章

如何可靠地打开与当前正在运行的脚本位于同一目录中的文件

当文件位于同一目录并调用脚本时,导入不起作用

C#中的声音,将音频文件放在哪里?

JBoss Tools部署错误:这可能是由于服务器的临时部署目录位于与最终目标不同的文件系统上

使用 AVAudioPlayer 播放声音时出现问题?

当文件位于项目根目录之外时,Vue 过滤器未解析