文档版本: stable (v0.6.2)
远程录音与录音设置¶
适用设备
本文档适用于 OpenZilo Q。
用 Python 或命令行开始、停止录音,并设置声道、码率、增益和最长录音时间。录音可以保存在戒指中,也可以实时发送到电脑,或同时进行。
固件版本
此用法需要固件 V2.001.0002.0001 或更新版本。V2.001.0002.0000 不提供远程开始、停止、状态查询和录音设置接口。
用命令行录一段音频¶
固件版本
此用法需要固件 V2.001.0002.0001 或更新版本。
先选择设备,再录制 5 秒并下载到电脑:
uv run openzilo device use
uv run openzilo audio-record recordings/test.wav --seconds 5 --channels 1
生成 WAV 需要安装 ffmpeg。查看当前设置和录音状态:
uv run openzilo audio-config
uv run openzilo audio-status
完整命令见 命令行指南。
用 Python 录音并保存¶
固件版本
此用法需要固件 V2.001.0002.0001 或更新版本。
将 ADDRESS 替换成扫描得到的地址。示例把录音保存在戒指中,5 秒后自动结束,确认保存完成后再下载:
import asyncio
import openzilo as sdk
ADDRESS = "AA:BB:CC:DD:EE:FF"
async def main():
ring = await sdk.connect_ring(address=ADDRESS)
try:
if not ring.capabilities.supports("recording_control"):
print("当前设备没有提供可用的远程录音接口")
return
config = sdk.AudioRecordingConfig(
output=sdk.AudioOutput.FLASH,
channels=1,
bitrate=16000,
max_duration_ms=5000,
)
await sdk.set_audio_recording_config(ring, config)
session_id = await sdk.start_audio_recording(ring)
status = await sdk.wait_audio_recording_finished(ring, session_id)
if status.saved:
info, data = await sdk.download_audio_file(ring, status.file_index)
bundle = sdk.save_audio_bundle(
file_index=info.file_index, data=data, output_dir="recordings",
)
print(bundle.play_path)
finally:
await ring.disconnect()
asyncio.run(main())
调整录音设置¶
固件版本
此用法需要固件 V2.001.0002.0001 或更新版本。
用 get_audio_recording_config() 读取,用 set_audio_recording_config() 修改。设置只能在未录音时修改;断开重连后保留,设备重启后恢复默认值。
| 设置 | 参数 | 可选值或范围 |
|---|---|---|
| 输出方式 | output |
AUTO 自动选择、FLASH 保存在设备、LIVE 实时发送、LIVE_AND_FLASH 同时发送和保存 |
| 声道 | channels |
1 或 2 |
| 码率 | bitrate |
8000–32000 bit/s |
| 数字增益 | gain_left_q8、gain_right_q8 |
0–1024,256 表示 1 倍 |
| 最长录音时间 | max_duration_ms |
20–60000 毫秒,须为 20 的整数倍 |
| 断线处理 | disconnect_policy |
STOP 停止,或 CONTINUE_SAVING 继续保存在设备 |
采样率固定为 16 kHz,每帧 20 ms。设备还会返回自己允许的参数范围,SDK 会在发送设置前检查。Opus 编码器的其余固定参数可以读取,不能通过此接口修改。
CONTINUE_SAVING 只能与 FLASH 或 LIVE_AND_FLASH 搭配使用。
提前结束或取消录音¶
固件版本
此用法需要固件 V2.001.0002.0001 或更新版本。
start_audio_recording() 返回本次录音的 session_id,不表示录音已经结束。提前停止时执行:
await sdk.stop_audio_recording(ring, session_id)
status = await sdk.wait_audio_recording_finished(ring, session_id)
如需丢弃尚未保存的录音,传入 cancel=True。停止命令收到响应后,仍需查询或等待录音完成,才能确认文件是否保存。
如果开始命令超时,先调用 get_audio_recording_status() 查询,避免重复发送开始命令。session_id 只在本次设备启动期间有效,重启后不能沿用。
实时发送并保留设备副本¶
固件版本
此用法需要固件 V2.001.0002.0001 或更新版本。
选择 LIVE 或 LIVE_AND_FLASH 时,要先订阅实时音频,再开始录音。可在 receive_live_audio_file() 的 on_subscribed 回调里调用 start_audio_recording()。完整示例见 remote_recording.py。
实时传输中断后不能续接这一段音频。选择同时保存时,设备上的副本可在录音保存完成后单独下载。仅实时发送时,断线会使该次传输失败。
接口速查¶
固件版本
此用法需要固件 V2.001.0002.0001 或更新版本。
| 接口 | 返回结果 |
|---|---|
get_audio_recording_config(ring) |
当前录音设置 AudioRecordingConfig |
set_audio_recording_config(ring, config) |
设备返回的录音设置 |
start_audio_recording(ring) |
本次录音编号 session_id |
stop_audio_recording(ring, session_id, cancel=False) |
设备确认的录音编号 |
get_audio_recording_status(ring) |
AudioRecordingStatus,含状态、是否保存、文件索引与错误码 |
wait_audio_recording_finished(ring, session_id, timeout_s=75.0, poll_interval_s=0.2) |
录音结束后的状态;失败时抛出异常 |
上表除等待结束接口外,均可用 timeout_s 设置单次请求超时。以上接口均需通过 await 调用。