前端跨平台桌面应用移动开发【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址https://gitcode.com/gh_mirrors/fl/flet点击查看免费下载导读AudioRecorderUploadSettings是 Flet 音频录制服务flet-audio-recorder中用于**边录边传流式上传**的配置类型它将录音过程中产生的音频字节流直接上传到指定 URL而无需等录音结束再处理文件。本文以该类型为核心逐字段讲解其含义与默认值结合AudioRecorder.start_recording()的源码校验逻辑与官方上传示例说明如何把它与Page.get_upload_url()、on_upload事件配合搭建一套录制即上传的完整流程。类型概述为边录边传而生在 Flet 中AudioRecorder服务文档见 audiorecorder/index.md支持两种取回录音数据的方式本地保存文件、或流式输出。流式输出又分为两条路径on_stream回调把原始音频块chunk送到 Python 端upload参数把原始音频字节流直接上传到远程 URL。AudioRecorderUploadSettings正是第二条路径的配置载体。它定义在 types.py 中是一个基于ft.value的值类型dataclass 风格通过start_recording(upload...)传入from flet_audio_recorder import AudioRecorder, AudioRecorderUploadSettings recorder AudioRecorder() await recorder.start_recording( output_pathNone, configuration..., uploadAudioRecorderUploadSettings(...), )关键语义当传入upload时start_recording进入流式上传模式发送的是原始AudioEncoder.PCM16BITS字节不会自动包装成 WAV 等可播放的音频容器。这也是官方示例中上传文件使用.pcm扩展名的原因。字段详解AudioRecorderUploadSettings共定义四个字段下面逐一说明其类型、默认值与使用场景均以 types.py 的 docstring 为准。upload_url必填类型str默认值无必填作用接收上传字节流的目标 URL。官方文档推荐使用flet.Page.get_upload_url()生成的签名上传地址。该方法是 Flet 内置上传能力的一部分——服务端只接受带签名令牌的请求从而避免公开目录被任意写入。method默认PUT类型str默认值PUT作用上传请求使用的 HTTP 方法。默认PUT与 Flet 内置上传存储upload_dir的写入方式一致。如需对接其他自定义后端可改为POST等但需确保目标服务端与所选方法匹配。headers可选请求头类型Optional[dict[str, str]]默认值None作用随上传请求一并发送的 HTTP 头可用于携带Authorization、Content-Type等自定义认证或元数据信息。far.AudioRecorderUploadSettings( upload_urlupload_url, methodPOST, headers{Authorization: Bearer token, Content-Type: application/octet-stream}, )file_name可选友好名称类型Optional[str]默认值None作用一个友好名称仅用于在后续上传事件AudioRecorderUploadEvent.file_name中报告方便在on_upload回调中区分是哪一次录制的上传进度并不会改变实际上传的字节内容。far.AudioRecorderUploadSettings( upload_urlupload_url, file_namerecordings/rec-1700000000.pcm, )与其他 API 的配合关系1.start_recording()的流式校验逻辑AudioRecorderUploadSettings通过AudioRecorder.start_recording()的upload参数生效audio_recorder.py。源码中有两条关键校验理解它们可以避免踩坑文件路径校验当upload is not None or on_stream is not None时视为流式模式is_streaming此时不再要求output_path反之在非 Web 平台上不提供output_path会抛出ValueError。编码器校验流式模式强制要求effective_configuration.encoder AudioEncoder.PCM16BITS否则抛出raise ValueError(Streaming recordings require AudioEncoder.PCM16BITS as encoder.)因此凡是用upload做流式上传都必须把AudioRecorderConfiguration.encoder设置为AudioEncoder.PCM16BITS。2. 上传进度与错误通过on_upload事件返回上传过程中进度与错误通过AudioRecorder.on_upload回调投递事件类型为AudioRecorderUploadEvent定义见 types.py文档见 audiorecorderuploadevent.md包含四个字段字段类型说明file_nameOptional[str]即AudioRecorderUploadSettings.file_name传入的名称progressOptional[float]上传进度0.0~1.0流式上传在录音停止前不知道总大小因此录制进行中bytes_uploaded通常是更好的进度指标bytes_uploadedOptional[int]当前已上传的字节数errorOptional[str]上传失败时的错误消息def handle_upload(e: far.AudioRecorderUploadEvent): if e.error: status.value fUpload error: {e.error} elif e.progress 1: status.value fUpload complete: {e.bytes_uploaded or 0} bytes. else: status.value fUploading: {e.bytes_uploaded or 0} bytes sent. recorder far.AudioRecorder(on_uploadhandle_upload)3. 数据流向录制 → PCM16 流 → 上传整体数据流可概括为调用recorder.start_recording(uploadsettings, configuration...)底层通过_invoke_method(start_recording, ...)把output_path、configuration、upload序列化传给平台实现平台录音器以PCM16BITS编码产生原始 PCM16 字节流字节流按methodheaders规则写入upload_url期间通过on_upload持续派发AudioRecorderUploadEvent字节数、进度、错误调用await recorder.stop_recording()结束录制上传随之收尾。完整实战录制即上传以下示例来自仓库中的官方示例 upload/main.py展示了AudioRecorderUploadSettings的完整用法下面加入关键注释便于直接运行与改造import time import flet as ft import flet_audio_recorder as far def main(page: ft.Page): page.horizontal_alignment ft.CrossAxisAlignment.CENTER def show_snackbar(message: str): page.show_dialog(ft.SnackBar(contentmessage, durationft.Duration(seconds5))) def handle_upload(e: far.AudioRecorderUploadEvent): if e.error: status.value fUpload error: {e.error} elif e.progress 1: status.value fUpload complete: {e.bytes_uploaded or 0} bytes. else: status.value fUploading: {e.bytes_uploaded or 0} bytes sent. async def handle_recording_start(e: ft.Event[ft.Button]): if not await recorder.has_permission(): show_snackbar(Microphone permission is required.) return file_name frecordings/rec-{int(time.time())}.pcm try: # 1. 申请一个带签名的上传地址600 秒内有效 upload_url page.get_upload_url(file_namefile_name, expires600) except RuntimeError as ex: if FLET_SECRET_KEY not in str(ex): raise status.value ( Uploads require a secret key. Set FLET_SECRET_KEY before running this app. ) show_snackbar(status.value) return status.value Recording... # 2. 传入 upload 设置 PCM16BITS 编码器启动边录边传 await recorder.start_recording( uploadfar.AudioRecorderUploadSettings( upload_urlupload_url, file_namefile_name, ), configurationfar.AudioRecorderConfiguration( encoderfar.AudioEncoder.PCM16BITS, channels1, ), ) async def handle_recording_stop(e: ft.Event[ft.Button]): await recorder.stop_recording() show_snackbar( Recording stopped. See uploads/recordings folder for the recorded file. ) recorder far.AudioRecorder(on_uploadhandle_upload) page.add( ft.SafeArea( contentft.Column( horizontal_alignmentft.CrossAxisAlignment.CENTER, controls[ ft.Text(Record PCM16 audio and upload it as it streams.), ft.Button(Start upload, on_clickhandle_recording_start), ft.Button(Stop recording, on_clickhandle_recording_stop), status : ft.Text(), ], ), ) ) if __name__ __main__: ft.run( main, upload_diruploads, # 声明上传存储目录 )要点拆解权限先行启动前先await recorder.has_permission()检查麦克风权限未授权则提示并中止签名 URLpage.get_upload_url(file_name..., expires600)生成临时上传地址官方文档 audiorecorder/index.md 明确指出内置上传 URL 需要上传存储upload storage与签名密钥——运行应用时必须同时指定upload_dir并设置环境变量FLET_SECRET_KEY参见 environment-variables.md 中的FLET_SECRET_KEY说明编码器约束配置里必须使用AudioEncoder.PCM16BITS否则start_recording直接抛ValueError停止即收尾stop_recording()结束后文件会出现在服务端upload_dir对应的上传目录下示例中即uploads/recordings文件夹。上传产物说明为什么是.pcm需要特别强调的是上传到服务端的内容是原始 PCM16 字节流没有 WAV 等容器封装因此文件扩展名使用.pcm是有意为之该文件不能直接作为音频播放若需要可播放的音频文件可参考 stream_and_download/main.py 的做法用 Python 标准库wave模块把 PCM16 字节包进 WAV 容器setnchannels/setsampwidth/setframeratewriteframes再交给FilePicker.save_file()保存或下载。小结AudioRecorderUploadSettings是 Flet 音频录制的流式上传配置类型四个字段覆盖目标地址upload_url、HTTP 方法method默认PUT、自定义请求头headers与事件友好名file_name它必须配合AudioRecorder.start_recording(upload...)使用且编码器必须是AudioEncoder.PCM16BITS上传进度与错误通过on_upload事件AudioRecorderUploadEvent返回流式场景下优先参考bytes_uploaded使用Page.get_upload_url()时需以upload_dir启动应用并配置FLET_SECRET_KEY上传产物为无容器的原始 PCM16 字节需要播放文件时应自行封装 WAV。相关源码与文档入口类型定义 types.py、服务实现 audio_recorder.py、完整示例 upload/main.py、服务索引文档 audiorecorder/index.md。赞分享前端跨平台桌面应用移动开发【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址https://gitcode.com/gh_mirrors/fl/flet点击查看免费下载相关推荐Flet AudioRecorder 音频录制服务完整指南平台配置、流式录制与上传实战Flet AudioRecorder 音频录制服务完整指南平台配置、流式录制与上传实战 Flet 的 flet audio recorder 扩展包为纯 Py前端跨平台桌面应用移动开发flet-audio-recorder 实战指南在 Flet 应用中实现跨平台录音与音频流式上传flet audio recorder 实战指南在 Flet 应用中实现跨平台录音与音频流式上传 flet audio recorder 是 Flet 生态的前端跨平台桌面应用移动开发5分钟终极指南用G-Helper释放华硕笔记本全部性能潜力5分钟终极指南用G Helper释放华硕笔记本全部性能潜力 还在为华硕笔记本的性能瓶颈而烦恼吗游戏卡顿、风扇噪音大、电池续航短这些问题其实都可以通过一款轻前端跨平台桌面应用移动开发上一篇推荐项目pillarjs/cookies下一篇10倍提升JS性能Buckets-JS数据结构库实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
