class PCM - PCM音频数据编码

该类提供PCM音频数据的读写接口,PCM数据可用于音频编码。

所有支持audio的型号均支持PCM。

创建对象

audio.Audio.PCM

class audio.Audio.PCM(mic_dev, channel, samplerate, flag,mode, periodcnt)

创建Audio对象。

参数描述:

  • 参数说明详见下表
参数 参数类型 参数说明
mic_dev int mic通道:
0 - 听筒
1 - 耳机
2 - 自动
channel int 通道数:
1 :单声道( PCM.MONO)
2 :立体音(PCM.STEREO)
samplerate int 采样率:
8000, 16000
flag int 模式:
0 :只读(PCM.READONLY)
1 :只写(PCM.WRITEONLY)
2 :读写(PCM.WRITEREAD)
mode int 阻塞(缺省值为1):
1 :阻塞式(PCM.BLOCK)
2 :非阻塞式(PCM.NOBLOCK)
periodcnt int 缓存buf大小,取值范围: [2,25]
单位为帧。 一帧20ms,缺省值为3(即默认最多储存3帧数据)

示例:

from audio import Audio
pcm = Audio.PCM(1, Audio.PCM.MONO, 8000, Audio.PCM.WRITEREAD, Audio.PCM.BLOCK)

方法

PCM.read

PCM.read(size)

该方法用于读取模组MIC录音的PCM数据。

参数描述:

  • size - 最大读取数据量,int类型,单位字节。(单次读取的数据量不超过设置的缓存buf大小)

注:录音时间可根据采样率,通道数,采样精度计算,具体计算公式为:

时间(s)=想要获取的数据量(byte) / (采样率(hz) * 通道数(channel) * 采样精度(byte/sample) )

例如:设置采样率8000,单声道,想读取数据size=320。模组PCM采样精度为2,所以该接口录音时间为0.02s

返回值描述:

成功返回数据buffer;

失败则返回 -1

PCM.write

PCM.write(buff)

该方法用于写入将要进行播放的PCM数据。

参数描述:

  • buff - 需要写入的PCM数据,bytearray类型。

返回值描述:

成功返回写入的数据量;

失败则返回 -1

示例:

from audio import Audio
pcm = Audio.PCM(1, Audio.PCM.MONO, 8000, Audio.PCM.WRITEREAD, Audio.PCM.BLOCK)

pcm_buf = pcm.read(320)
pcm.write(pcm_buf)

PCM.close

PCM.close()

该方法用于关闭PCM,释放相应资源。

返回值描述:

0 表示成功, -1 表示失败。

PCM.setVolume

PCM.setVolume(vol)

该方法用于设置播放音量大小,音量值在区间[0 ~ 11],0表示静音。

参数描述:

  • vol - 音量大小,int类型,区间[0 ~ 11]。

返回值描述:

0 表示成功, -1 表示失败。

注:该方法设置的是audio播放音量,与Audio.setVolume设置音量效果相同

PCM.getVolume

PCM.getVolume()

该方法用于获取当前播放音量大小,音量值在区间[0 ~ 11],0表示静音。

返回值描述:

整型音量大小值。

音频编码-G711

该模块用于G711格式的录音和音频播放。

构造函数

class G711(pcm)

创建G711对象。

参数描述:

  • device - PCM对象,obj类型,见 PCM 。(G711默认只支持8K采样率,创建PCM对象时请注意此问题)

示例:

import G711
import audio

pcm = audio.Audio.PCM(0, 1, 8000, 2)
g711 = G711(pcm)

G711.read

该方法用于读取G711格式录音数据,单次输出一帧录音数据(一帧录音时间为20ms,8k采样率下数据长度为160字节)。

G711.read(format)

参数描述:

  • format - 编码格式,int类型, 0 :A-LAW, 1 :U-LAW。

返回值描述:

成功则返回音频buffer;

失败则返回 -1

注:通常PCM数据按G711格式编码后数据量只有原先的1/2,反之G711解码为PCM后数据量为原先的2倍。

G711.write

该方法用于将G711音频数据解码,并播放。

G711.write(buffer, format)

参数描述:

  • format - 音频数据的编码格式,int类型, 0 :A-LAW, 1 :U-LAW。
  • buff - 需要解码的音频数据,bytearray类型。

返回值描述:

成功返回写入的解码后的数据量;

失败则返回 -1

示例:

import G711
import audio
import uos

pcm = audio.Audio.PCM(0, 1, 8000, 2)
g711 = G711(pcm)
#g711 code
def g711_compress(frame):
    f = open("/usr/test.g711", "wb")
    count = frame
    while count:
        count-=1
        g711_buf = g711.read(0)
        print("len:",len(g711_buf))
        if(len(g711_buf) > 0):
            f.write(g711_buf)
    f.close()
#g711 decode
def g711_decompression():
    file_size = uos.stat("/usr/test.g711")[6]  # get file size
    print(file_size)
    with open("/usr/test.g711", "rb")as f:   
        while 1:
            b = f.read(320)
            if not b:
                break
            write_len = g711.write(b, 0)
        f.close()

if __name__ == "__main__":
    g711_compress(200)
    g711_decompression()

音频编码-G722

该模块用于G722格式的录音和音频播放。

构造函数

class G722(pcm, bitrate)

创建G722对象。

参数描述:

  • device - PCM对象,obj类型,见 PCM 。(G722默认支持16K采样率,创建PCM对象时请注意此问题)
  • bitrate - 比特率,int类型,可选值: 64000 , 56000 48000

示例:

import G722
import audio

pcm = audio.Audio.PCM(0, 1, 16000, 2)
g722 = G722(pcm, 64000)

G722.read

该方法用于读取G722格式录音数据,单次输出一帧录音数据(一帧录音时间为20ms,16k采样率下数据长度为160字节)。

G722.read()

返回值描述:

成功则返回音频buffer;

失败则直接报错。

注:通常PCM数据按G722编码后数据量只有原先的1/4,反之G722解码为PCM后数据量为原先的4倍。

G722.write

该方法用于将G722音频数据解码成PCM,并放入播放缓存中进行播放。

G722.write(buffer)

参数描述:

  • buff - 需要解码的音频数据,bytearray类型。

返回值描述:

成功返回写入的数据量;

失败则返回 -1

示例:

import audio
import G722
import uos

pcm = audio.Audio.PCM(0, 1, 16000, 2, 1)
g722 = G722(pcm, 64000)
#g722 code
def g722_compress(frame):
    f = open("/usr/test.g722", "wb")
    count = frame
    while count:
        count-=1
        g722_buf = g722.read()
        print("len:",len(g722_buf))
        if(len(g722_buf) > 0):
            f.write(g722_buf)
    f.close()
#g722 decode
def g722_decompression():
    file_size = uos.stat("/usr/test.g722")[6]  # get file size
    print("size=",file_size)
    with open("/usr/test.g722", "rb")as f:   
        while 1:
            b = f.read(160)
            if not b:
                break
            write_len = g722.write(b)
        f.close()

if __name__ == "__main__":
    g722_compress(200)
    g722_decompression()

音频编码-G729

该模块用于G729格式的录音和音频播放。

构造函数

class G729(pcm)

创建G729对象。(G729默认支持8K采样率,创建PCM对象时请注意此问题)

参数描述:

  • device - PCM对象,obj类型,见 PCM

示例:

import G729
import audio

pcm = audio.Audio.PCM(0, 1, 8000, 2)
g729 = G729(pcm)

G729.read

该方法用于读取G722格式录音数据,单次输出一帧录音数据(一帧录音数据长度为20字节)。

G729.read()

返回值描述:

成功则返回音频buffer;

失败则直接报错。

注:通常PCM数据按G729编码后数据量只有原先的1/16,反之G729解码为PCM后数据量为原先的16倍。

G729.write

该方法用于将G729音频数据解码成PCM,并放入播放缓存中进行播放。

G729.write(buffer)

参数描述:

  • buff - 需要解码的音频数据,bytearray类型。

返回值描述:

成功返回写入的数据量;

失败则返回 -1

示例:

import audio
import G729
import uos

pcm = audio.Audio.PCM(0, 1, 8000, 2, 1)
g729 = G729(pcm)
#g729 code
def g729_compress(frame):
    f = open("/usr/test.g729", "wb")
    count = frame
    while count:
        count-=1
        g729_buf = g729.read()
        print("len:",len(g729_buf))
        if(len(g729_buf) > 0):
            f.write(g729_buf)
    f.close()
#g729 decode
def g729_decompression():
    file_size = uos.stat("/usr/test.g729")[6]  # get file size
    print("size=",file_size)
    with open("/usr/test.g729", "rb")as f:   
        while 1:
            b = f.read(20)
            if not b:
                break
            write_len = g729.write(b)
        f.close()

if __name__ == "__main__":
    g729_compress(200)
    g729_decompression()