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

Why pygame doesn't work inside functions?

我已经添加了一个 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'

抱歉,我在评论中建议您执行的获取音频文件绝对路径的操作无效。我错过了一个事实,即您在 .wav 文件的相对路径上有一个两点 .. 前缀。

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

这在我测试时有效(wave 文件的路径是否被函数内部的 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()