引言
要使用python实现对音频的控制,有多种方式,第三方的库比如pyaudio、Simpleaudio、pygame,也可使用os.system调用命令行的方式。博主在对比使用之后推荐pygame,功能比较齐全,开发方便。
pygame music介绍
pygame是开发游戏的第三方库,众所周知,游戏大多数都是有声音的,因此在pygame中有对音频的控制模块,比如音频的简单播放停止、设置音量等,官方连接:https://www.pygame.org/docs/ref/music.html
代码实现
根据官方模块,我们可以封装一个类,实现对音频的控制。
功能:后台线程播放、加载单个音频文件、加载播放列表、清空列表、暂停、继续播放、设置和获取音量大小。具体实现代码如下:
# -*- coding: utf-8 -*-
__author__ = "kaspar.s"
__date__ = '2020/7/28 16:44'
# 音频控制线程
import threading
import time
import pygame
class MyThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.daemon = True # 主线程结束,此线程结束
pygame.mixer.init()
self._handler = pygame.mixer.music
self._file = None
self._stop_sign = False
self._pause = False
self._playlist = []
def load_file(self,file):
"加载单个音频文件"
self._handler.load(file)
self._file = file
self._stop_sign = False
self._pause = False
def load_files(self,files):
"加载播放列表"
self._playlist = []
self._playlist = files
self._playlist_len = len(self._playlist)
self._turn = 0 # 轮流
self.load_file(self._playlist[self._turn])
def clear_files(self):
"清空播放列表"
if self._handler.get_busy():
self.pause()
self._playlist.clear()
self._playlist_len = 0
self._file = None
def run(self):
while self.is_alive():
if not self._stop_sign and self._file:
try:
if self._pause:
self._handler.unpause()
self._pause = False
else:
self._handler.play(0)
while self._handler.get_busy() and (not self._stop_sign):
time.sleep(0.5)
# 播放下一首
if not self._handler.get_busy() and (not self._stop_sign):
self._turn += 1
if self._turn == self._playlist_len:
self._turn = 0
self.load_file(self._playlist[self._turn])
except:
pass
if self._stop_sign:
self._handler.pause()
self._pause = True
else:
time.sleep(0.5)
def pause(self):
self._stop_sign = True
def unpause(self):
self._stop_sign = False
def set_volume(self,int):
self._handler.set_volume(int/100.0)
def get_volume(self):
self._handler.get_volume()*100
二赛君原创,转载需注明出处,谢谢。
来源:oschina
链接:https://my.oschina.net/u/4390412/blog/4520462