Skip to content

Latest commit

 

History

History
137 lines (85 loc) · 3.26 KB

play.md

File metadata and controls

137 lines (85 loc) · 3.26 KB
title update
MaixPy 播放音频
date author version content
2024-05-20
lxowalle
1.0.0
初版文档

简介

本文档提供播放音频的使用方法

使用方法

硬件操作

image-20240520134637905

MaixCAM没有内置喇叭,因此需要自行焊接一个功率在1W内的喇叭。喇叭焊接的引脚见上图的Speaker对应的VOPVON脚。

注:如果MaixCAM在这两个脚上连接了铜柱,则可以直接焊接在铜柱上,为了美观也可以焊接在板子的另一面。

编写代码

播放一个WAV文件

from maix import audio, time, app

p = audio.Player("/root/output.wav")

p.play()

while not app.need_exit():
    time.sleep_ms(10)
print("play finish!")

步骤:

  1. 导入audio、time和app模块

    from maix import audio, time, app
  2. 初始化播放器

    p = audio.Player("/root/output.wav")
  • 默认的采样率是48k,采样格式为小端格式-有符号16位,采样通道为1。你也可以像这样自定义参数p = audio.Player(sample_rate=48000, format=audio.Format.FMT_S16_LE, channel = 1)。目前只测试过采样率48000,FMT_S16_LE格式,和采样通道数为1。
  • 如果是.wav文件,则会自动获取采样率、采样格式和采样通道。
  1. 播放音频

    p.play()
  • 该将会阻塞直到写入所有音频数据,但不会阻塞到实际播放完所有音频数据。如果调用play()后退出了程序,则部分待播放的音频数据可能会丢失。
  1. 完成

PCM数据播放

from maix import audio, time, app

p = audio.Player()

with open('/root/output.pcm', 'rb') as f:
    ctx = f.read()

p.play(bytes(ctx))

while not app.need_exit():
    time.sleep_ms(10)

print("play finish!")

步骤:

  1. 导入audio、time和app模块

    from maix import audio, time, app
  2. 初始化播放器

    p = audio.Player()
  • 注意默认的采样率是48k,采样格式为小端格式-有符号16位,采样通道为1。你也可以像这样自定义参数p = audio.Player(sample_rate=48000, format=audio.Format.FMT_S16_LE, channel = 1)。目前只测试过采样率48000,FMT_S16_LE格式,和采样通道数为1
  1. 打开并播放一个PCM文件

      with open('/root/output.pcm', 'rb') as f:
          ctx = f.read()
    
      p.play(bytes(ctx))
    
      while not app.need_exit():
        time.sleep_ms(10)
  • with open('xxx','rb') as f:打开文件xxx, 并获取文件对象f
  • ctx = f.read()将读取文件的内容到ctx
  • p.play(bytes(ctx))播放音频,p是已打开的播放器对象, ctx是转换为bytes类型的PCM数据
  • time.sleep_ms(10)这里有一个循环来等待播放完成,因为播放操作是异步执行的,如果提前退出了程序,那么可能导致音频不会完全播放。
  1. 完成

其他

PlayerRecorder模块有些bug待解决,请保证它们在其他模块(Camera模块,Display模块等)之前创建。例如:

# 先创建Player和Recorder
p = audio.Player()
r = audio.Recorder()

# 再创建Camera
c = camera.Camera()