RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1338892
Accepted
DaYa
DaYa
Asked:2022-03-16 05:48:08 +0000 UTC2022-03-16 05:48:08 +0000 UTC 2022-03-16 05:48:08 +0000 UTC

如何在 QtMultimedia 下做所有事情?

  • 772

我写mp3-плеера了一个PtQt5代码用它pygame-mixer来播放音乐。
我试图阅读文档、代码示例,但我只是不明白我需要更改什么。

一般来说,我需要将播放代码从 ​​to 替换pygame-mixer(QMediaPlayer 请说清楚详细)。

所有代码 - https://pastebin.com/BgXYYM68

带有播放功能所在类的代码 - https://pastebin.com/TMpTPGeP

python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    S. Nick
    2022-03-16T06:52:33Z2022-03-16T06:52:33Z

    请用。如果有什么具体的不清楚,请询问。

    import sys
    import os
    import configparser
    import random
    import time
    
    from PyQt5.Qt    import *
    from PyQt5.QtMultimedia import *
    
    
    class MyMusicApp(QWidget):
        def __init__(self):
            super().__init__()
            self.initUI()
            self.Play_Pause, self.Preview_Next, self.mp3_url = True, False, ''
            
        def initUI(self):
            self.SongList = []
            self.player   = QMediaPlayer()
    
            self.lb1 = QLabel('00:00', alignment=Qt.AlignCenter)
            self.lb2 = QLabel('00:00', alignment=Qt.AlignCenter)
            self.qsl = QSlider(Qt.Horizontal, self)  
            self.qsl.sliderMoved[int].connect(self.SetPlayPosition)
            self.btn_play = QPushButton('Воспроизведение', self, clicked=self.MusicPlay)       
            self.btn_preview = QPushButton('Предыдущая песня', self, clicked=self.MusicPreview)   
            self.btn_next = QPushButton('Следующая песня',self, clicked=self.MusicNext)
            self.btn_openmusic = QPushButton('Выберите папку с музыкой', self, clicked=self.OpenMusic)        
            self.lw = QListWidget(itemDoubleClicked=self.MouseDoubleClick) 
            
            if os.path.exists('Setting.ini'):
                config = configparser.ConfigParser()
                config.read("Setting.ini")
                PATH   = config.get('Music', 'PATH')
                self.AddListItems(PATH)
            # Создайте раскрывающийся список, чтобы изменить режим воспроизведения музыки
            self.cmb = QComboBox()  
            self.cmb.addItem('Последовательное воспроизведение')
            self.cmb.addItem('Oдин цикл')
            self.cmb.addItem('Случайная игра')
    
            self.timer = QTimer(self)
            self.timer.timeout.connect(self.PlayMode)
            self.timer.start(1000)
    
            grid = QGridLayout(self)   
            grid.addWidget(self.lw,  0, 0, 1, 0)
            grid.addWidget(self.lb1, 1, 0, 1, 1)
            grid.addWidget(self.qsl, 1, 1, 1, 1)
            grid.addWidget(self.lb2, 1, 2, 1, 1)
            grid.addWidget(self.btn_preview,  2, 0, 1, 1)
            grid.addWidget(self.btn_play,     2, 1, 1, 1)
            grid.addWidget(self.btn_next,     2, 2, 1, 1)
            grid.addWidget(self.cmb,          3, 0, 1, 3)
            grid.addWidget(self.btn_openmusic,4, 0, 1, 3)
    
        def SetPlayPosition(self):
            self.player.setPosition(self.qsl.value())
    
        def PlayMode(self):
            if self.Play_Pause==False:
                self.qsl.setMinimum(0)
                self.qsl.setMaximum(self.player.duration())
                self.qsl.setValue(self.qsl.value() + 1000)
            self.lb1.setText(time.strftime('%M:%S',time.localtime(self.player.position()/1000)))
            self.lb2.setText(time.strftime('%M:%S', time.localtime(self.player.duration() / 1000)))
            
            if self.player.position()==self.player.duration() and self.player.duration()!=0 and self.cmb.currentIndex()==0 and self.Play_Pause==False:
                if self.lw.count() == 0:
                    return
                self.MusicNext()
            elif self.player.position()==self.player.duration() and self.player.duration()!=0 and self.cmb.currentIndex()==1 and self.Play_Pause==False:
                if self.lw.count() == 0:
                    return
                self.Preview_Next = True
                self.mp3_url = self.SongList[self.lw.currentRow()][1]
                self.player.setMedia(QMediaContent(QUrl(self.mp3_url)))
                self.qsl.setValue(0)
                self.MusicPlay()
                self.Preview_Next = False
            elif self.player.position()==self.player.duration() and self.player.duration()!=0 and self.cmb.currentIndex()==2 and self.Play_Pause==False:
                if self.lw.count() == 0:
                    return
                self.Preview_Next = True
                rand=random.randint(0, self.lw.count() - 1)
                self.lw.setCurrentRow(rand)
                self.mp3_url = self.SongList[rand][1]
                self.player.setMedia(QMediaContent(QUrl(self.mp3_url)))
                self.qsl.setValue(0)
                self.MusicPlay()
                self.Preview_Next = False
    
        def OpenMusic(self):
            directory = QFileDialog.getExistingDirectory(
                            self, 
                            "Выбрать папку с музыкой", 
                            os.getcwd(), 
                            QFileDialog.ShowDirsOnly
            )  
            if directory:                          
                self.AddListItems(directory)
                self.mp3_url = ''
                self.player.setMedia(QMediaContent(QUrl(self.mp3_url)))
                self.lb1.setText('00:00')
                self.lb2.setText('00:00')
                self.qsl.setSliderPosition(0)
                self.Play_Pause = True
    
        def AddListItems(self, directory):
            self.lw.clear()
            # Запишите музыкальный каталог в файл конфигурации 
            # для следующего удобного использования
            config = configparser.ConfigParser()
            config.read("Setting.ini")
            if not os.path.exists('Setting.ini'):
                config.add_section("Music")
            config.set("Music", "PATH", directory)
            config.write(open("Setting.ini", "w"))
            
            for songname in os.listdir(directory):
                if '.mp3' in songname:
                    Song=[songname,(directory+'\\'+songname).replace('\\','/')]
                    self.SongList.append(Song)
                    self.lw.addItem(Song[0])
            self.lw.setCurrentRow(0)
            if not self.SongList:                 
                self.mp3_url = self.SongList[self.lw.currentRow()][1]
            
        # Дважды щелкните, чтобы воспроизвести музыку
        def MouseDoubleClick(self):
            self.qsl.setValue(0)
            self.Preview_Next = True
            self.mp3_url = self.SongList[self.lw.currentRow()][1]
            self.player.setMedia(QMediaContent(QUrl(self.mp3_url)))
            self.MusicPlay()
            self.Preview_Next = False
    
        def Message(self):
            QMessageBox.about(self,"Сообщение", "В настоящее время нет музыки.")
    
        # Воспроизведение и пауза
        def MusicPlay(self):
            if self.lw.count() == 0:
                self.Message()
                return
                
            if self.player.isAudioAvailable()==False:
                self.mp3_url = self.SongList[self.lw.currentRow()][1]
                self.player.setMedia(QMediaContent(QUrl(self.mp3_url)))
            
            if self.Play_Pause==True or self.Preview_Next==True:
                self.player.play()
                self.Play_Pause=False
                self.btn_play.setText('Пауза')
            elif self.Play_Pause==False and self.Preview_Next==False:
                self.player.pause()
                self.Play_Pause=True
                self.btn_play.setText('Воспроизведение')
    
        # Предыдущая песня
        def MusicPreview(self):
            self.qsl.setValue(0)
            if self.lw.count()==0:
                self.Message()
                return
                
            if self.lw.currentRow()!=0:
                self.lw.setCurrentRow(self.lw.currentRow()-1)
                self.Preview_Next = True
                self.mp3_url = self.SongList[self.lw.currentRow()][1]
                self.player.setMedia(QMediaContent(QUrl(self.mp3_url)))
                self.MusicPlay()
                self.Preview_Next = False
            else:
                self.lw.setCurrentRow(self.lw.count() - 1)
                self.Preview_Next = True
                self.mp3_url = self.SongList[self.lw.currentRow()][1]
                self.player.setMedia(QMediaContent(QUrl(self.mp3_url)))
                self.MusicPlay()
                self.Preview_Next = False
    
        # Следующая песня
        def MusicNext(self):
            self.qsl.setValue(0)
            if self.lw.count() == 0:
                self.Message()
                return
                
            if self.lw.currentRow() != self.lw.count()-1:
                self.lw.setCurrentRow(self.lw.currentRow()+1)
                self.Preview_Next = True
                self.mp3_url = self.SongList[self.lw.currentRow()][1]
                self.player.setMedia(QMediaContent(QUrl(self.mp3_url)))
                self.MusicPlay()
                self.Preview_Next = False
            else:
                self.lw.setCurrentRow(0)
                self.Preview_Next = True
                self.mp3_url = self.SongList[self.lw.currentRow()][1]
                self.player.setMedia(QMediaContent(QUrl(self.mp3_url)))
                self.MusicPlay()
                self.Preview_Next = False
    
    
    if __name__=='__main__':
        app = QApplication(sys.argv)
        app.setStyle("fusion")
        w = MyMusicApp()
        icon = QIcon()
        icon.addPixmap(QPixmap("myicon.ico"), QIcon.Normal, QIcon.Off)
        w.setWindowIcon(icon)
        w.setWindowTitle('Музыкальный проигрыватель.')
        w.show()
        sys.exit(app.exec_())
    

    在此处输入图像描述

    • 1

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5