From da0852a74e68e6bfd11078bd8be43cfb4b67535e Mon Sep 17 00:00:00 2001 From: "995686108@qq.com" <995686108@qq.com> Date: Sat, 4 Feb 2023 14:34:01 +0800 Subject: [PATCH] add camera and audio --- .../audio.Audio.md" | 308 +++++++++++++ .../audio.Record.md" | 391 ++++++++++++++++ .../audio.TTS.md" | 418 ++++++++++++++++++ .../audio.md" | 33 ++ .../camera.CamCapture.md" | 152 +++++++ .../camera.CamDecoder.md" | 209 +++++++++ .../camera.CamPreview.md" | 97 ++++ .../camera.md" | 72 +++ 8 files changed, 1680 insertions(+) create mode 100644 "docs/API_reference/zh/QuecPython\347\261\273\345\272\223/audio.Audio.md" create mode 100644 "docs/API_reference/zh/QuecPython\347\261\273\345\272\223/audio.Record.md" create mode 100644 "docs/API_reference/zh/QuecPython\347\261\273\345\272\223/audio.TTS.md" create mode 100644 "docs/API_reference/zh/QuecPython\347\261\273\345\272\223/audio.md" create mode 100644 "docs/API_reference/zh/QuecPython\347\261\273\345\272\223/camera.CamCapture.md" create mode 100644 "docs/API_reference/zh/QuecPython\347\261\273\345\272\223/camera.CamDecoder.md" create mode 100644 "docs/API_reference/zh/QuecPython\347\261\273\345\272\223/camera.CamPreview.md" create mode 100644 "docs/API_reference/zh/QuecPython\347\261\273\345\272\223/camera.md" diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/audio.Audio.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/audio.Audio.md" new file mode 100644 index 00000000..3b087ee1 --- /dev/null +++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/audio.Audio.md" @@ -0,0 +1,308 @@ + + +``` +本文阐述了QuecPython的audio.Audio类的用法,描述了audio.Audio类最新版本的特性。 +``` + + + +# `class Audio` + +`Audio`对象提供音频播放功能。 + +> 目前支持型号:EC600N系列、EC800N系列、EC600M-CN(LA、LE)、EC800M-CN(LA、LE、GA)、EC600U系列和EC200U系列、EG912U、EG915U、EG915N-EUAG + +**示例:** + +```python +import audio +from machine import Pin + +def audio_cb(event): + if event == 0: + print('audio-play start.') + elif event == 7: + print('audio-play finish.') + +aud = audio.Audio(0) +aud.setCallback(audio_cb) +# 设置pa +aud.set_pa(Pin.GPIO15) +# 播放MP3 +aud.play(2, 1, 'U:/music.mp3') +aud.stop() + +# 音频流播放 +size = 10*1024 # 保证一次填充的音频数据足够大以便底层连续播放 +format = 4 + +def play_from_fs(): + file_size = uos.stat("/usr/test.amr")[6] # 获取文件总字节数 + print(file_size) + with open("/usr/test.amr", "rb")as f: + while 1: + b = f.read(size) # read + if not b: + break + aud.playStream(format, b) + utime.sleep_ms(20) + + +play_from_fs() +# 等待播放完成 +utime.sleep_ms(5000) +# 停止本次播放以便不影响下次播放 +aud.stopPlayStream() +``` + +## 构造函数 + +### `audio.Audio` + +```python +class audio.Audio(device) +``` + +创建Audio对象。 + +**参数描述:** + +- `device` - 输出通道,int类型,0表示听筒,1表示耳机,2表示喇叭。具体模块所支持通道详见下表。 + +**模块输出通道对应表** + +| 模块型号 | 听筒 | 耳机 | 喇叭 | +| --------------------- | ------ | ------ | ------ | +| EC600N系列 | 支持 | 不支持 | 不支持 | +| EC800N系列 | 支持 | 不支持 | 不支持 | +| EC600M-CN(LA、LE) | 支持 | 不支持 | 不支持 | +| EC800M-CN(LA、LE、GA) | 支持 | 不支持 | 不支持 | +| EG915N | 支持 | 不支持 | 不支持 | +| EG912N | 支持 | 不支持 | 不支持 | +| EG912U | 支持 | 不支持 | 不支持 | +| EC200U系列 | 不支持 | 不支持 | 支持 | +| EC600U系列 | 支持 | 支持 | 支持 | +| EG915U | 支持 | 支持 | 不支持 | + +## 方法 + +### Audio.set_pa + +```python +Audio.set_pa(gpio) +``` + +该方法用于设置输出pa的gpio,并开启pa功能目前支持AB类切D类,即两个上升沿的脉冲分别在1us<脉冲<12us。 + +**参数描述** + +- `gpio` - 输出的gpio,int类型,参照[Pin](./machine.Pin.md)。 + +**返回值描述:** + +`1` 表示成功, + +`0`表示失败。 + +### Audio.play + +```python +Audio.play(priority, breakin, filename) +``` + +该方法用于音频文件播放。 + +支持mp3、amr和wav格式文件播放。支持优先级0 ~ 4,数字越大优先级越高,每个优先级组可同时最多加入10个播放任务,与TTS播放共用同一个播放队列。 + +> **说明:**由于TTS和音频文件播放共用同一个播放队列,所以TTS中设置的播放优先级、打断模式不仅仅是和其他TTS播放任务比较,还会和音频文件播放任务的优先级和打断模式比较,反之,音频文件播放中设置的播放优先级与打断模式对TTS任务同样是有效的。 + +**参数描述** + +- `priority` - 播放优先级,int类型。支持优先级0 ~ 4,数值越大优先级越高。 +- `breakin` - 打断模式,int类型。0表示不允许被打断,1表示允许被打断 +- `filename` - 模式,string类型。待播放的文件名称,包含文件存放路径。点此查看文件播放路径的说明。 + +**返回值描述:** + +`0` 表示播放成功; + +`-1`表示播放失败; + +`1` 表示无法立即播放,加入播放队列; + +`-2`表示无法立即播放,且该请求的优先级组队列任务已达上限,无法加入播放队列。 + +**文件播放路径的说明:** + +用户分区路径固定为’U:/‘开头,表示用户分区的根目录,如果用户在根目录下新建audio目录,并将音频文件存放在根目录下的audio目录,那么播放接口中,传入的路径参数应该是:'U:/audio/music.mp3'。 + +### Audio.stop + +```python +Audio.stop() +``` + +该方法用于停止音频文件播放。 + +**返回值描述:** + +`0` 表示成功, + +`-1`表示失败。 + +### Audio.stopAll + +```python +Audio.stopAll() +``` + +该方法用于停止整个队列的播放。即当前如果正在播放Audio或者音频,并且队列中还有其他待播放内容,调用该方法后,不仅会停止当前播放的内容,还会清除这个队列的内容,不再播放任何内容。如果当前正在播放,且播放队列为空,那么调用该方法效果等同与stop()接口。 + +**返回值描述:** + +`0` 表示成功, + +`-1`表示失败。 + +### Audio.setCallback + +```python +Audio.setCallback(usrFun) +``` + +该方法用于注册用户的回调函数,用于通知用户音频文件播放状态。 + +> **注意**,该回调函数中不要进行耗时以及阻塞性的操作,建议只进行简单、耗时短的操作。 + +**参数描述** + +- `usrFun` - 用户回调函数,function类型,函数原型:usrFun(event) -> None,点此查看回调函数参数event说明表。 + +**返回值描述:** + +`0` 表示成功, + +`-1`表示失败。 + +**回调函数参数event说明表** + +| event | 表示状态 | +| ----- | -------- | +| 0 | 开始播放 | +| 7 | 播放完成 | + +### Audio.getState + +```python +Audio.getState() +``` + +该方法用于获取audio初始化状态。 + +**返回值描述:** + +`0` 表示audio初始化完成, + +`-1`表示audio初始化未完成。 + +### Audio.getVolume + +```python +Audio.getVolume() +``` + +该方法用于获取当前播放音量大小,音量值为0 ~ 11,0表示静音,默认值7。 + +**返回值描述:** + +整型音量大小值, + +### Audio.setVolume + +```python +Audio.setVolume(vol) +``` + +该方法用于设置播放音量大小,音量值应在0 ~ 11区间,0表示静音。 + +**参数描述** + +- `vol` - 音量大小,int类型,区间0 ~ 11。 + +**返回值描述:** + +`0` 表示成功, + +`-1`表示失败。 + +### Audio.playStream + +```python +Audio.playStream(format, buf) +``` + +该方法用于音频流播放,支持mp3、amr和wav格式的音频流播放。 + +**参数描述** + +- `format` - 音频流格式,int类型,`2` - `WAVPCM`,`3` - `MP3`,`4` - `AMRNB`。 +- `buf` - 音频流内容,音频流二进制文件内容。 + +**返回值描述:** + +`0`表示播放成功, + +`-1`表示播放失败。 + +### Audio.stopPlayStream + +```python +Audio.stopPlayStream() +``` + +该方法用于停止音频流播放。 + +**参数描述** + +无 + +**返回值描述:** + +`0` 表示成功, + +`-1`表示失败。 + +### Audio.aud_tone_play + +```python +Audio.aud_tone_play(tone, time) +``` + +该方法用于播放tone音,播放一段时间(time)后自动停止播放。 + +> **注意**:EC600N/EC800N系列模组调用该接口为立即返回,EC600U/EC200U系列模组调用该接口为阻塞等待。 + +**参数描述** + +- `tone` - tone类型,int型,`0~15`:按键音(0~9、A、B、C、D、#、*),`16`:拨号音。 +- `time` - 播放时长,单位ms,int型,`0` : 不停止一直播放。 + +**返回值描述:** + +`0` 表示播放成功, + +`-1`表示播放失败。 + +### Audio.aud_tone_play_stop + +```python +Audio.aud_tone_play_stop() +``` + +该方法用于主动停止播放tone音。 + +**返回值描述:** + +`0` 表示停止播放成功, + +`-1`表示停止播放失败。 \ No newline at end of file diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/audio.Record.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/audio.Record.md" new file mode 100644 index 00000000..b526e11b --- /dev/null +++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/audio.Record.md" @@ -0,0 +1,391 @@ + + +``` +本文阐述了QuecPython的audio.Record类的用法,描述了audio.Record类最新版本的特性。 +``` + + + +# `class Record` + +`Record`对象提供录音功能。 + +> 目前支持型号:EC600N系列、EC800N系列、EC600M-CN(LA、LE)、EC800M-CN(LA、LE、GA)、EC600U系列和EC200U系列、EG912U、EG915U、EG915N-EUAG + +**示例:** + +```python +import utime +import audio +from machine import Pin + + +flag = 1 +''' +外接喇叭播放录音文件,参数选择0 +''' +aud = audio.Audio(0) +tts = audio.TTS(0) + +aud.setVolume(11) + +def record_callback(args): + global flag + print('file_name:{}'.format(args[0])) + print('file_size:{}'.format(args[1])) + print('record_sta:{}'.format(args[2])) + + record_sta = args[2] + if record_sta == 3: + print('The recording is over, play it') + tts.play(1, 0, 2, '录音结束,准备播放录音文件') + aud.play(1, 0, audio.getFilePath(path)) + flag = 0 + elif record_sta == -1: + print('The recording failure.') + tts.play(1, 0, 2, '录音失败') + flag = 0 + +record = audio.Record() +audio.end_callback(record_callback) +audio.start('recordfile.wav', 10) + +while 1: + if flag: + pass + else: + break +``` + +## 构造函数 + +### `audio.Record` + +```python +class audio.Record(device) +``` + +创建Record对象。 + +> 注意:如果传参,请与audio.Audio(device)的参数保持一致。 + +**参数描述:** + +- `device` - 输出通道,int类型,0表示听筒,1表示耳机,2表示喇叭,缺省值为`0`。具体模块所支持通道详见下表。 + +**模块输出通道对应表** + +| 模块型号 | 听筒 | 耳机 | 喇叭 | +| --------------------- | ------ | ------ | ------ | +| EC600N系列 | 支持 | 不支持 | 不支持 | +| EC800N系列 | 支持 | 不支持 | 不支持 | +| EC600M-CN(LA、LE) | 支持 | 不支持 | 不支持 | +| EC800M-CN(LA、LE、GA) | 支持 | 不支持 | 不支持 | +| EG915N | 支持 | 不支持 | 不支持 | +| EG912N | 支持 | 不支持 | 不支持 | +| EG912U | 支持 | 不支持 | 不支持 | +| EC200U系列 | 不支持 | 不支持 | 支持 | +| EC600U系列 | 支持 | 支持 | 支持 | +| EG915U | 支持 | 支持 | 不支持 | + + + +## 方法 + +### Record.start + +```python +audio.start(file_name,seconds) +``` + +该方法用于开始录音。 + +**参数描述** + +- `file_name` - 录音文件名,string类型。 +- `seconds` - 需要录制时长,单位:秒,int类型。 + +**返回值描述:** + +`0`表示成功; + +`-1`表示文件覆盖失败; + +`-2`表示文件打开失败; + +`-3`表示文件正在使用; + +`-4`表示通道设置错误; + +`-5`表示定时器资源申请失败; + +`-6` 表示音频格式检测错误。 + +### Record.stop + +```python +Record.stop() +``` + +该方法用于停止录音。 + +**返回值描述:** + +`0` 表示播放成功; + +`-1`表示播放失败。 + +### Record.getFilePath + +```python +Record.getFilePath(file_name) +``` + +该方法用于读取录音文件的路径。 + +**参数描述** + +- `file_name` - 录音文件名,string类型。 + +**返回值描述:** + +成功返回string类型的录音文件路径; + +`-1`表示目标文件不存在; + +`-2`表示文件名长度为0。 + +### Record.getData + +```python +Record.getData(file_name, offset, size) +``` + +该方法用于读取录音数据。 + +**参数描述** + +- `file_name` - 录音文件名,string类型。 +- `offset` - 读取数据的偏移量,int类型。 +- `size` - 读取大小,单位 字节,int类型。注意 :需小于10K。 + +**返回值描述:** + +成功返回录音数据,bytearray类型; + +失败返回值说明如下: + +`-1`表示读取数据错误; + +`-2`表示文件打开失败; + +`-3`表示偏移量设置错误; + +`-4`表示文件正在使用; + +`-5`表示设置超出文件大小(offset+size > file_size); + +`-6`表示读取size 大于10K; + +`-7`表示内存不足10K; + +### Record.getSize + +```python +Record.getSize(file_name) +``` + +该方法用于读取录音文件大小。 + +**参数描述** + +- `file_name` - 录音文件名,string类型。 + +**返回值描述:** + +若获取成功,返回文件大小 (EC600N系列、EC800N系列、EC800M系列、EC600M系列、EG915N不返回文件头),单位字节: + +wav格式时,此值会比返回callback返回值大44 bytes(44 bytes为文件头); + +amr格式时,此值会比返回callback返回值大6 bytes(6 bytes为文件头); + +失败返回值如下: + +`-1`表示获取文件大小失败 ; + +`-2`表示文件打开失败 ; + +`-3`表示文件正在使用 ; + +`-4`表示文件名长度为0。 + +### Record.Delete + +```python +Record.Delete(file_name) +``` + +该方法用于删除录音文件。 + +**参数描述** + +- `file_name` - 录音文件名,string类型。 + +**返回值描述:** + +`0`表示成功, + +`-1`表示文件不存在, + +`-2`表示文件正在使用。 + +### Record.exists + +```python +Record.exists(file_name) +``` + +该方法用于判断录音文件是否存在。 + +**参数描述** + +- `file_name` - 录音文件名,string类型。 + +**返回值描述:** + +`true`表示文件存在, + +`false`表示文件不存在, + +`-1`表示文件名长度为0。 + +### Record.isBusy + +```python +Record.isBusy() +``` + +该方法用于判断是否正在录音。 + +**返回值描述:** + +`0`表示不在录音, + +`1`表示正在录音。 + +### Record.end_callback + +```python +Record.end_callback(callback) +``` + +该方法用于设置录音结束回调。 + +**参数描述** + +- `callback` - 录音结束回调函数,function类型,函数原型:`callback(file_path, audio_len, audio_state) -> None`,回调函数参数`file_path`表示文件路径,`audio_len`表示录音长度,`audio_state`表示录音状态,点此查看回调函数参数audio_state说明表。 + +**返回值描述:** + +`0` 表示成功, + +`-1`表示失败。 + +**audio_state说明表:** + +| event | 说明 | +| ----- | -------- | +| -1 | 发生错误 | +| 0 | 录音开始 | +| 3 | 录音结束 | + +### Record.gain + +```python +Record.gain(code_gain,dsp_gain) +``` + +该方法用于设置录音增益。 + +> 目前仅EC600N/EC800N系列模组支持该功能。 + +**参数描述** + +- `code_gain` - 上行编解码器增益,int型,`0~4`。 +- `dsp_gain` - 上行数字增益,int型,`-36~12` 。 + +**返回值描述:** + +`0` 表示成功, + +`-1`表示失败。 + +### Record.amrEncDtx_enable + +```python +Record.amrEncDtx_enable(on_off) +``` + +该方法用于配置amr录音DTX功能开关。 + +> 目前仅EC600N/EC800N系列模组支持该功能。 + +**参数描述** + +- `on_off` - 开关,int型,`1`:开启,`0`:关闭 。 +- 不传参数 - 获取当前配置 + +**返回值描述:** + +不传参:返回当前配置 + +传参:参数正确无返回,参数错误抛异常。 + +### Record.stream_start + +```python +Record.stream_start(format, samplerate, time) +``` + +该方法用于开始录音音频流。注意:录制音频流的同时,应及时读取音频流。目前是采用循环buf,不及时读取,会导致数据丢失 + +> 目前仅EC200U/EC600U系列模组支持该功能。 + +**参数描述** + +- `format` - 音频格式,int型,目前支持 amr 格式,见常量。 +- `samplerate` - 采样率,int型,目前支持8000 和 16000 。 +- `time` - 录音时长,int型,单位 S (秒)。 + +**返回值描述:** + +`0` 表示成功, + +`-1`表示失败。 + +### Record.stream_read + +```python +Record.stream_read(read_buf, len) +``` + +该方法用于读取录音流。 + +> 目前仅EC600N/EC800N系列模组支持该功能。 + +**参数描述** + +- `read_buf` - 录音流buf,buf型 。 +- `len` - 读取的长度,int类型。 + +**返回值描述:** + +成功返回实际读取的字节数, + +失败返回整型-1。 + +## 常量 + +### Record.AMRNB + +amr 格式。 \ No newline at end of file diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/audio.TTS.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/audio.TTS.md" new file mode 100644 index 00000000..d94033d1 --- /dev/null +++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/audio.TTS.md" @@ -0,0 +1,418 @@ + + +``` +本文阐述了QuecPython的audio.TTS类的用法,描述了audio.TTS类最新版本的特性。 +``` + + + +# `class TTS` + +`TTS`对象提供从文本到语音播放功能。 + +> 目前支持型号:EC600N系列、EC800N系列、EC600M-CN(LA、LE)、EC800M-CN(LA、LE、GA)、EC600U-CN系列和EC200U-CN系列 + +**示例:** + +```python +''' +@Description: example for class TTS +@FilePath: example_tts_file.py +''' +import log +from audio import TTS +import utime + + +''' +下面两个全局变量是必须有的,用户可以根据自己的实际项目修改下面两个全局变量的值 +''' +PROJECT_NAME = "QuecPython_TTS_example" +PROJECT_VERSION = "1.0.0" + +# 设置日志输出级别 +log.basicConfig(level=log.INFO) +tts_Log = log.getLogger("TTS") + + +if __name__ == '__main__': + # 参数1:device (0:听筒,1:耳机,2:喇叭) + tts = TTS(1) + # 获取当前播放音量大小 + volume_num = tts.getVolume() + tts_Log.info("Current TTS volume is %d" %volume_num) + + # 设置音量为6 + volume_num = 6 + tts.setVolume(volume_num) + # 参数1:优先级 (0-4) + # 参数2:打断模式,0表示不允许被打断,1表示允许被打断 + # 参数3:模式 低四位:(1:UNICODE16(Size end conversion) 2:UTF-8 3:UNICODE16(Don't convert)),高四位:wtts_enable,wtts_ul_enable, wtts_dl_enable + # 参数4:数据字符串 (待播放字符串) + tts.play(1, 1, 2, 'QuecPython') # 执行播放 + tts.play(1,1,tts.wtts_enable|tts.wtts_ul_enable|2, '12345') + tts.close() # 关闭TTS功能 +``` + +## 构造函数 + +### `audio.TTS` + +```python +class audio.TTS(device) +``` + +创建TTS对象。 + +**参数描述:** + +- `device` - 输出通道,int类型,0表示听筒,1表示耳机,2表示喇叭。具体模块所支持通道详见下表。 + +**模块输出通道对应表** + +| 模块型号 | 听筒 | 耳机 | 喇叭 | +| --------------------- | ------ | ------ | ------ | +| EC600N系列 | 支持 | 不支持 | 不支持 | +| EC800N系列 | 支持 | 不支持 | 不支持 | +| EC600M-CN(LA、LE) | 支持 | 不支持 | 不支持 | +| EC800M-CN(LA、LE、GA) | 支持 | 不支持 | 不支持 | +| EG915N | 支持 | 不支持 | 不支持 | +| EG912N | 支持 | 不支持 | 不支持 | +| EG912U | 支持 | 不支持 | 不支持 | +| EC200U系列 | 不支持 | 不支持 | 支持 | +| EC600U系列 | 支持 | 支持 | 支持 | +| EG915U | 支持 | 支持 | 不支持 | + +## 方法 + +### TTS.close + +```python +TTS.close() +``` + +该方法用于关闭TTS功能。 + +**返回值描述:** + +`0` 表示关闭成功,`-1`表示关闭失败。 + +### TTS.play + +```python +TTS.play(priority, breakin, mode, str) +``` + +该方法用于开始语音播放。点此查看TTS.play方法使用实例。 + +支持优先级0 ~ 4,数字越大优先级越高,每个优先级组可同时最多加入10个播放任务;播放策略说明如下: + +1. 如果当前正在播放任务A,并且允许被打断,此时有高优先级播放任务B,那么会打断当前低优先级播放任务A,直接播放高优先级任务B; + +2. 如果当前正在播放任务A,并且不允许被打断,此时有高优先级播放任务B,那么B播放任务将会加入到播放队列中合适的位置,等待A播放完成,再依次从队列中按照优先级从高到低播放其他任务; + +3. 如果当前正在播放任务A,且不允许被打断,此时来了一个同优先级播放任务B,那么B会被加入到该优先级组播放队列队尾,等待A播放完成,再依次从队列中按照优先级从高到低播放其他任务; + +4. 如果当前正在播放任务A,且允许被打断,此时来了一个同优先级播放任务B,那么会打断当前播放任务A,直接播放任务B; + +5. 如果当前正在播放任务A,且任务A的优先级组播放队列中已经有几个播放任务存在,且该优先级组播放队列最后一个任务N是允许被打断的,此时如果来了一个同样优先级的播放任务B,那么任务B会直接覆盖掉任务N;也就是说,某个优先级组,只有最后一个元素是允许被打断的,即breakin为1,其他任务都是不允许被打断的; + +6. 如果当前正在播放任务A,不管任务A是否允许被打断,此时来了一个优先级低于任务A的请求B,那么将B加入到B对应优先级组播放队列。 + +**参数描述** + +- `priority` - 播放优先级,int类型。支持优先级0 ~ 4,数值越大优先级越高。 +- `breakin` - 打断模式,int类型。0表示不允许被打断,1表示允许被打断 +- `mode` - 模式,int类型。由低四位和高四位构成,其中低四位是编码模式,高四位是WTTS模式。点此查看TTS模式说明表。 +- `str` - 待播放字符串,string类型。 + +**返回值描述:** + +`0` 表示播放成功; + +`-1`表示播放失败; + +`1` 表示无法立即播放,加入播放队列; + +`-2`表示无法立即播放,且该请求的优先级组队列任务已达上限,无法加入播放队列。 + +**TTS模式说明表:** + +| 模式 | 说明 | +| -------- | ------------------------------------------------------------ | +| 编码模式 | 1 - UNICODE16(UTF-16大端模式)
2 - UTF-8
3 - UNICODE16(UTF-16小端模式) | +| WTTS模式 | 仅600N系列支持VOLTE的版本支持,
wtts_enable - wtts总开关,
wtts_ul_enable - wtts上行使能,
wtts_dl_enable - wtts下行使能 | + +**TTS.play方法使用实例:** + +- **TTS播放策略实例:** + +```python +>>> import audio +>>> tts = audio.TTS(1) +# case1:正在播放任务A,且A允许被打断,此时任务B到来,且优先级高于任务A,那么A会被打断,直接播放B +>>> tts.play(1, 1, 2, '111') #任务A +0 +>>> tts.play(2, 0, 2, '222') #任务B +0 + +# case2:正在播放任务A,且A不允许被打断,此时任务B到来,且优先级高于任务A,那么B会被加入播放队列,等待A播放完成播放B(假设播放队列之前为空) +>>> tts.play(1, 0, 2, '111') #任务A +0 +>>> tts.play(2, 0, 2, '222') #任务B +1 + +# case3:正在播放任务A,且A允许被打断,此时任务B到来,且优先级和A优先级一样,那么A会被打断,直接播放B +>>> tts.play(2, 1, 2, '222') #任务A +0 +>>> tts.play(2, 0, 2, '333') #任务B +0 + +# case4:正在播放任务A,且A不允许被打断,此时任务B到来,且优先级和A优先级一样,那么B会被加入播放队列,等待A播放完成播放B(假设播放队列之前为空) +>>> tts.play(2, 0, 2, '222') #任务A +0 +>>> tts.play(2, 0, 2, '333') #任务B +1 + +# case5:正在播放A,且A不允许被打断,此时任务B到来,且任务B允许被打断,优先级与A相同,那么任务B会被加入到播放队列中,此时任务C到来,且优先级和A、B相同,此时C会被加入播放队列中,且直接覆盖率任务B,A播放完成下一个播放的是C(假设播放队列之前为空) +>>> tts.play(2, 0, 2, '222') #任务A +0 +>>> tts.play(2, 1, 2, '333') #任务B +1 +>>> tts.play(2, 0, 2, '444') #任务C +1 + +# 播放UTF16BE模式的语音 +>>> tts.play(1,1,1,'6B228FCE4F7F752879FB8FDC901A4FE16A2157573002') +0 + +# 播放UTF16LE模式的语音 +>>> tts.play(1,1,3,'226BCE8F7F4F2875FB79DC8F1A90E14F216A57570230') +0 + +# 支持VOLTE的版本,可以播放tts到远端 +>>> import voiceCall +>>> voiceCall.callStart('1xxxxxxxxxx') +0 + +# 待电话接通后 +# 播放tts语音至通话远端 +>>> tts.play(1,1,tts.wtts_enable|tts.wtts_ul_enable|2, '12345') +0 +``` + +- **TTS播放中文示例:** + + 注意,python文件开头需要加上`# -*- coding: UTF-8 -*-`。 + +```python +# -*- coding: UTF-8 -*- +import audio + +tts = audio.TTS(1) +str1 = '移联万物,志高行远' +tts.play(4, 0, 2, str1) +``` + +- **TTS播放文本标注实例:** + + 如遇TTS播放时不能达到预期的,可以通过文本标注的方式让TTS播放符合预期。 + + 数字播放的方式: + +```python +# 格式:[n*] (*=0/1/2) +# TTS引擎自动决定是以号码形式播放还是以数值的形式播放 +>>> tts.play(1,1,2, '12345') +0 + +# TTS引擎以号码形式播放 +>>> tts.play(1,1,2, '[n1]12345') +0 + +# TTS引擎以数值形式播放 +>>> tts.play(1,1,2, '[n2]12345') +0 +``` + +- **TTS语速设置实例:** + +```python +# 格式:[s*] (*=0 ~ 10) +# TTS引擎以默认语速5播放语音 +>>> tts.play(1,1,2, '12345') +0 + +# TTS引擎以默认语速的一半播放语音 +>>> tts.play(1,1,2, '[s0]12345') +0 + +# TTS引擎以默认语速的2倍语速播放语音 +>>> tts.play(1,1,2, '[s10]12345') +0 +``` + +- **TTS语调设置实例:** + +```python +# 格式:[t*] (*=0 ~ 10) +# TTS引擎以默认语调5播放语音 +>>> tts.play(1,1,2, '12345') +0 + +# TTS引擎以默认语调基频减64Hz播放语音 +>>> tts.play(1,1,2, '[t0]12345') +0 + +# TTS引擎以默认语调基频加128Hz播放语音 +>>> tts.play(1,1,2, '[t10]12345') +0 +``` + +- **汉字指定拼音实例:** + +```python +# 格式:[=*] (*=拼音) +# 汉字:声调用后接一位数字 1 ~ 5 分别表示 阴平、阳平、上声、去声和轻声 5个声调。 +>>> tts.play(1,1,2, '乐[=le4]') +0 + +>>> tts.play(1,1,2, '乐[=yue4]') +0 +``` + + + +### TTS.stop + +```python +TTS.stop() +``` + +该方法用于停止TTS播放。 + +**返回值描述:** + +`0` 表示成功, + +`-1`表示失败。 + +### TTS.stopAll + +```python +TTS.stopAll() +``` + +该方法用于停止整个队列的播放。即当前如果正在播放TTS或者音频,并且队列中还有其他待播放内容,调用该方法后,不仅会停止当前播放的内容,还会清除这个队列的内容,不再播放任何内容。如果当前正在播放,且播放队列为空,那么调用该方法效果等同与stop()接口。 + +**返回值描述:** + +`0` 表示成功, + +`-1`表示失败。 + +### TTS.setCallback + +```python +TTS.setCallback(usrFun) +``` + +该方法用于注册用户的回调函数,用于通知用户TTS播放状态。 + +> 注意,该回调函数中不要进行耗时以及阻塞性的操作,建议只进行简单、耗时短的操作。 + +**参数描述** + +- `usrFun` - 用户回调函数,function类型,函数原型:usrFun(event) -> None,点此查看回调函数参数event说明表。 + +**返回值描述:** + +`0` 表示成功, + +`-1`表示失败。 + +**回调函数参数event说明表** + +| event | 表示状态 | +| ----- | -------- | +| 2 | 开始播放 | +| 3 | 停止播放 | +| 4 | 播放完成 | + +### TTS.getVolume + +```python +TTS.getVolume() +``` + +该方法用于获取当前播放音量大小,音量值为0 ~ 9,0表示静音,默认值4。 + +**返回值描述:** + +成功则返回整型音量大小值, + +`-1`表示失败。 + +### TTS.setVolume + +```python +TTS.setVolume(vol) +``` + +该方法用于设置播放音量大小,音量值应在0 ~ 9区间,0表示静音。 + +**参数描述** + +- `vol` - 音量大小,int类型,区间0 ~ 9。 + +**返回值描述:** + +`0` 表示成功, + +`-1`表示失败。 + +### TTS.getSpeed + +```python +TTS.getSpeed() +``` + +该方法用于获取当前播放速度,速度值为0 ~ 9,值越大,速度越快,默认值4。 + +**返回值描述:** + +成功则返回整型音量大小值, + +`-1`表示失败。 + +### TTS.setSpeed + +```python +TTS.setSpeed(speed) +``` + +该方法用于设置TTS播放速度,速度值应在0 ~ 9区间。 + +**参数描述** + +- `speed` - 速度值,int类型,区间0 ~ 9。 + +**返回值描述:** + +`0` 表示成功, + +`-1`表示失败。 + +### TTS.getState + +```python +TTS.getState() +``` + +该方法用于获取TTS状态。 + +**返回值描述:** + +`0` 表示当前无tts播放, + +`-1`表示当前有tts正在播放。 \ No newline at end of file diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/audio.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/audio.md" new file mode 100644 index 00000000..68c5ac3d --- /dev/null +++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/audio.md" @@ -0,0 +1,33 @@ + + +``` +本文阐述了QuecPython的audio模块的用法,描述了audio模块最新版本的特性。 +``` + + + +# `audio` - 音频播放相关功能 + +`audio`模块包含音频播放相关的功能,支持TTS、mp3以及AMR文件播放。 + +**示例:** + +```python +import audio + +if __name__ == '__main__': + tts = audio.TTS(1) + tts.play(1, 1, 2, 'QuecPython') # 执行播放 + tts.close() # 关闭TTS功能 +``` + + + +## Classes + +- [class TTS](./audio.TTS.md) + +- [class Audio](audio.Audio.md) + +- [class Record](audio.Record.md) + diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/camera.CamCapture.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/camera.CamCapture.md" new file mode 100644 index 00000000..31b3ea55 --- /dev/null +++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/camera.CamCapture.md" @@ -0,0 +1,152 @@ + + +``` +本文阐述了QuecPython的camera.camCapture类的用法,描述了camera.camCapture类最新版本的特性。 +``` + + + +# `class camCapture` - 摄像头扫码 + +`camCapture`对象提供摄像头的拍照及保存功能。 + +> 注意:使用该功能前,需要初始化LCD。 + +**示例:** + +```python +from machine import LCD +import camera + +# 先参照machine.LCD类的内容正确初始化LCD对象 +# lcd = LCD() +# lcd.lcd_init(*args) + +# 定义回调函数 +def cam_callback(para): + # para[0] 拍照结果 0:成功 其它:失败 + print("cam capture result is ", para[0]) + # para[1] 保存图片的名称 + if para[0] == 0: + print("image {} has been saved".format(para[1])) + +# 创建camCapture对象 +cam = camera.camCapture(0,640,480,1,240,240) + +# 使能照相机功能 +cam.open() + +# 设置回调函数 +cam.callback(cam_callback) + +# 拍照并保存 +cam.start(240, 240, "image_demo") + +# 关闭照相机功能 +cam.close() +``` + +## 构造函数 + +### `camera.camCapture` + +```python +class camera.camCapture(model,cam_w,cam_h,perview_level,lcd_w,lcd_h) +``` + +创建camCapture对象。 + +**参数描述:** + +- `model` - camera型号,int类型,0或1,点此查看摄像头型号对应表。 +- `cam_w` - camera水平分辨率,int类型,请按照对应摄像头型号的规格填写。 +- `cam_h` - camera垂直分辨率,int类型,请按照对应摄像头型号的规格填写。 +- `perview_level` - 预览等级,int类型,型号EC600N系列、EC800N系列、EC600M系列、EC800M系列可填写1或2,等级越高,图像越流畅,消耗资源越大;其他型号只可填写1。 +- `lcd_w` - LCD水平分辨率,int类型,请按照所使用的LCD的规格填写。 +- `lcd_h` - LCD垂直分辨率,int类型,请按照所使用的LCD的规格填写。 + +摄像头型号对应表: + +| 编号 | 摄像头型号 | 通信方式 | +| ---- | ---------- | -------- | +| 0 | gc032a | spi | +| 1 | bf3901 | spi | + +## 方法 + +### camCapture.open + +```python +camCapture.open() +``` + +该方法用于使能摄像头的扫码功能。 + +**参数描述** + +无 + +**返回值描述:** + +`0` 表示打开使能成功; + +`其他`表示打开使能失败。 + +### camCapture.close + +```python +camCapture.close() +``` + +该方法用于关闭使能摄像头的扫码功能。 + +**参数描述** + +无 + +**返回值描述:** + +`0` 表示关闭使能成功; + +`其他`表示关闭使能失败。 + +### camCapture.start + +```python +camCaputre.start(width, height, pic_name) +``` + +该方法用于开始拍照保存。 + +**参数描述** + +- `width` - 保存图片水平分辨率,int类型。 +- `height` - 保存图片垂直分辨率,int类型。 +- `pic_name` - 图片名,string类型。图片无需加后缀.jpeg,会自动添加。 + +**返回值描述:** + +`0` 表示拍照保存成功,`其他`表示开始拍照保存失败。 + +注意:拍照结果还是以回调函数参数为主。 + +### camCapture.callback + +```python +def callback(para): + print(para) +camCapture.callback(callback) +``` + +该方法用于设置拍照回调函数 + +**参数描述** + +- `callback` - 拍照回调函数,回调函数原型:function([result, pic_name])->None
回调函数参数: [result, pic_name]
result: 拍照结果(0:成功, 其它:失败)
pic_name: 保存的照片名称 + +**返回值描述:** + +`0` 表示设置拍照回调函数成功; + +`其他`表示设置拍照回调函数失败。 + diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/camera.CamDecoder.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/camera.CamDecoder.md" new file mode 100644 index 00000000..64309cc3 --- /dev/null +++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/camera.CamDecoder.md" @@ -0,0 +1,209 @@ + + +``` +本文阐述了QuecPython的camera.camScandecode类的用法,描述了camera.camScandecode类最新版本的特性。 +``` + + + +# `class camScandecode` - 摄像头扫码 + +`camScandecode`对象提供摄像头的扫码功能。 + +> 注意:如果开启预览,需要先初始化LCD。 + +**示例:** + +```python +from machine import LCD +import camera + +# 如果开启预览,先参照machine.LCD类的内容正确初始化LCD对象 +# lcd = LCD() +# lcd.lcd_init(*args) + +# 如果不开启预览,可不初始化LCD对象 + +# 定义回调函数 +def scan_callback(para): + # para[0] 识别结果 0:成功 其它:失败 + print("scan result is ", para[0]) + # para[1] 识别内容 + if para[0] == 0: + print("decode content is ", para[1]) + +# 创建camScandecode对象 +scaner = camera.camScandecode(0,1,640,480,1,240,240) + +# 开启摄像头扫码功能 +scaner.open() + +# 注册扫码回调函数 +scaner.callback(scan_callback) + +# 开始扫码 +scaner.start() + +# 结束扫码 +scaner.stop() + +# 关闭摄像头扫码功能 +scaner.close() +``` + +## 构造函数 + +### `camera.camScandecode` + +```python +class camera.camScandecode(model,decode_level,cam_w,cam_h,perview_level,lcd_w,lcd_h) +``` + +创建camScandecode对象。 + +**参数描述:** + +- `model` - camera型号,int类型,0或1,点此查看摄像头型号对应表。 +- `decode_level` - 解码等级,int类型,型号EC600N系列、EC800N系列、EC600M系列、EC800M系列可填写1或2,等级越高,图像越流畅,消耗资源越大;其他型号只可填写1。 +- `cam_w` - camera水平分辨率,int类型,请按照对应摄像头型号的规格填写。 +- `cam_h` - camera垂直分辨率,int类型,请按照对应摄像头型号的规格填写。 +- `perview_level` - 预览等级,int类型,型号EC600N系列、EC800N系列、EC600M系列、EC800M系列可填写1或2,等级越高,图像越流畅,消耗资源越大;其他型号只可填写1。 +- `lcd_w` - LCD水平分辨率,int类型,请按照所使用的LCD的规格填写。 +- `lcd_h` - LCD垂直分辨率,int类型,请按照所使用的LCD的规格填写。 + +摄像头型号对应表: + +| 编号 | 摄像头型号 | 通信方式 | +| ---- | ---------- | -------- | +| 0 | gc032a | spi | +| 1 | bf3901 | spi | + +## 方法 + +### camScandecode.open + +```python +camScandecode.open() +``` + +该方法用于使能摄像头的扫码功能。 + +**参数描述** + +无 + +**返回值描述:** + +`0` 表示打开使能成功; + +`其他`表示打开使能失败。 + +### camScandecode.close + +```python +camScandecode.close() +``` + +该方法用于关闭使能摄像头的扫码功能。 + +**参数描述** + +无 + +**返回值描述:** + +`0` 表示关闭使能成功; + +`其他`表示关闭使能失败。 + +### camScandecode.start + +```python +camScandecode.start() +``` + +该方法用于开始摄影头扫码。 + +**参数描述** + +无 + +**返回值描述:** + +`0` 表示开始扫码; + +`其他`表示开始扫码失败。 + +### camScandecode.stop + +```python +camScandecode.stop() +``` + +该方法用于结束摄像头扫码。 + +**参数描述** + +无 + +**返回值描述:** + +`0` 表示结束扫码扫码; + +`其他`表示结束扫码失败。 + +### camScandecode.pause + +```python +camScandecode.pause() +``` + +该方法用于暂停摄像头扫码。 + +**参数描述** + +无 + +**返回值描述:** + +`0` 表示暂停扫码成功; + +`其他`表示暂停扫码失败。 + +### camScandecode.resume + +```python +camScandecode.resume() +``` + +该方法用于继续摄像头扫码。 + +**参数描述** + +无 + +**返回值描述:** + +`0` 表示继续扫码成功; + +`其他`表示继续扫码失败。 + +### camScandecode.callback + +```python +def callback(para): + print(para) +camScandecode.callback(callback) +``` + +该方法用于设置识别回调函数 + +**参数描述** + +- `callback` - 识别回调函数,回调函数原型:function([result, content])->None
回调函数参数: [result, content]
result: 扫码结果(0:成功, 其它:失败)
content: 扫码内容 + +**返回值描述:** + +`0` 表示设置识别回调函数成功; + +`其他`表示设置识别回调函数失败。 \ No newline at end of file diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/camera.CamPreview.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/camera.CamPreview.md" new file mode 100644 index 00000000..4ef19198 --- /dev/null +++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/camera.CamPreview.md" @@ -0,0 +1,97 @@ + + +``` +本文阐述了QuecPython的camera.camPreview类的用法,描述了camera.camPreview类最新版本的特性。 +``` + + + +# `class camPreview` - 摄像头预览 + +`camPreview`对象提供摄像头的预览功能。 + +注意:使用该功能前,需要初始化LCD。 + +**示例:** + +```python +from machine import LCD +import camera + +# 先参照machine.LCD类的内容正确初始化LCD对象 +# lcd = LCD() +# lcd.lcd_init(*args) + +# 创建camPreview对象 +preview = camera.camPreview(0,640,480,240,240,1) + +# 开启摄像头预览 +preview.open() + +# 关闭摄像头预览 +preview.close() +``` + +## 构造函数 + +### `camera.camPreview` + +```python +class camera.camPreview(model,cam_w,cam_h,lcd_w,lcd_h,perview_level) +``` + +创建camPreview对象。 + +**参数描述:** + +- `model` - camera型号,int类型,点此查看摄像头型号对应表。 +- `cam_w` - camera水平分辨率,int类型,请按照对应摄像头型号的规格填写。 +- `cam_h` - camera垂直分辨率,int类型,请按照对应摄像头型号的规格填写。 +- `lcd_w` - LCD水平分辨率,int类型,请按照所使用的LCD的规格填写。 +- `lcd_h` - LCD垂直分辨率,int类型,请按照所使用的LCD的规格填写。 +- `perview_level` - 预览等级,int类型,型号EC600N系列、EC800N系列、EC600M系列、EC800M系列可填写1或2,等级越高,图像越流畅,消耗资源越大;其他型号只可填写1。 + +摄像头型号对应表: + +| 编号 | 摄像头型号 | 通信方式 | +| ---- | ---------- | -------- | +| 0 | gc032a | spi | +| 1 | bf3901 | spi | + +## 方法 + +### camPreview.open + +```python +camPreview.open() +``` + +该方法用于打开摄像头的预览功能。 + +**参数描述** + +无 + +**返回值描述:** + +`0` 表示打开预览成功; + +`其他`表示打开预览失败。 + +### camPreview.close + +``` +camPreview.close() +``` + +该方法用于关闭摄像头的预览功能。 + +**参数描述** + +无 + +**返回值描述:** + +`0` 表示打开预览成功; + +`其他`表示打开预览失败。 \ No newline at end of file diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/camera.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/camera.md" new file mode 100644 index 00000000..59c0db14 --- /dev/null +++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/camera.md" @@ -0,0 +1,72 @@ + + +``` +本文阐述了QuecPython的camera模块的用法,描述了camera模块最新版本的特性。 +``` + + + +# `camera` - 摄像头相关功能 + +`camera`模块包含摄像头相关的功能。包括摄像头预览功能,照相机功能以及扫码功能。 + +模块功能:实现摄像头预览,照相机,扫码功能 + +> 目前支持型号:EC600N系列、EC800N系列、EC600M系列、EC800M系列;EC600U系列和EC200U系列可定制该功能。 +> +> 注意:如果需要预览,在初始化camera对象之前,请先参照machine模块的lcd类的内容正确初始化LCD对象。 + +**示例:** + +```python +from machine import LCD +import camera + +# 如果需要预览,请先参照machine模块的lcd类的内容正确初始化LCD对象 +# lcd = LCD() +# lcd.lcd_init(*args) + +# 摄像头预览功能 +preview = camera.camPreview(0,640,480,240,240,1) +preview.open() +preview.close() + +# 摄像头扫码功能 +def scan_callback(para): + # para[0] 识别结果 0:成功 其它:失败 + print("scan result is ", para[0]) + # para[1] 识别内容 + if para[0] == 0: + print("decode content is ", para[1]) + +scaner = camera.camScandecode(0,1,640,480,1,240,240) +scaner.open() +scaner.callback(scan_callback) +scaner.start() +scaner.stop() +scaner.close() + +# 摄像头照相功能 +def cam_callback(para): + # para[0] 拍照结果 0:成功 其它:失败 + print("cam capture result is ", para[0]) + # para[1] 保存图片的名称 + if para[0] == 0: + print("image {} has been saved".format(para[1])) + +cam = camera.camCapture(0,640,480,1,240,240) +cam.open() +cam.callback(cam_callback) +cam.start(240, 240, "image_demo") +cam.close() +``` + + + +## Classes + +- [class CamPreview - 摄像头预览](./camera.CamPreview.md) + +- [class CamDecoder - 摄像头扫码](camera.CamDecoder.md) + +- [class CamCapture - 摄像头拍照](camera.CamCapture.md) \ No newline at end of file -- Gitee