如何使用Python播放音频

本文介绍了如何使用Python中的Pydub、SimpleAudio和threading库创建一个音频播放类,以实现音频的循环播放和同时播放。作者自定义了一个音频Player类,可以控制音频的单次播放、循环播放和停止。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景

需要用Python做软件,能够实现播放音频。我的需求是:

  1. 载入音频文件
  2. 能够循环播放或单次播放
  3. 能够两个音频同时播放,形成手动叠加的效果

目前在Python的音频库有很多,比如Pydub、SimpleAudio、pygame、playsound等,这些库都可以实现音频的播放,但是在我的2、3需求上很难同时兼顾的实现,因此结合python的线程自己再次封装出了一个音频播放类。

二、依赖

使用threading与simpleaudio两个库完成,threading是自带的,simpleaudio有简单的几个函数。

2.1 载入与播放-wave_obj

import simpleaudio as sa

audio_path = "./Simple.wav"
wave_obj = sa.WaveObject.from_wave_file(audio_path)

play_obj = wave_obj.play()

simpleaudio是使用在wave_obj上创建一个play对象来播放音频的,这个过程会同时播放音频与创建对象。

2.2 停止-play_obj

# 播放直到结束,会占用线程
play_obj.wait_done()

# 强制结束所有音频
sa.stop_all()

三、自建类

根据以上两个方法,自己创建播放类,如下所示:

import threading

import simpleaudio as sa


class audioPlayer(object):
    def __init__(self, audio_path):
        self.wave_obj = sa.WaveObject.from_wave_file(audio_path)
        self.play_obj = None

        self.thread = threading.Thread(target=self.play_sound)
        self.thread.setDaemon(True)

        self.play_flag = False

    def play_sound(self):
        if not self.play_flag:
            return
        while self.play_flag:
            self.play_obj = self.wave_obj.play()
            self.play_obj.wait_done()

    def play(self):
        self.play_flag = True
        self.thread.start()

    def play_once(self):
        self.wave_obj.play()

    def stop(self):
        self.play_flag = False
        self.play_obj.stop()
        self.thread.join()
        self.thread = threading.Thread(target=self.play_sound)
        self.thread.setDaemon(True)


if __name__ == "__main__":
    import time

    test_audio1 = audioPlayer("./Audio/Finish.wav")
    test_audio = audioPlayer("./Audio/OnProcess.wav")
    test_audio.play()
    time.sleep(3)
    test_audio1.play_once()

    time.sleep(7)
    # sa.stop_all()
    test_audio.stop()

至此,完成播放类的创建与使用。

### 在 Ubuntu 20.04 中使用 Python 播放音频 要在 Ubuntu 20.04 上使用 Python 播放音频文件,可以借助多种第三方库来实现这一功能。以下是几种常见的方法及其对应的代码示例。 #### 方法一:使用 `pygame` 库 `pygame` 是一个用于开发游戏的跨平台 Python 库,同时也支持音频播放功能。可以通过以下命令安装该库: ```bash sudo apt update sudo apt install python3-pygame ``` 下面是一个简单的代码示例,展示如何使用 `pygame` 来播放音频文件: ```python import pygame import time def play_audio(file_path): pygame.mixer.init() # 初始化混音器模块 print(f"Playing audio file: {file_path}") pygame.mixer.music.load(file_path) # 加载音频文件 pygame.mixer.music.play() # 开始播放 while pygame.mixer.music.get_busy(): # 循环等待直到音乐结束 time.sleep(1) if __name__ == "__main__": audio_file = "example.mp3" # 替换为实际路径 play_audio(audio_file) ``` 此方法适用于大多数常见格式的音频文件[^1]。 --- #### 方法二:使用 `simpleaudio` 库 `simpleaudio` 是另一个轻量级的音频播放库,适合快速原型设计和简单应用。可以通过 pip 安装它: ```bash pip install simpleaudio ``` 下面是使用 `simpleaudio` 的示例代码: ```python import simpleaudio as sa def play_audio(file_path): wave_obj = sa.WaveObject.from_wave_file(file_path) # 创建 Wave 对象 play_obj = wave_obj.play() # 播放对象 play_obj.wait_done() # 等待播放完成 if __name__ == "__main__": audio_file = "example.wav" # 只支持 WAV 格式 play_audio(audio_file) ``` 需要注意的是,`simpleaudio` 主要支持 `.wav` 格式的音频文件[^2]。 --- #### 方法三:使用 `vlc` 命令行工具与 `subprocess` 如果希望利用 VLC 这样的强大媒体播放器,则可以通过调用其命令行接口来实现音频播放。首先需要安装 VLC: ```bash sudo apt update sudo apt install vlc ``` 接着可以用以下方式通过 Python 调用 VLC 播放音频: ```python import subprocess def play_audio_vlc(file_path): command = ['cvlc', '--play-and-exit', file_path] # 使用 cvlc 后台播放 process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) output, error = process.communicate() if process.returncode != 0: print("Error:", error.decode()) if __name__ == "__main__": audio_file = "example.mp3" play_audio_vlc(audio_file) ``` 这种方法的优点在于兼容性强,几乎能处理任何主流格式的音频文件[^3]。 --- #### 方法四:使用 `playsound` 库 对于初学者来说,`playsound` 提供了一个极其简洁的方式来播放音频文件。可以直接通过 pip 安装: ```bash pip install playsound==1.2.2 # 推荐指定版本以避免兼容性问题 ``` 随后编写如下代码即可: ```python from playsound import playsound def play_audio(file_path): try: playsound(file_path) except Exception as e: print("An error occurred:", str(e)) if __name__ == "__main__": audio_file = "example.mp3" play_audio(audio_file) ``` 尽管简单易用,但 `playsound` 存在一些潜在缺陷,在某些环境中可能表现不稳定[^4]。 --- ### 总结 以上介绍了四种不同的方案来实现在 Ubuntu 20.04 下使用 Python 播放音频的功能。每种方法都有各自的优缺点以及适用场景,请根据具体需求选择合适的选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值