diff --git a/docs/Advanced_development/zh/QuecPythonSub/Audio.md b/docs/Advanced_development/zh/QuecPythonSub/Audio.md index f1c052c4b7a0711f17821cfc8ed6526bfd318543..99290ca8b9e5993992ce70302632e2a9f8a22f34 100644 --- a/docs/Advanced_development/zh/QuecPythonSub/Audio.md +++ b/docs/Advanced_development/zh/QuecPythonSub/Audio.md @@ -1,31 +1,44 @@ -# QuecPython Audio模块开发 +## 修订历史 +| 版本 | 日期 | 作者 | 变更表述 | +|------|------|------|------| +| 1.0 | 2021-4-6 | gary.zhou | 初版 | ## API简介 -本文以EC600S-CN模块为例,主要介绍QuecPython Audio模块中Audio 的使用。该模块可以用于播放mp3 、wav等格式的文件,包含的API有: - -- ​ **audio.Audio(device)** -- ​ **aud.play(priority, breakin, filename)** -- ​ **aud.stop()** -- ​ **aud.setCallback(usrFun)** -- ​ **aud.getState()** -- ​ **aud.getVolume()** -- ​ **aud.setVolume(vol)** - -具体的API 详解请参考[QuecPython-audio - 音频播放](https://python.quectel.com/wiki/api/#audio) +本文以EC600S-CN模块为例,主要介绍QuecPython Audio模块中Audio 的使用。该模块可以用于播放mp3 、wav等格式的文件。具体的 API 详解请参考[QuecPython-audio - 音频播放](https://python.quectel.com/wiki/api/#audio) 本文档适用于移远通信如下模块: - EC100Y-CN - EC600S-CN +## 使用Audio播放声音 +本文所示代码使用的硬件版本为 EC600S-CN V1.1。 开发板播放声音需要外接喇叭。 -## 使用Audio播放声音 +淘宝链接: + + +![QuecPython_Sub_TTS02](media\QuecPython_Sub_TTS02.png) + + +## 硬件连接 -本文所示代码使用的硬件版本为 EC600S-CN V1.1。 开发板播放声音需要外接喇叭, 具体的喇叭参数以及连接方法请参考《音频播放小实验手册》。 +参考 [EC600S V1.1开发板原理图.pdf](https://python.quectel.com/download) +![QuecPython_Sub_TTS01](media\QuecPython_Sub_TTS01.png) +![QuecPython_Sub_Audio01](media\QuecPython_Sub_Audio01.png) + +VOP : Positive Amplifier Output 正 + +VON : Negative Amplifier Output 负 + +将J7的1号引脚连接功放正极。 + +2号引脚连接负极。由于本次使用的外接喇叭。 在EC600S V1.1 版本上面需要使能GPIO11引脚。 + +Pin(Pin.GPIO11, Pin.OUT, Pin.PULL_PD, 1) 。 才可以播放音频。 ### 播放mp3 @@ -112,7 +125,7 @@ from machine import Pin exited = True - +# 切换播放音量大小参数 def audio_cb(event): global exited # 7表示播放完毕 diff --git a/docs/Advanced_development/zh/QuecPythonSub/TTS.md b/docs/Advanced_development/zh/QuecPythonSub/TTS.md index 1fb98f6501ba78d5ef23d56f5e553a9f2900c723..9d46683d19bc65c8ae8a480eb7350a84a292a2ed 100644 --- a/docs/Advanced_development/zh/QuecPythonSub/TTS.md +++ b/docs/Advanced_development/zh/QuecPythonSub/TTS.md @@ -21,31 +21,8 @@ ## 使用TTS播放声音 -本文所示代码使用的硬件版本为 EC600S-CN V1.1。 开发板播放声音需要外接喇叭。 - -淘宝链接: - - -![QuecPython_Sub_TTS02](media\QuecPython_Sub_TTS02.png) - - -## 硬件连接 - -参考 [EC600S V1.1开发板原理图.pdf](https://python.quectel.com/download) - -![QuecPython_Sub_TTS01](media\QuecPython_Sub_TTS01.png) - -VOP : Positive Amplifier Output 正 - -VON : Negative Amplifier Output 负 - -将J7的1号引脚连接功放正极。 - -2号引脚连接负极。由于本次使用的外接喇叭。 在EC600S V1.1 版本上面需要使能GPIO11引脚。 - -Pin(Pin.GPIO11, Pin.OUT, Pin.PULL_PD, 1) 。 才可以播放音频。 +本文所示代码使用的硬件版本为 EC600S-CN V1.1。 开发板播放声音需要外接喇叭。喇叭参数以及连接方法请参考 [QuecPython-驱动子系统-音频播放](https://python.quectel.com/doc/doc/Advanced_development/zh/QuecPythonSub/Audio.html) - ## 交互小实验 ### 播放TTS diff --git a/docs/Advanced_development/zh/QuecPythonSub/media/QuecPython_Sub_Audio01.png b/docs/Advanced_development/zh/QuecPythonSub/media/QuecPython_Sub_Audio01.png new file mode 100644 index 0000000000000000000000000000000000000000..7db5265b2ee04aac86f62d50ecee45268c9bfdb3 Binary files /dev/null and b/docs/Advanced_development/zh/QuecPythonSub/media/QuecPython_Sub_Audio01.png differ diff --git a/docs/little_demo/zh/QuecPythonTest/record.md b/docs/Advanced_development/zh/QuecPythonSub/record.md similarity index 93% rename from docs/little_demo/zh/QuecPythonTest/record.md rename to docs/Advanced_development/zh/QuecPythonSub/record.md index beed14abee8f1619354c3403655e180f57b2081c..b303b87649c71411d4dd8e17b0669aa44f381597 100644 --- a/docs/little_demo/zh/QuecPythonTest/record.md +++ b/docs/Advanced_development/zh/QuecPythonSub/record.md @@ -1,257 +1,262 @@ -## 录音实验 - -文档主要基于 EC600S 介绍如何使用 QuecPython 的录音功能 。同时说明录音功能的相关 API 的用法。 硬件描述 。 - -### 硬件设计 - -录音功能的硬件设计电路如下: - -![Quectel_QuecPython_录音实验说明_01](media/Quectel_QuecPython_录音实验说明_01.png) - - 图1 录音模块电路原理图 - -![Quectel_QuecPython_录音实验说明_02](media/Quectel_QuecPython_录音实验说明_02.png) - - 图2 开发板录音硬件 - -注意事项 - -(1) 焊接 MIC 时,要注意区分正负极,咪头正负极区分方法如下: - -咪头两个引脚中,有 铜皮连接到了外壳 的那个引脚 就是负极,或者用万用表量, 与外壳连通的引脚 就是负极。 - -![Quectel_QuecPython_录音实验说明_03](media/Quectel_QuecPython_录音实验说明_03.png) - - 图3 咪头正负极说明 - -(2) 外接喇叭播放录音文件时,请使用规格型号为 4Ω 3W 的喇叭。 - -### 软件设计 - -#### 录音 API 说明 - -**创建对象** - -> ***import audio*** -> -> ***record_obj = audio.Reocrd(filename, callback)*** - -参数说明: - -**filename** :保存录音的文件名 - -**callback** :录音回调函数,用于通知用户录音结果、录音文件大小以及文件名 回调函数形式如下: - -```python -def record_callback(args): - print('file_name:{}'.format(args[0])) - print('file_size:{}'.format(args[1])) - print('record_sta:{}'.format(args[2])) -``` - - - -**开始录音** - -> ***record_obj.start(seconds)*** - -参数说明: - -**seconds** :指定录音时长,单位 s - -返回值: - -**0** :正常 - -**-1** : 文件覆盖失败 - -**-2** : 文件打开失败 - -**-3** : 文件正在使用 - -**-4** : 通道设置错误(只能设置 0 或 1) - -**-5** : 定时器资源申请失败 - - - -**停止录音** - -> ***record_obj.stop()*** - -参数说明:无参数 。 - -返回值: 无返回值 。 - - - -**判断录音文件是否存在** - -> ***record_obj.exists()*** - -参数说明:无参数 - -返回值: - -**true** :文件存在 - -**false** :文件不存在 - - - -**获取录音文件保存的路径** - -> ***record_obj.getFilePath()*** - -参数说明:无参数 。 - -返回值: 返回 string 类型的录音文件保存路径。 - - - -**读取录音数据** - -> ***record_obj.getData(offset, size)*** - -参数说明: - -**offset** :偏移位置 - -**size** :读取的长度,单位字节 - -返回值: 正常返回读取的数据 ,失败返回错误码,如下 - -**-1** : 读取数据错误 - -**-2** : 文件打开失败 - -**-3** : 偏移量设置错误 - -**-4** : 文件正在使用 - -**-5** : 设置超出文件大小( offset+size > file_size) - - - -**读取录音文件大小** - -> ***record_obj.getSize()*** - -参数说明:无参数 。 - -返回值: - -成功返回录音文件大小( 此文件有 44byte 的文件头,所以比创建对象传入回调的值大 44),单位字节,失败返回错误码,如下 - -**-1** :获取文件 size 失败 **-2** : 文件打开失败 - -**-3** : 文件正在使用 - - - -**删除录音文件** - -> ***record_obj.Delete()*** - -参数说明:无参数 。 - -返回值: - -**0** :删除成功 - -**-1** :文件不存在 - -**-2** :文件正在使用 - - - -**判断是否正在处理录音** - -> ***record_obj.isBusy()*** - -参数说明:无参数 。 - -返回值: - -**0** :idle - -**1** :busy - - - -### 下载验证 - -#### 实验代码 - -```python -# -*- coding: UTF-8 -*- - -import utime -import checkNet -import audio -from machine import Pin -''' -下面两个全局变量是必须有的,用户可以根据自己的实际项目修改下面两个全局变量的值, -在执行用户代码前,会先打印这两个变量的值。 -''' -PROJECT_NAME = "QuecPython_Record_example" -PROJECT_VERSION = "1.0.0" - -checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION) - -''' -外接喇叭播放录音文件,参数选择0 -''' -aud = audio.Audio(0) -tts = audio.TTS(0) - -''' -外接喇叭播放录音文件,需要下面这一句来使能 -''' -audio_EN = Pin(Pin.GPIO11, Pin.OUT, Pin.PULL_PD, 1) - - -def record_callback(args): - 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, record.getFilePath()) - elif record_sta == -1: - print('The recording failure.') - tts.play(1, 0, 2, '录音失败') - - -if __name__ == '__main__': - ''' - 手动运行本例程时,可以去掉该延时,如果将例程文件名改为main.py,希望开机自动运行时,需要加上该延时, - 否则无法从CDC口看到下面的 poweron_print_once() 中打印的信息 - ''' - # utime.sleep(5) - checknet.poweron_print_once() - - ''' - 如果用户程序包含网络相关代码,必须执行 wait_network_connected() 等待网络就绪(拨号成功); - 如果是网络无关代码,可以屏蔽 wait_network_connected() - ''' - # checknet.wait_network_connected() - - # 用户代码 - '''######################【User code star】########################################''' - print('the recording will begin in 2 seconds. Please be ready!') - utime.sleep(2) - print('start recording!') - record = audio.Record('recordfile.wav', record_callback) - record.start(10) - '''######################【User code end 】########################################''' - -``` - -### 配套代码 - - +## 修订历史 +| 版本 | 日期 | 作者 | 变更表述 | +|------|------|------|------| +| 1.0 | 2021-4-6 | gary.zhou | 初版 | + +## 录音开发 + +文档主要基于 EC600S-CN 介绍如何使用 QuecPython 的录音功能 。同时说明录音功能的相关 API 的用法。 + +### 硬件设计 + +录音功能的硬件设计电路如下: + +![Quectel_QuecPython_录音实验说明_01](media/Quectel_QuecPython_录音实验说明_01.png) + + 图1 录音模块电路原理图 + +![Quectel_QuecPython_录音实验说明_02](media/Quectel_QuecPython_录音实验说明_02.png) + + 图2 开发板录音硬件 + +注意事项 + +(1) 焊接 MIC 时,要注意区分正负极,咪头正负极区分方法如下: + +咪头两个引脚中,有 铜皮连接到了外壳 的那个引脚 就是负极,或者用万用表量, 与外壳连通的引脚 就是负极。 + +![Quectel_QuecPython_录音实验说明_03](media/Quectel_QuecPython_录音实验说明_03.png) + + 图3 咪头正负极说明 + +(2) 外接喇叭播放录音文件时,请使用规格型号为 4Ω 3W 的喇叭。 + +### 软件设计 + +#### 录音 API 说明 + +**创建对象** + +> ***import audio*** +> +> ***record_obj = audio.Reocrd(filename, callback)*** + +参数说明: + +**filename** :保存录音的文件名 + +**callback** :录音回调函数,用于通知用户录音结果、录音文件大小以及文件名 回调函数形式如下: + +```python +def record_callback(args): + print('file_name:{}'.format(args[0])) + print('file_size:{}'.format(args[1])) + print('record_sta:{}'.format(args[2])) +``` + + + +**开始录音** + +> ***record_obj.start(seconds)*** + +参数说明: + +**seconds** :指定录音时长,单位 s + +返回值: + +**0** :正常 + +**-1** : 文件覆盖失败 + +**-2** : 文件打开失败 + +**-3** : 文件正在使用 + +**-4** : 通道设置错误(只能设置 0 或 1) + +**-5** : 定时器资源申请失败 + + + +**停止录音** + +> ***record_obj.stop()*** + +参数说明:无参数 。 + +返回值: 无返回值 。 + + + +**判断录音文件是否存在** + +> ***record_obj.exists()*** + +参数说明:无参数 + +返回值: + +**true** :文件存在 + +**false** :文件不存在 + + + +**获取录音文件保存的路径** + +> ***record_obj.getFilePath()*** + +参数说明:无参数 。 + +返回值: 返回 string 类型的录音文件保存路径。 + + + +**读取录音数据** + +> ***record_obj.getData(offset, size)*** + +参数说明: + +**offset** :偏移位置 + +**size** :读取的长度,单位字节 + +返回值: 正常返回读取的数据 ,失败返回错误码,如下 + +**-1** : 读取数据错误 + +**-2** : 文件打开失败 + +**-3** : 偏移量设置错误 + +**-4** : 文件正在使用 + +**-5** : 设置超出文件大小( offset+size > file_size) + + + +**读取录音文件大小** + +> ***record_obj.getSize()*** + +参数说明:无参数 。 + +返回值: + +成功返回录音文件大小( 此文件有 44byte 的文件头,所以比创建对象传入回调的值大 44),单位字节,失败返回错误码,如下 + +**-1** :获取文件 size 失败 **-2** : 文件打开失败 + +**-3** : 文件正在使用 + + + +**删除录音文件** + +> ***record_obj.Delete()*** + +参数说明:无参数 。 + +返回值: + +**0** :删除成功 + +**-1** :文件不存在 + +**-2** :文件正在使用 + + + +**判断是否正在处理录音** + +> ***record_obj.isBusy()*** + +参数说明:无参数 。 + +返回值: + +**0** :idle + +**1** :busy + + + +### 下载验证 + +#### 实验代码 + +```python +# -*- coding: UTF-8 -*- + +import utime +import checkNet +import audio +from machine import Pin +''' +下面两个全局变量是必须有的,用户可以根据自己的实际项目修改下面两个全局变量的值, +在执行用户代码前,会先打印这两个变量的值。 +''' +PROJECT_NAME = "QuecPython_Record_example" +PROJECT_VERSION = "1.0.0" + +checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION) + +''' +外接喇叭播放录音文件,参数选择0 +''' +aud = audio.Audio(0) +tts = audio.TTS(0) + +''' +外接喇叭播放录音文件,需要下面这一句来使能 +''' +audio_EN = Pin(Pin.GPIO11, Pin.OUT, Pin.PULL_PD, 1) + + +def record_callback(args): + 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, record.getFilePath()) + elif record_sta == -1: + print('The recording failure.') + tts.play(1, 0, 2, '录音失败') + + +if __name__ == '__main__': + ''' + 手动运行本例程时,可以去掉该延时,如果将例程文件名改为main.py,希望开机自动运行时,需要加上该延时, + 否则无法从CDC口看到下面的 poweron_print_once() 中打印的信息 + ''' + # utime.sleep(5) + checknet.poweron_print_once() + + ''' + 如果用户程序包含网络相关代码,必须执行 wait_network_connected() 等待网络就绪(拨号成功); + 如果是网络无关代码,可以屏蔽 wait_network_connected() + ''' + # checknet.wait_network_connected() + + # 用户代码 + '''######################【User code star】########################################''' + print('the recording will begin in 2 seconds. Please be ready!') + utime.sleep(2) + print('start recording!') + record = audio.Record('recordfile.wav', record_callback) + record.start(10) + '''######################【User code end 】########################################''' + +``` + +### 配套代码 + + 下载代码 \ No newline at end of file diff --git a/docs/Advanced_development/zh/sidebar.yaml b/docs/Advanced_development/zh/sidebar.yaml index 55a75912f9d4f583123a77d2a2cae716929d8642..7498a058626a102a6ec9272dbcd18cfa82137f21 100644 --- a/docs/Advanced_development/zh/sidebar.yaml +++ b/docs/Advanced_development/zh/sidebar.yaml @@ -46,6 +46,8 @@ items: items: - label: 音频播放 file: QuecPythonSub/Audio.md + - label: 录音开发 + file: QuecPythonSub/record.md # - label: 录制音频 - label: TTS开发 file: QuecPythonSub/TTS.md diff --git a/docs/little_demo/zh/sidebar.yaml b/docs/little_demo/zh/sidebar.yaml index eb73219c0ceebd398492ae10effe93fd4d0257ac..d5c80ec60b0ff0f089e6f5708f9c5e8e9d7f2def 100644 --- a/docs/little_demo/zh/sidebar.yaml +++ b/docs/little_demo/zh/sidebar.yaml @@ -18,8 +18,6 @@ items: file: QuecPythonTest/External_interrupt.md - label: 独立看门狗实验 file: QuecPythonTest/WDT.md - - label: 录音实验 - file: QuecPythonTest/record.md - label: 传感器 items: - label: 内部温度传感器实验 diff --git a/docs/sbs/zh/sbs/audio.md b/docs/sbs/zh/sbs/audio.md deleted file mode 100644 index 722bfdb9ee86ed74ad1ba6325392dd5672d7ba56..0000000000000000000000000000000000000000 --- a/docs/sbs/zh/sbs/audio.md +++ /dev/null @@ -1,221 +0,0 @@ -### Audio 使用指导 - -#### 播放音频文件 - -目前用户分区大小默认为 5 M,所以放入音频文件的大小不应该超过 5 M,同时还应预留足够的空间存 放用户的应用程序及其他文件。 本 章节主要介绍如何 上传 并播放 存放在用户 分区 根目录, 及存放在根目录 下某个 目录 中的 音频 文件。 - -**将音频文件上传至用户分区的根目录** - -步骤 **1**: 解压 SDK 压缩 包内 *tools* 目录 下的 *QPYcom.zip*, 获取 *QPYcom.exe*。 - -步骤 **2**: 使用 QPYcom.exe 将音频文件上传至模块中,具体上传方式详见《 Quectel_QuecPython_基 - -础操作说明 》。 - -步骤 **3**:上传 音频文件至用户分区的根目录。 假设 音频文件名称为 *music.mp3*,在 音频文件所在目录下 - -打开 cmd, 执行如下命令: - -```python -QuecPyComTools.exe -d COM20 -b 115200 -f cp music.mp3 :/ -``` - -- **说明** - --d 后面 的参数 COM20 应为 实际 CDC 口。 - -- **示例** - -![Quectel_QuecPython_Audio_file_play_016.png](media/Quectel_QuecPython_Audio_file_play_016.png) - -步骤 **4**: 查看用户根目录下是否有 *music.mp3* 文件。 通过 Xshell 连接 模块的 CDC 口 ,进入命令交互 - -界面,执 行 如下 命令 : - -```shell ->>> uos.listdir() -``` - -- **说明** - -```shell -“ >>>” 表示这是在模块的命令交互行 -``` - -- **示例** - -![Quectel_QuecPython_Audio_file_play_018.png](media/Quectel_QuecPython_Audio_file_play_018.png) - -步骤 **5**:播放音频文件 。通过命令交互界面依次执行如下命令,即可播放。 - -```shell ->>> import audio #导入音频播放库 - ->>> a = audio.Audio(1) #创建一个音频对象, 此处 选择耳机通道,所以参数为 1 ->>> a.play(1, 0, 'U:/music.mp3') # 设定优先级为 1,不可被打断,播放该音频文件 -``` - - - -- **说明** - -创建一个音频对象, 此处 选择耳机通道,所以参数为 1,其他参数请参 《Quectel_QuecPython_ 类库 API 说明》 相关模块说明部分 。 - -- **示例** - -![Quectel_QuecPython_Audio_file_play_020.png](media/Quectel_QuecPython_Audio_file_play_020.png) - -**备注** : 用户分区盘符目前固定为 U,播放时必须为绝对路径,比如 U:/path/filename,如果直接放到根目录下, 则为 U:/filename。 - -**将 音频文件上传至用户分区根目录 下 的audio目录** - -步骤 **1**:在 用户分区根目录下创建 *audio* 目录。 通过命令交互界面执行如下命令。 - -```shell ->>> uos.mkdir('audio') -``` - -- **示例** - -![Quectel_QuecPython_Audio_file_play_023.png](media/Quectel_QuecPython_Audio_file_play_023.png) - -步骤 **2**: 断开 Xshell 与模块 CDC 口的连接 , 否则 CDC 被 占用, 将 导致 *QPYcom.exe* 工具执 行失败 (若 使用的 是其它工具,请断开其它工具与 CDC 口的连接) - -步骤 **3**:上传 音频文件至用户分区根目录 下 的 *audio* 目录 。假设 音频文件名称为 *music.mp3*,在 音频文 - -件所在目录下打开 cmd, 执行如下 命令: - -```shell -QuecPyComTools.exe -d COM20 -b 115200 -f cp music.mp3 :/audio/ -``` - -- **说明** - -最后一个‘ **/**’不能缺失 。 - -- **示例** - -![Quectel_QuecPython_Audio_file_play_025.png](media/Quectel_QuecPython_Audio_file_play_025.png) - -步骤 **4**: 查看用户根目录 的 *audio* 目录 下是否有 *music.mp3* 文件。通过 Xshell 重新连接 模块的 CDC - -口 ,进入命令交互界面 , 执行如下命令: - -```shell ->>> uos.listdir() ->>> uos.listdir('audio') -``` - -- **示例** - -![Quectel_QuecPython_Audio_file_play_027.png](media/Quectel_QuecPython_Audio_file_play_027.png) - -步骤 **5**:播放音频文件 。 通过命令交互界面依次执行如下命令,即可播放。 - -```shell ->>> import audio #导入音频播放库 ->>> a = audio.Audio(1) #创建一个音频对象, 此处 选择耳机通道,所以参数为 1 ->>> a.play(1, 0, ‘U:/audio/music.mp3’) #设定优先级为 1,不可被打断,播放该音频文件 -``` - -- **说明** - -创建一个音频对象,此处 选择耳机通道,所以参数为 1,其他参数请参 《Quectel_QuecPython_ 类库 API 说明》相关模块说明部分 。 - -![Quectel_QuecPython_Audio_file_play_029.png](media/Quectel_QuecPython_Audio_file_play_029.png) - -#### 删除音频文件 - -本章节主要介绍如何删除 存放在用户分区根目录 ,及存放在根目录下某个目录中的音频文件。 - -**删除用户分区的根目录 下 的音频文件** - -步骤 **1**:通过 Xshell 或 其他同类工具连接到模块 CDC 口 。 - -步骤 **2**:删除 音频文件。 进入 命令交互界面后,执行如下命令 : - -```shell ->>> uos.remove('music.mp3') #删除音频文件 ->>> uos.listdir() #查看删除结果,确认文件是否删除成功 -``` - -- **示例** - -![Quectel_QuecPython_Audio_file_play_031.png](media/Quectel_QuecPython_Audio_file_play_031.png) - -​ 此时用户分区根目录下的音频 文件 已被删除。 - -**删除用户分区根目录 下的某个 目录下的音频文件** - -步骤 **1**:通过 Xshell 或 其他同类工具连接到模块 CDC 口 。 - -步骤 **2**:删除 音频文件。 进入 命令交互界面后,执行如下命令 : - -```shell ->>> uos.remove('audio/music.mp3') #删除音频文件 ->>> uos.listdir('audio') #查看删除结果,确认文件是否删除成功 -``` - - - -#### 批量打包音频文件至用户分区 - -实际应用 中,用户可能 提前将音频文件打包到用户分区中,然后利用工具将其打包到固件 并 对设备进行 升级 。本章节介绍如何利用打包工具将音频文件打包至 用户分区中 。 - -步骤 **1**: 从 QuecPython 官网 http://qpy.quectel.com/down.html 下载 SDK 包 。 - -![Quectel_QuecPython_Audio_file_play_033.png](media/Quectel_QuecPython_Audio_file_play_033.png) - -​ 图 **1**: 下载 **SDK** 包 - -步骤 **2**: 解压 SDK 包 , 并进入 *tools* 目录 下 , 解压 *littlefs_tools.zip*。 - -![Quectel_QuecPython_Audio_file_play_034.png](media/Quectel_QuecPython_Audio_file_play_034.png) - -​ 图 **2**: ***littlefs_tools*** 目录下的 文件 - -步骤 **3**: 将 需要打包的音频文件存放至 *littlefs_tools/mount* 目录下 , 此处 以 *music.mp3* 为例 。 - -![Quectel_QuecPython_Audio_file_play_035.png](media/Quectel_QuecPython_Audio_file_play_035.png) - -图 **3**: 上传 **music.mp3** 音频文件 至 **littlefs_tools/mount** - -**备注** : - -1. 请勿删除 mount 目录下默认的 apn 配置文件。 - -2. 目前用户分区大小默认为 5 M,所以放入音频文件的大小不应该超过 5 M,同时还应预留足够的空间 存放用户的应用程序及其他文件。 - -步骤 **4**: 返回 至 *littlefs_tools* 目录 , 即 *mklfs.exe* 所在的目录 。 在该目录 下打开 cmd, 然后输入如下命 - -令 。 - -```shell -mklfs.exe -c mount -b 4096 -r 4096 -p 4096 -s 1048576 -i customer_fs.bin -``` - -- **说明** - -1. 上述命令参数中 -s 参数后面的数字表示生成文件系统镜像的大小,单位字节,此处 生成 1M 大小的镜像,即 1024 x 1024Byte = 1048579 Bytes;如果用户分区大小有变化,不 为 1 M, 则需要根据实际情况修改该参数,以生成大小匹配的文件镜像。 -1. 默认生成的文件镜像名称就是 customer_fs.bin,暂不支持用户修改该 名称。 - -- **示例** - -![Quectel_QuecPython_Audio_file_play_038.png](media/Quectel_QuecPython_Audio_file_play_038.png) - -步骤 **5**:步骤 4 执行 成功后 ,将在 *littlefs_tools* 目录下 生成文件系统镜像文件 *customer_fs.bin*,将其打 - -` `包至固件包。 - -![Quectel_QuecPython_Audio_file_play_039.png](media/Quectel_QuecPython_Audio_file_play_039.png) - -​ 图 **4**: 打包 镜像文件 **customer_fs.bin** 至版本包 - -#### 附录术语缩写 - -表 **1**: 术语缩写 - -| 缩写 | 英文全称 | 中文全称 | -| ---- | --------------------------------- | ---------------- | -| SDK | Software Development Kit | 软件开发工具包 | -| API | Application Programming Interface | 应用程序编程接口 | \ No newline at end of file diff --git a/docs/sbs/zh/sbs/bus.md b/docs/sbs/zh/sbs/bus.md index 7704f3f3a6e833c09642d9e7ebafcda091022592..0e504790d8996a4061e2d7f885c82a72c8fecc28 100644 --- a/docs/sbs/zh/sbs/bus.md +++ b/docs/sbs/zh/sbs/bus.md @@ -9,9 +9,9 @@ ## ADC数模转换 -​数字信号和模拟信号转换器 ADC,称为数模转换器, CPU 本身是数字的,但是外 部的一些变量是模拟 的,所以需要利用数字技术处理外部模拟的物理量。 模拟信号,是一个连续的信号,现实生活中的时间,电 压,高度等就是模拟信号,反应在数学里就是无限细分的值。 +​数字信号和模拟信号转换器 ADC,称为数模转换器, CPU 本身是数字的,但是外部的一些变量是模拟的,所以需要利用数字技术处理外部模拟的物理量。模拟信号,是一个连续的信号,现实生活中的时间,电压,高度等就是模拟信号,反应在数学里就是无限细分的值。 -​数模转换就是把模拟信号按照一定精度进行采样,变成有限多个数字量,这个过程就是数模转换,数字 化之后就可以在计算机中用数字来描述模拟量,是计算机技术的基础,计算机所有参与运算的都是数字量, 如果参与计算的有模拟量,就需要使用数模转换器将模拟量转换为数字量来参与运算,同样,也 可以通过使 用有积分和微分效果的器件来将数字信号转换为模拟信号。 +​数模转换就是把模拟信号按照一定精度进行采样,变成有限多个数字量,这个过程就是数模转换,数字化之后就可以在计算机中用数字来描述模拟量,是计算机技术的基础,计算机所有参与运算的都是数字量, 如果参与计算的有模拟量,就需要使用数模转换器将模拟量转换为数字量来参与运算,同样,也可以通过使用有积分和微分效果的器件来将数字信号转换为模拟信号。 QuecPython 开发板中ADC输入引脚如下图所示 。 diff --git a/docs/sbs/zh/sbs/file.md b/docs/sbs/zh/sbs/file.md index 395e55443fb136d9115de0170af29bd7b4872495..a91d64529586ab7c5aa693c8084d58724e53dbb3 100644 --- a/docs/sbs/zh/sbs/file.md +++ b/docs/sbs/zh/sbs/file.md @@ -190,9 +190,9 @@ print('剩余RAM空间:{}KB'.format(mem / 1024)) 图 **9**: 获取ROM、RAM信息 +#### 获取文件读写速度 - - +文件读写速度待内部调研补充,暂时无此数据。 ### 附录术语缩写 diff --git a/docs/sbs/zh/sbs/record.md b/docs/sbs/zh/sbs/record.md deleted file mode 100644 index 1aa36adbf8772d1d262fd50a638ed11a3b1ca058..0000000000000000000000000000000000000000 --- a/docs/sbs/zh/sbs/record.md +++ /dev/null @@ -1,313 +0,0 @@ -### Record拾音 使用指导 - -#### 录音接口函数 - -**创建record对象** - -```python -import audio - -record = audio.Record(file_name,callback) -``` - -- **参数** - -*file_name*: - -字符串 ,录音文件名 。 - -*callback*: - -录音结束的回调函数 。 - -- **返回值** - -返回 *-1* 表示创建失败 ; 若返回对象 ,则表示创建成功 。 - -- **示例** - -```python -import audio -def record_callback(para): - print("file_name:",para[0]) # 返回文件路径 - print("audio_len:",para[1]) # 返回录音长度 - print("audio_state:",para[2]) # 返回录音状态 -1: error 3: 成功 - -record_test = audio.Record("record_test.wav",record_callback) -``` - - - -**record.start** - -开始录音 。 - -- **函数原型** - -```python -record.start(seconds) -``` - -- **参数** - -*seconds*: - -整型 。 需要录制时长。 单位:秒 。 - -- **返回值** - -*0* 成功 ; - -*-1* 文件覆盖失败 ; - -*-2* 文件打开失败 ; - -*-3* 文件正在使用 ; - -*-4* 通道设置错误(只能设置 0 或 1); - -*-5* 定时器资源申请失败 。 - -- **示例** - -```python -record.start(40) -``` - - - -**record.stop** - -停止录音 。 - -- **函数原型** - -```python -record.stop() -``` - -- **参数** - - 无 - -- **返回值** - - 无 - -- **示例** - -```python -record_test.stop() -``` - - - -**record.getFilePath** - -读取录音文件的路径 。 - -- **函数原型** - -```python -record.getFilePath() -``` - -- **参数** - - 无 - -- **返回值** - -录音文件的路径 ,字符串 。 - -- **示例** - -```python -record_test.getFilePath() -``` - -**record.getData** - -读取录音数据 。 - -- **函数原型** - -```python -record.getData(offset, size) -``` - -- **参数** - -*offset*: - -整型 。 读取数据的偏移量 。 - -*size*: - -整型 。读取大小 ,需小于10K。 - -- **返回值** - -*1* 读取数据错误 ; - --*2* 文件打开失败 ; - -*-3* 偏移量设置错误 ; - -*-4* 文件正在使用 ; - -*-5* 设置超出文件大小 (offset+size > file_size); *-6* 读 size 大于 10K; - -*-7* 内存不足 10K bytes: 返回数据 。 - -- **示例** - -```python -record_test.getData(0, 44) # 读取文件头 -``` - - - -**record.getSize** - -读取录音文件大小 。 - -- **函数原型** - -```python -record.getSize() -``` - -- **参数** - - 无 - -- **返回值** - -若获取成功,返回文件大小 ,此值会比返回 callback 返回值大 44 bytes(44 bytes 为文件头): 否则 : - -*-1* 获取文件 大小 失败 ; - -*-2* 文件打开失败 ; - -*-3* 文件正在使用 ; - -- **示例** - -```python -record_test.getSize() -``` - - - -**record.Delete** - -删除录音文件 。 - -- **函数原型** - -```python -record.Delete() -``` - -- **参数** - - 无 - -- **返回值** - -*0* 成功 - -*-1* 文件不存在 - -*-2* 文件正在使用 - -- **示例** - -```python -record_test.Delete() -``` - - - -**record.exists** - -判断录音文件是否存在 。 - -- **函数原型** - -```python -record.exists() -``` - -- **参数** - - 无 - -- **返回值** - -*TRUE* 文件存在 - - *FALSE* 文件不存在 - - - -**record.isBusy** - -- **函数原型** - -```python -record.isBusy() -``` - -- **参数** - - 无 - -- **返回值** - -*0* IDEL - -*1* BUSY - -- **返回值** - -```python -record_test.isBusy() -``` - - - -#### 示例 - -**Record流程脚本命令** - -*record* 流程的脚本命令汇总如下 : - -```python -import audio - -def record_callback(para): - print("file_name:",para[0]) - print("audio_len:",para[1]) - print("audio_state:",para[2]) - -record_test = audio.Record("record_test.wav",record_callback) record_test.isBusy() -record_test.start(40) -record_test.isBusy() -record_test.stop() -record_test.getFilePath() -record_test.getData(0, 44) -record_test.getSize() -record_test.Delete() -record_test.exists() -record_test.isBusy() -``` - - - -**脚本执行结果** - -脚本执行结果分别下图所示: - -![Quectel_sbs_record_API_029.png](media/Quectel_sbs_record_API_029.png) \ No newline at end of file