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