音频与视频

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_())

 

posted @ 2019-02-26 04:47  天子骄龙  阅读(639)  评论(0编辑  收藏  举报