音频 Audio
一个可以同时播放多个音频文件的控件。适用于 macOS、Linux、Windows、iOS、Android 和 Web。基于 audioplayers Flutter 小部件。
音频控件是非可视化的,应该添加到 page.overlay
列表中。
要构建使用 Audio
控件的 Flet 应用程序,请在 flet build
命令中添加 --include-packages flet_audio
,例如:
flet build apk --include-packages flet_audio
示例
自动播放音频
- Python
自动播放在桌面、移动应用和 Safari 浏览器中有效,但在 Chrome/Edge 中无效。
import flet as ft
def main(page: ft.Page):
audio1 = ft.Audio(
src="https://luan.xyz/files/audio/ambient_c_motion.mp3", autoplay=True
)
page.overlay.append(audio1)
page.add(
ft.Text("这是一个带背景音频的应用。"),
ft.ElevatedButton("停止播放", on_click=lambda _: audio1.pause()),
)
ft.app(target=main)
带播放控件的音频
- Python
import flet as ft
url = "https://github.com/mdn/webaudio-examples/blob/main/audio-analyser/viper.mp3?raw=true"
def main(page: ft.Page):
def volume_down(_):
audio1.volume -= 0.1
audio1.update()
def volume_up(_):
audio1.volume += 0.1
audio1.update()
def balance_left(_):
audio1.balance -= 0.1
audio1.update()
def balance_right(_):
audio1.balance += 0.1
audio1.update()
audio1 = ft.Audio(
src=url,
autoplay=False,
volume=1,
balance=0,
on_loaded=lambda _: print("加载完成"),
on_duration_changed=lambda e: print("持续时间变化:", e.data),
on_position_changed=lambda e: print("位置变化:", e.data),
on_state_changed=lambda e: print("状态变化:", e.data),
on_seek_complete=lambda _: print("定位完成"),
)
page.overlay.append(audio1)
page.add(
ft.ElevatedButton("播放", on_click=lambda _: audio1.play()),
ft.ElevatedButton("暂停", on_click=lambda _: audio1.pause()),
ft.ElevatedButton("继续", on_click=lambda _: audio1.resume()),
ft.ElevatedButton("释放", on_click=lambda _: audio1.release()),
ft.ElevatedButton("定位到2秒", on_click=lambda _: audio1.seek(2000)),
ft.Row(
[
ft.ElevatedButton("降低音量", on_click=volume_down),
ft.ElevatedButton("提高音量", on_click=volume_up),
]
),
ft.Row(
[
ft.ElevatedButton("左声道", on_click=balance_left),
ft.ElevatedButton("右声道", on_click=balance_right),
]
),
ft.ElevatedButton(
"获取持续时间", on_click=lambda _: print("持续时间:", audio1.get_duration())
),
ft.ElevatedButton(
"获取当前位置",
on_click=lambda _: print("当前位置:", audio1.get_current_position()),
),
)
ft.app(target=main)
属性
autoplay
在音频控件添加到页面后立即开始播放音频。 值的类型为“布尔型”,默认值为“False”。
自动播放在桌面、移动应用和 Safari 浏览器中有效,但在 Chrome/Edge 中无效。
balance
设置立体声平衡。
-1 - 左声道全音量;右声道静音。1 - 右声道全音量;左声道静音。0 - 两个声道音量相同。
值的类型为 OptionalNumber
设置平衡仅在 Windows 和 Linux 上支持。
playback_rate
设置播放速度。iOS 和 macOS 的范围在 0.5 到 2 倍之间。Android SDK 版本应为 23 或更高。
值的类型为 OptionalNumber
release_mode
设置释放模式。
值的类型为 ReleaseMode
,默认值为 ReleaseMode.RELEASE
。
src
设置音频文件的 URL。可以是资产 URL,详见 Image.src
了解有关资产的更多信息。
这里 是支持的音频格式列表。
src_base64
设置以 base-64 格式编码的音频文件内 容。
str类型。
volume
设置音量(幅度)。
0 为静音,1 为最大音量。0 和 1 之间的值线性插值。
值的类型为 OptionalNumber
方法
get_current_position()
返回当前播放位置(以毫秒为单位)。
get_duration()
返回音频持续时间(以毫秒为单位)。
pause()
暂停播放音频。
play()
从头开始播放音频。
release()
停止播放并释放与此音频控件相关的资源。
调用 resume()
或更改源时,资源将重新获取或缓冲。
resume()
从当前位置恢复播放音频。
seek()
将播放位置移动到所需位置。
方法参数:
position_milliseconds
- 所需位置,以毫秒为单位。
事件
on_duration_changed
当音频持续时间可用时触发(可能需要一些时间下载或缓冲)。
事件处理程序参数的类型为AudioDurationChangeEvent
。
on_loaded
音频加载/缓冲完成时触发。
on_position_changed
当音频位置变化时触发。如果状态为播放,每秒钟将持续更新播放位置。可以用于进度条。
处理程序参数的类型为AudioPositionChangeEvent
。
on_seek_complete
音频定位完成时触发。定位完成后,将发送事件。
on_state_changed
当音频播放器状态变化时触发。
事件处理程序参数的类型为AudioStateChangeEvent
。