小能豆

Python 脚本执行但无法听到正在播放的声音

py

我正在使用 libvlc python 绑定播放音乐文件。我的代码如下:

import vlc
instance = vlc.Instance()

#Create a MediaPlayer with the default instance
player = instance.media_player_new()

#Load the media file
media = instance.media_new('01.DONT CARE.mp3')

#Add the media to the player
player.set_media(media)

try:
    player.play()
except Exception, e:
    raise e

脚本成功执行,但我听不到任何声音。如果逐行执行代码,则它工作正常,我能够听到声音。您知道可能出了什么问题吗?


阅读 14

收藏
2024-12-09

共1个答案

小能豆

你遇到的问题似乎与 vlc.MediaPlayerplay() 方法和音频输出流的管理有关。通常,vlc.MediaPlayer.play() 会在调用时直接开始播放媒体,但可能会因为主线程退出或没有等待播放器完成初始化而导致没有声音输出。通过逐行执行时,它能正常工作,可能是因为主线程在调用 play() 后还继续执行,确保音频播放过程没有被中断。

有几个可能的原因和解决方法:

1. 主线程退出太快

vlc.MediaPlayer.play() 通常会异步启动音频播放,如果你没有等待播放器完成初始化,程序会在 play() 之前就退出,导致声音没有机会播放。你可以让主线程等待音频播放完成。

你可以通过 player.get_state() 来检查播放器的状态,确保它在播放时不会退出。

解决方法:等待播放器初始化

你可以使用一个简单的 while 循环来等待播放器开始播放。这样,主线程不会在播放器启动之前就结束。

import vlc
import time

instance = vlc.Instance()

# Create a MediaPlayer with the default instance
player = instance.media_player_new()

# Load the media file
media = instance.media_new('01.DONT CARE.mp3')

# Add the media to the player
player.set_media(media)

# Start playing the media
player.play()

# Wait until the player is initialized and playing
while player.get_state() != vlc.State.Playing:
    time.sleep(0.1)

# Keep the script running to allow music to play
try:
    while True:
        time.sleep(1)  # Keep the program running
except KeyboardInterrupt:
    print("Playback stopped.")

2. 可能的音频输出设备问题

有时,libvlc 在后台无法正确选择音频输出设备,尤其是在没有 GUI 环境的系统上运行时。你可以尝试显式设置音频输出模块,例如 alsapulse(具体取决于你的系统)。

你可以在 vlc.Instance() 中传递参数来强制使用特定的音频输出设备。

3. 播放器状态和错误检查

确保播放器没有报告错误或其他异常状态。你可以通过 get_state()get_media() 来检查播放器的状态。

总结

  1. 使用 while 循环确保播放器在播放之前没有退出。
  2. 确保你的音频输出设备配置正确。
  3. 如果你使用的是 GUI 窗口系统,请检查系统的音量设置或设备问题。

尝试这些方法之后,你的播放器应该能够在后台正常播放音乐而不会有问题。

2024-12-09