AudioRecorder
从麦克风录音到指定的文件路径。适用于 macOS、Linux、Windows、iOS、Android 和 Web。 基于 record Dart/Flutter 包。
在 Linux 上,编码由 fmedia 提供,必须单独安装。
AudioRecorder 控件是非可视的,应该添加到 page.overlay
列表中。
要构建使用 AudioRecorder
控件的 Flet 应用程序,请在 flet build
命令中添加 --include-packages flet_audio_recorder
,例如:
flet build apk --include-packages flet_audio_recorder
示例
基本示例
- Python
import flet as ft
async def main(page: ft.Page):
page.horizontal_alignment = ft.CrossAxisAlignment.CENTER
page.appbar = ft.AppBar(title=ft.Text("音频录制器"), center_title=True)
path = "test-audio-file.wav"
async def handle_start_recording(e):
print(f"开始录音: {path}")
await audio_rec.start_recording_async(path)
async def handle_stop_recording(e):
output_path = await audio_rec.stop_recording_async()
print(f"停止录音: {output_path}")
if page.web and output_path is not None:
await page.launch_url_async(output_path)
async def handle_list_devices(e):
devices = await audio_rec.get_input_devices_async()
print(devices)
async def handle_has_permission(e):
try:
print(f"有权限: {await audio_rec.has_permission_async()}")
except Exception as e:
print(e)
async def handle_pause(e):
print(f"正在录音: {await audio_rec.is_recording_async()}")
if await audio_rec.is_recording_async():
await audio_rec.pause_recording_async()
async def handle_resume(e):
print(f"已暂停: {await audio_rec.is_paused_async()}")
if await audio_rec.is_paused_async():
await audio_rec.resume_recording_async()
async def handle_audio_encoding_test(e):
for i in list(ft.AudioEncoder):
print(f"{i}: {await audio_rec.is_supported_encoder_async(i)}")
async def handle_state_change(e):
print(f"状态更改: {e.data}")
audio_rec = ft.AudioRecorder(
audio_encoder=ft.AudioEncoder.WAV,
on_state_changed=handle_state_change,
)
page.overlay.append(audio_rec)
await page.update_async()
await page.add_async(
ft.ElevatedButton("开始录音", on_click=handle_start_recording),
ft.ElevatedButton("停止录音", on_click=handle_stop_recording),
ft.ElevatedButton("列出设备", on_click=handle_list_devices),
ft.ElevatedButton("暂停录音", on_click=handle_pause),
ft.ElevatedButton("继续录音", on_click=handle_resume),
ft.ElevatedButton("测试音频编码", on_click=handle_audio_encoding_test),
ft.ElevatedButton("检查权限", on_click=handle_has_permission),
)
ft.app(target=main)
属性
并非所有属性都在所有平台上 受支持。请检查这个 平台功能对比矩阵 了解各平台支持的属性。
audio_encoding
用于录音的音频编码器。
值的类型为 AudioEncoder
且默认为 AudioEncoder.WAV
。
请参见 这里
了解支持哪些编码的详细概述。
auto_gain
录音机会尝试在一定范围内自动调整录音音量。默认为 False
。
bit_rate
音频编码比特率,以比特每秒为单位。默认为 128000
。
值的类型为 OptionalNumber
cancel_echo
录音机会尝试减少回声。默认为 False
。
channels_num
录音的通道数。1
= 单声道,2
= 立体声。默认为 2
。
sample_rate
音频的采样率,以每秒样本数为单位。默认为 44100
。
值的类型为 OptionalNumber
suppress_noise
录音机会尝试消除输入噪音。默认为 False
。
方法
get_input_devices()
返回一个字典,其值是平台上可用的输入设备。
has_permission()
检查(并可选择请求)音频录制权限。
is_paused()
检查录音会话是否已暂停。
is_recording()
检查是否有有效的录音会话。请注意,如果录音会话已暂停,此方法仍将返回 True
。
is_supported_encoder(encoder)
检查当前平台是否支持给定的 encoder
。
pause()
暂停录音会话。
resume()
在暂停后继续录音会话。
seek(position_milliseconds)
将光标移动到所需位置。
start_recording(output_path)
在指定的 output_path
上开始新的录音会话。在 web 平台之外,必须提供 output_path
。
stop_recording()
停止录音会话并释放内部录音机资源。它返回一个字符串,即录音文件的位置。在 web 平台上,它返回可以使用 page.launch_url()
打开的 blob。在其他平台上,它返回文件路径,即传递给 start_recording()
方法的 output_path
参数。
事件
on_state_changed
当音频录音机的状态改变时触发。事件的 data
包含以下状态之一:
stopped
recording
paused