音频与视频
QSound
1 import sys 2 from PyQt5.QtMultimedia import QSound 3 from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout 4 5 class Demo(QWidget): 6 def __init__(self): 7 super(Demo, self).__init__() 8 self.sound = QSound('D:\ss\ssss\弯弯的月亮.wav') #实例化一个QSound对象 9 self.sound.setLoops(QSound.Infinite) # 设置播放次数 10 #QSound.Infinite 参数让声音无限循环播放,传入相应的正整数会播放相应的次数 11 12 self.play_btn = QPushButton('播放', self) 13 self.stop_btn = QPushButton('停', self) 14 self.play_btn.clicked.connect(self.sound.play) #播放 15 self.stop_btn.clicked.connect(self.sound.stop) #停止 16 self.btn=QPushButton('测试', self) 17 self.btn.clicked.connect(self.cesi) 18 19 self.h_layout = QHBoxLayout() 20 self.h_layout.addWidget(self.play_btn) 21 self.h_layout.addWidget(self.stop_btn) 22 self.h_layout.addWidget(self.btn) 23 self.setLayout(self.h_layout) 24 25 def cesi(self): 26 print(self.sound.isFinished()) #声音播放结束没有。True播放结束 27 28 29 if __name__ == '__main__': 30 app = QApplication(sys.argv) 31 demo = Demo() 32 demo.show() 33 sys.exit(app.exec_())
QSoundEffect
可以用来播放无压缩的音频文件(典型的是wav文件),不过我们可以通过这个类以低延迟的方式来播放音频文件,而且可以对文件进行更精细化的操作,该类非常适合用来播放交互音效,如弹出框的提示音,游戏音效等
1 import sys 2 from PyQt5.QtCore import Qt, QUrl 3 from PyQt5.QtMultimedia import QSoundEffect 4 from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QSlider, QCheckBox, QHBoxLayout, QVBoxLayout 5 6 class Demo(QWidget): 7 def __init__(self): 8 super(Demo, self).__init__() 9 self.sound_effect = QSoundEffect(self) #实例化QSoundEffect类 10 self.sound_effect.setSource(QUrl.fromLocalFile('D:\ss\ssss\确定.wav')) # 设置音频 11 self.sound_effect.setVolume(1.0) # 设置音量大小,参数为浮点型数值。1.0代表全音量播放,0.0代表静音 12 self.sound_effect.setLoopCount(2) # 设置播放次数 13 14 self.play_btn = QPushButton('播放', self) 15 self.cesi_btn = QPushButton('测试', self) 16 self.play_btn.clicked.connect(self.sound_effect.play) 17 #self.sound_effect.play() 播放声音 18 19 self.cesi_btn.clicked.connect(self.func) 20 21 self.stop_btn = QPushButton('停', self) 22 self.stop_btn.clicked.connect(self.sound_effect.stop) 23 #self.sound_effect.stop() 停 24 25 self.slider = QSlider(Qt.Horizontal, self) #实例化一个水平滑动条 26 self.slider.setRange(0, 10) 27 self.slider.setValue(10) 28 self.slider.valueChanged.connect(self.set_volume_func) 29 30 self.checkbox = QCheckBox('Mute', self) 31 self.checkbox.stateChanged.connect(self.mute_func) 32 33 self.h_layout = QHBoxLayout() 34 self.v_layout = QVBoxLayout() 35 self.h_layout.addWidget(self.play_btn) 36 self.h_layout.addWidget(self.stop_btn) 37 self.h_layout.addWidget(self.cesi_btn) 38 self.h_layout.addWidget(self.checkbox) 39 self.v_layout.addWidget(self.slider) 40 self.v_layout.addLayout(self.h_layout) 41 self.setLayout(self.v_layout) 42 43 self.sound_effect.playingChanged.connect(lambda :print('正在播放')) 44 #音频开始播放时发出信号。播放一次发出一次 45 self.sound_effect.volumeChanged.connect(lambda: print('音量改变')) 46 #音量改变时发出信号 47 self.sound_effect.mutedChanged.connect(lambda: print('静音状态改变')) 48 #静音状态改变时发出信号 49 self.sound_effect.loopCountChanged.connect(lambda: print('循环次数改变了')) 50 #循环次数改变时发出信号 51 self.sound_effect.loopsRemainingChanged.connect(lambda: print('剩余循环次数变了')) 52 #剩余循环次数改变时发出信号 53 #self.sound_effect.loadedChanged.connect(lambda: print('开始装载')) 54 #开始装载时发出信号 55 #self.sound_effect.statusChanged.connect(lambda: print('????')) 56 self.sound_effect.sourceChanged.connect(lambda: print('音频源改变')) 57 #音频源改变时发出信号 58 59 #categoryChanged ???? 60 61 62 def func(self): 63 #s=self.sound_effect.Status #???? 64 #s=self.sound_effect.isMuted() #是否静音 65 #s = self.sound_effect.isPlaying() #是否正在播放 66 #s = self.sound_effect.loopCount() #返回循环次数 67 #s = self.sound_effect.loopsRemaining()# 返回剩余的播放次数 68 self.sound_effect.setSource(QUrl.fromLocalFile('D:\ss\ssss\弯弯的月亮.wav')) # 设置音频 69 70 71 def set_volume_func(self): 72 self.sound_effect.setVolume(self.slider.value() / 10) 73 74 def mute_func(self): 75 if self.sound_effect.isMuted(): 76 #self.sound_effect.isMuted() 是否静音.True已经静音 77 self.sound_effect.setMuted(False) #设置非静音 78 else: 79 self.sound_effect.setMuted(True) #设置静音 80 81 if __name__ == '__main__': 82 app = QApplication(sys.argv) 83 demo = Demo() 84 demo.show() 85 sys.exit(app.exec_())
QMediaPlayer
QMediaPlayer是一个高层次的媒体播放器类,它非常强大,用它我们既可以播放音频,也可以播放视频
播放一个音频:
1 import sys 2 from PyQt5.QtCore import QUrl 3 from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent 4 from PyQt5.QtWidgets import QApplication, QWidget 5 6 class Demo(QWidget): 7 def __init__(self): 8 super(Demo, self).__init__() 9 self.player = QMediaPlayer(self) # 实例化一个媒体播放器 10 self.media_content = QMediaContent(QUrl.fromLocalFile('D:\ss\ssss\弯弯的月亮.mp3')) 11 #实例化一个媒体源 12 # self.player.setMedia(QMediaContent(QUrl('http://example.com/music.mp3'))) 13 self.player.setMedia(self.media_content) # 给播放器设置媒体源 14 self.player.setVolume(80) # 设置音量。100为默认值(最高音量),传入0相当于静音 15 self.player.play() #播放 16 17 if __name__ == '__main__': 18 app = QApplication(sys.argv) 19 demo = Demo() 20 demo.show() 21 sys.exit(app.exec_())
播放音频列表:
1 import sys 2 from PyQt5.QtCore import QUrl 3 from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent, QMediaPlaylist 4 from PyQt5.QtWidgets import QApplication, QWidget 5 6 class Demo(QWidget): 7 def __init__(self): 8 super(Demo, self).__init__() 9 self.playlist = QMediaPlaylist(self) # 实例化一个播放列表 10 self.player = QMediaPlayer(self) #实例化一个播放器 11 self.player.setPlaylist(self.playlist) #给播放器设置播放列表 12 13 self.playlist.addMedia(QMediaContent(QUrl.fromLocalFile(r'C:\Users\ming\Desktop\aa\音乐\陈百强 - 偏偏喜欢你.mp3'))) 14 #给播放列表添加媒体源 15 self.playlist.addMedia(QMediaContent(QUrl.fromLocalFile(r'C:\Users\ming\Desktop\aa\音乐\凤凰传奇 - 月亮之上.mp3'))) 16 self.playlist.addMedia(QMediaContent(QUrl.fromLocalFile(r'C:\Users\ming\Desktop\aa\音乐\饶天亮 - 做你的爱人.mp3'))) 17 self.playlist.setPlaybackMode(QMediaPlaylist.Loop) #设置播放模式 18 #QMediaPlaylist.CurrentItemOnce=0 当前内容播放一次 19 #QMediaPlaylist.CurrentItemInLoop=1 单曲循环 20 #QMediaPlaylist.Sequential=2 顺序播放 21 #QMediaPlaylist.Loop=3 列表循环 22 #QMediaPlaylist.Random=4 随机播放 23 self.playlist.setCurrentIndex(2) # 设置当前要进行播放文件,传入2代表播放第三个文件 24 25 self.player.setVolume(80) #设置音量 26 self.player.play() #播放 27 28 if __name__ == '__main__': 29 app = QApplication(sys.argv) 30 demo = Demo() 31 demo.show() 32 sys.exit(app.exec_())
播放视频文件:
播放视频列表:
1 import sys 2 from PyQt5.QtCore import QUrl 3 from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent, QMediaPlaylist 4 from PyQt5.QtMultimediaWidgets import QVideoWidget 5 from PyQt5.QtWidgets import QApplication, QWidget 6 #注意播放视频还需要安装视频解码器哦 7 8 class Demo(QWidget): 9 def __init__(self): 10 super(Demo, self).__init__() 11 self.playlist = QMediaPlaylist(self) #实例化一个播放列表 12 self.video_widget = QVideoWidget(self) #实例化一个视频显示窗口 13 self.video_widget.resize(self.width(), self.height())#设置视频显示窗口的大小 14 15 self.player = QMediaPlayer(self) #实例化一个播放器 16 self.player.setPlaylist(self.playlist) #给播放器设置播放列表 17 self.player.setVideoOutput(self.video_widget) # 设置播放设备。播放设备是视频显示窗口 18 19 self.playlist.addMedia(QMediaContent(QUrl.fromLocalFile(r'D:/ss/ssss/images/video1.mp4'))) 20 # 给播放列表添加视频源 21 self.playlist.addMedia(QMediaContent(QUrl.fromLocalFile(r'D:/ss/ssss/images/video2.mp4'))) 22 self.playlist.addMedia(QMediaContent(QUrl.fromLocalFile(r'D:/ss/ssss/images/video3.mp4'))) 23 self.playlist.setPlaybackMode(QMediaPlaylist.Loop) #设置播放模式 24 # QMediaPlaylist.CurrentItemOnce=0 当前内容播放一次 25 #QMediaPlaylist.CurrentItemInLoop=1 单曲循环 26 #QMediaPlaylist.Sequential=2 顺序播放 27 # QMediaPlaylist.Loop=3 列表循环 28 # QMediaPlaylist.Random=4 随机播放 29 self.playlist.setCurrentIndex(0) # 设置当前要进行播放文件,传入0代表播放第1个文件 30 31 self.player.setVolume(80) #设置音量 32 self.player.play() #播放 33 34 if __name__ == '__main__': 35 app = QApplication(sys.argv) 36 demo = Demo() 37 demo.show() 38 sys.exit(app.exec_())
播放一个视频:
1 import sys 2 from PyQt5.QtCore import QUrl 3 from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent 4 from PyQt5.QtMultimediaWidgets import QVideoWidget 5 from PyQt5.QtWidgets import QApplication, QWidget 6 #注意播放视频还需要安装视频解码器哦 7 8 class Demo(QWidget): 9 def __init__(self): 10 super(Demo, self).__init__() 11 self.video_widget = QVideoWidget(self) #实例化一个视频显示窗口 12 self.video_widget.resize(self.width(), self.height())#设置视频窗口的大小 13 14 self.player = QMediaPlayer(self) #实例化一个播放器 15 self.player.setVideoOutput(self.video_widget) # 设置播放设备。播放设备是视频窗口对象 16 17 self.player.setMedia(QMediaContent(QUrl.fromLocalFile(r'D:/ss/ssss/images/video1.mp4'))) 18 # 给播放器添加视频源 19 20 self.player.setVolume(80) #设置音量 21 self.player.play() #播放 22 23 if __name__ == '__main__': 24 app = QApplication(sys.argv) 25 demo = Demo() 26 demo.show() 27 sys.exit(app.exec_())