首页 > 解决方案 > VLC模块在if语句中不播放歌曲

问题描述

我尝试编写代码来询问用户想要播放的歌曲(在显示的选项列表中),但问题是 vlc 模块不想播放歌曲。但是,我在没有 if 语句的情况下尝试过它并且它有效。这是我第一次编码,所以如果代码看起来混乱,我很抱歉:

from tinytag import TinyTag as chimera
import vlc

def choice():
    try:
        print('music1')
        print('music2')
        print('music3')
        music = int(input('choose the song you like\n'))
        info(music)
        musical(music)
    except ValueError:
        choice()

def info(music):
    try:
        if music == 1:
            tag = chimera.get('C:/Users/user/music/music1.ogg')
            print('song name %s' % tag.title )
            print('Duration %f' % tag.duration)
        elif music == 2:
            tag = chimera.get('C:/Users/user/music/music2.m4a')
            print('song name %s' % tag.title)
            print('Duration %f' % tag.duration)
        elif music == 3:
            tag = chimera.get('C:/Users/user/music3.m4a')
            print('song name %s' % tag.title)
            print('Duration %f' % tag.duration)
        else:
            print('invalid input')
            choice()
    except SyntaxError:
      pass

def musical(music):
    playing = input('do you want to play the music?\n')
    if music == 1 and playing == 'yes':
        player1 = vlc.MediaPlayer('C:/Users/user/music/music1.ogg')
        player1.play()
    elif music == 2 and playing == 'yes':
        player2 = vlc.MediaPlayer('C:/Users/user/music/music2.m4a')
        player2.play()
    elif music == 3 and playing == 'yes':
        player3 = vlc.MediaPlayer('C:/Users/user/music/music3.m4a')
        player3.play()
choice()

标签: pythonvlc

解决方案


您需要在程序处于活动状态时保持程序运行vlc
我已经稍微修改了您的代码,出于我的目的,我已经删除了tinytag参考。

import vlc
import time

def choice():
    try:
        print('music1')
        print('music2')
        print('music3')
        music = int(input('choose the song you like( 1-3 )\n'))
        if music < 1 or music > 3:
            raise ValueError
        musical(music)
    except ValueError:
        print("Input error\n")
        choice()

def musical(music):
    if music == 1:
        player = vlc.MediaPlayer('C:/Users/user/music/music1.ogg')
    elif music == 2:
        player = vlc.MediaPlayer('C:/Users/user/music/music2.ogg')
    elif music == 3:
        player = vlc.MediaPlayer('C:/Users/user/music/music3.ogg')
    player.play()
    playing = set([1,2,3,4])
    time.sleep(0.1)
    while True:
        state = player.get_state()
        if state not in playing:
            break
        time.sleep(1)

choice()

请注意,vlc 播放器state值是:

0: 'NothingSpecial',
1: 'Opening',
2: 'Buffering',
3: 'Playing',
4: 'Paused',
5: 'Stopped',
6: 'Ended',
7: 'Error',

推荐阅读