安装
pip install pygame

测试1 单纯播放
# pip install pygame
import pygame
import time
class Play_vioce:
#def __init__(self,ShareImages):
def __init__(self,file_name):
self.file_name=file_name
self.player=pygame.mixer#只初始化音频部分
self.player.init()
pass
def set_name(self,file_name):
self.file_name=file_name
self.track = self.player.music.load(self.file_name)
def play(self):
self.track = self.player.music.load(self.file_name)
self.player.music.play()
#time.sleep(10)
#pygame.mixer.music.stop()
def stop(self):
#pygame.mixer.music.play()
#time.sleep(10)
self.player.music.stop()
file_name="temp.mp3"
test1=Play_vioce(file_name)
print("play")
time.sleep(3)
test1.play()
print("stop")
time.sleep(3)
test1.stop()
2 多进程控制播放
import time
import pygame
import os
from mutagen.mp3 import MP3
from multiprocessing import Process,Manager
def GET_mp3List():
#获取地址并拼接
path_mp3='mp3/'
mp3_list_Path=[]
for i in os.listdir(path_mp3):
s=os.path.join(path_mp3,i)
mp3_list_Path.append(s)
print(i)
return mp3_list_Path
def Mp3_paly_all():
mp3_list_Path=GET_mp3List()
if len(mp3_list_Path)==0:
print("没有数据")
return 0
for Path_i in mp3_list_Path:
# 获取每一首歌的时长
audio = MP3(Path_i)
print("歌曲时间",int(audio.info))
pygame.mixer.init()
path = Path_i
pygame.mixer.music.load(path)
pygame.mixer.music.play(10)#播放载入的音乐。该函数立即返回,音乐播放在后台进行
time.sleep(int(10))
pygame.mixer.music.pause() # 暂停
time.sleep(int(3))
pygame.mixer.music.unpause() # 接着播放
#获取歌曲时间
time.sleep(int(audio.info.length))
def Mp3_paly_while(ShareImages,lock):
pygame.mixer.init()
while 1:
if ShareImages[9]==1:
print("mp3 stop")
if ShareImages[6]=="paly":
ShareImages[6]="wait"
path = ShareImages[7]
pygame.mixer.music.load(path)
print("开始播放歌曲",path)
#audio = MP3(path)
#print("歌曲时间",int(audio.info))
pygame.mixer.music.play()
elif ShareImages[6]=="stop":
ShareImages[6]="wait"
pygame.mixer.music.pause() # 暂停
time.sleep(0.0001)
'''
if __name__ == '__main__':
ShareImages=Manager().dict()
lock=Manager().Lock()
ShareImages[6]="wait"# ,mp3 动作
ShareImages[7]="wait"# ,mp3 当前播放名字
ShareImages[9]=0#用于关闭所有进程
#1采集图像进程
t1=Process(target=Mp3_paly_while,args=(managerdata,sharelock))
t1.start()
t1.deamon=True #伴随主进程关闭而关闭
while 1:
pass
'''
qt界面 mp3播放器
from PyQt5.QtWidgets import QApplication,QMainWindow,QFileDialog
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5 import QtWidgets, QtCore, QtGui,uic
# pip install PyQt5
# pip install PyQt5-sip
# pip install PyQtWebEngine --user
#导入图像库
import cv2
import numpy as np
import datetime
#进程测试
#import multiprocessing
import sys
#线程测试
import threading
from queue import Queue
from multiprocessing import Process,Manager
#视频采集和处理进程
from Api_GPS import *
#串口进程
from Api_MP3 import *
from Api_Weather import *
import time
"""
time格式 '2018-01-03 16:26:23'
"""
def compare_time(self,startTime,endTime):
#now = datetime.datetime.now ()
d_start = datetime.datetime.strptime (startTime, '%Y-%m-%d %H:%M:%S')
d_end = datetime.datetime.strptime (endTime, '%Y-%m-%d %H:%M:%S')
diff = d_end - d_start
diff_days = -diff.days
#result = (d_start<=now) and (d_end>=now)
#result = (d_start==d_end)
#print(diff_days)
return diff_days
#result = compare_time('2018-01-03 16:26:23','2018-02-03 16:29:55')
#print(result)
#一个是这个类本身的,一个是这个类继承
class Example(QMainWindow):
def __init__(self,ShareImages,Lock):
#类的初始化
super(Example, self).__init__()
uic.loadUi('UI.ui', self)
#self.setupUi(self)#界面控件初始化
#获取共享内存,外部参数数据和数据锁
self.ShareImages=ShareImages
self.Lock=Lock
#相机线程初始化
self.UI_Int()
self.MP3_INT()
def MP3_INT(self):
self.mp3_list_Path=GET_mp3List()
self.mp3_allnum=len(self.mp3_list_Path)
self.mp3_id=0
self.plainTextEdit_mp3.clear()
if self.mp3_allnum==0:
self.plainTextEdit_mp3.appendPlainText("MP3目录里没有要播放的文件")
ShareImages[7]='null'
else:
for mi in range(0,self.mp3_allnum):
self.plainTextEdit_mp3.appendPlainText("ID:"+str(mi)+ " Name: "+str(self.mp3_list_Path[mi]))
#audio = MP3(mi)
#print(audio.info)
ShareImages[7]=str(self.mp3_list_Path[self.mp3_id])
def UI_Int(self):
#self.dateTimeEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
#按钮绑定函数
self.pushButton_begin.clicked.connect(self.callback_begin) #开始按键
self.pushButton_stop.clicked.connect(self.callback_stop)
self.pushButton_up.clicked.connect(self.callback_up)
self.pushButton_down.clicked.connect(self.callback_down)
#定时器20毫秒更新画板
self.timer = QTimer(self)
self.timer.timeout.connect(self.GPS_SetImage)
self.timer.start(1000) #单位为毫秒
self.timer_weather = QTimer(self)
self.timer_weather.timeout.connect(self.callback_weather)
self.timer_weather.start(10000) #单位为毫秒
def callback_weather(self):
city_name_list = ['重庆'] # 获取以上五个城市天气数据
#for cn in city_name_list:
city_code = search_city_code(city_name_list[0])
html_str = getHTMLtext(city_code)
result = get_data(html_str) # 获得1-7天和当天的数据
self.plainTextEdit_weather.clear()
msg_="所在位置:"+str( city_name_list[0])+" 城市编码:"+str(city_code) +" 未来7日天气"
self.plainTextEdit_weather.appendPlainText(msg_)
if len(result)==0:
self.plainTextEdit_weather.appendPlainText("没有天气数据")
else:
for li in result:
data=li[0]
tianqi=li[1]
tem_h=li[2]
tem_l=li[3]
msg=str(data)+" "+str(tianqi)+" "+str(tem_h)+" "+str(tem_l)+" "
self.plainTextEdit_weather.appendPlainText(msg)
pass
def callback_begin(self):
print("开始播放")
_translate = QtCore.QCoreApplication.translate
if self.mp3_allnum==0:
print("没有数据")
_translate = QtCore.QCoreApplication.translate
self.label_msg.setText(_translate("Form", "曲目中没有数据要播放"))
else:
self.label_msg.setText(_translate("Form", "开始播放"+self.ShareImages[7]))
ShareImages[7]=str(self.mp3_list_Path[self.mp3_id])
self.ShareImages[6]="paly"
def callback_stop(self):
self.ShareImages[6]="stop"
print("停止播放")
_translate = QtCore.QCoreApplication.translate
self.label_msg.setText(_translate("Form", "停止播放"+self.ShareImages[7]))
def callback_up(self):
print("上一曲")
if self.mp3_allnum==0:
print("没有数据")
_translate = QtCore.QCoreApplication.translate
self.label_msg.setText(_translate("Form", "曲目中没有数据要播放"))
else:
self.mp3_id=self.mp3_id-1
if self.mp3_id<=0:
self.mp3_id=0
mp3_name=str(self.mp3_list_Path[self.mp3_id])
self.ShareImages[7]=mp3_name
self.ShareImages[6]='paly'
_translate = QtCore.QCoreApplication.translate
self.label_msg.setText(_translate("Form", "上一曲"+self.ShareImages[7]))
def callback_down(self):
print("下一曲")
if self.mp3_allnum==0:
print("没有数据")
_translate = QtCore.QCoreApplication.translate
self.label_msg.setText(_translate("Form", "曲目中没有数据要播放"))
else:
self.mp3_id=self.mp3_id+1
if self.mp3_id>=self.mp3_allnum-1:
self.mp3_id=self.mp3_allnum-1
mp3_name=str(self.mp3_list_Path[self.mp3_id])
self.ShareImages[7]=mp3_name
self.ShareImages[6]='paly'
_translate = QtCore.QCoreApplication.translate
self.label_msg.setText(_translate("Form", "下一曲"+self.ShareImages[7]))
#配合定时器刷新图像显示
def GPS_SetImage(self):
now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
#parsed_date = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
_translate = QtCore.QCoreApplication.translate
self.lineEditDate.setText(_translate("Form", now_time))
self.plainTextEdit_GPS.clear()
self.plainTextEdit_GPS.appendPlainText("经度:"+str(self.ShareImages[2]))
self.plainTextEdit_GPS.appendPlainText("纬度:"+str(self.ShareImages[3]))
self.plainTextEdit_GPS.appendPlainText("高度:"+str(self.ShareImages[4]))
self.plainTextEdit_GPS.appendPlainText("时间:"+str(self.ShareImages[5]))
self.plainTextEdit_GPS.appendPlainText("状态:"+str(self.ShareImages[1]))
def closeEvent(self, event):
self.ShareImages[9]=1#必须通过共享内存数据,强制关闭采集进程
print("QT关闭窗口")
if __name__ == '__main__':
lock = Manager().Lock()#创建共享内存容器
ShareImages=Manager().dict()#存str类型数据
ShareImages[1]=0 #"是否可用"
ShareImages[2]=0.0#"经度"
ShareImages[3]=0.0#"纬度"
ShareImages[4]=0.0#"高度"
ShareImages[5]=0#"时间"
ShareImages[6]="wait"# ,mp3 动作
ShareImages[7]="wait"# ,mp3 当前播放名字
ShareImages[9]=0#用于关闭所有进程
#3采集GPS
p_gps = Process(target=gps_Get_data, args=(ShareImages,lock))#开启进程
p_gps.deamon=True #伴随主进程关闭而关闭,但是有时候还是关闭不了,单独搞个标志位来控制
p_gps.start()#开始
#3采集MP3
p_MP3 = Process(target=Mp3_paly_while, args=(ShareImages,lock))#开启进程
p_MP3.deamon=True #伴随主进程关闭而关闭,但是有时候还是关闭不了,单独搞个标志位来控制
p_MP3.start()#开始
#----------------------QT界面主进程--------------------------------
app = QApplication(sys.argv)
ui=Example(ShareImages,lock) #ShareImages共享内存数据 lock 共享数据锁
ui.show()
sys.exit(app.exec_())
3
附录
pygame.init() 进行全部模块的初始化,
pygame.mixer.init() 或者只初始化音频部分
pygame.mixer.music.load('xx.mp3') 使用文件名作为参数载入音乐 ,音乐可以是ogg、mp3等格式。载入的音乐不会全部放到内容中,而是以流的形式播放的,即在播放的时候才会一点点从文件中读取。
pygame.mixer.music.play()播放载入的音乐。该函数立即返回,音乐播放在后台进行。
play方法还可以使用两个参数
pygame.mixer.music.play(loops=0, start=0.0) loops和start分别代表重复的次数和开始播放的位置。
pygame.mixer.music.stop() 停止播放,
pygame.mixer.music.pause() 暂停播放。
pygame.mixer.music.unpause() 取消暂停。
pygame.mixer.music.fadeout(time) 用来进行淡出,在time毫秒的时间内音量由初始值渐变为0,最后停止播放。
pygame.mixer.music.set_volume(value) 来设置播放的音量,音量value的范围为0.0到1.0。
pygame.mixer.music.get_busy() 判断是否在播放音乐,返回1为正在播放。
pygame.mixer.music.set_endevent(pygame.USEREVENT + 1) 在音乐播放完成时,用事件的方式通知用户程序,设置当音乐播放完成时发送pygame.USEREVENT+1事件给用户程序。 pygame.mixer.music.queue(filename) 使用指定下一个要播放的音乐文件,当前的音乐播放完成后自动开始播放指定的下一个。一次只能指定一个等待播放的音乐文件。
浙公网安备 33010602011771号