为什么pygame在函数内部不起作用?

时间:2017-09-27 21:54:24

标签: python pygame wav

我已经在某些实例上添加了一个wav文件,但是当我将代码放在一个函数中并在其他地方调用时它不起作用。当我改变缩进时。我试过mp3,但同样的问题发生了。

此代码正常运行:

pygame.mixer.init()
pygame.mixer.music.load("../audio/Humi.wav")
pygame.mixer.music.play()
while pygame.mixer.music.get_busy() == True:
    continue           

此代码不起作用:

def func():
   pygame.mixer.init()
   pygame.mixer.music.load("../audio/Humi.wav")
   pygame.mixer.music.play()
   while pygame.mixer.music.get_busy() == True:
      continue

以下是我收到的错误消息:

File "D:\GitANN.py", line 34, in Predicions
  pygame.mixer.music.load("../audio/Humi.wav")
pygame.error: Couldn't open '../audi/Humi.wav'

1 个答案:

答案 0 :(得分:0)

抱歉,我建议你在我的评论中做到获得音频文件的绝对路径是行不通的。我错过了在.wav文件的相对路径上有两个点..前缀的事实。

这个想法的核心 - 获取并使用音频文件的绝对路径 - 仍然是可行的。它只需要做一点点不同(实际上有点容易)。

这在我测试它时起作用(波形文件的路径是否被函数内的pygame.mixer.music.load()调用使用)。

注意:不是在函数中引用全局变量,而是在函数中添加路径参数,并将字符串作为参数传递给它。在函数之外只调用一次pygame.mixer.init()可能更好,而不是每次调用它。

import os
import pygame

def func():
   pygame.mixer.init()
   pygame.mixer.music.load(wavpath)  # Uses global variable.
   pygame.mixer.music.play()
   while pygame.mixer.music.get_busy():
      pass

wavpath = os.path.abspath('../audio/Humi.wav')
func()