跳到主要内容

音频 Audio

同时播放多个音频文件的控件。适用于 macOS、Linux、Windows、iOS、Android 和 Web。 基于 audioplayers Flutter 小部件。

音频控制是非可视化的,应添加到 page.overlay 列表中。

示例

自动播放音频

备注

自动播放适用于桌面、移动应用和 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)

带有播放控件的音频

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("搜索 2s", 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

将音频添加到页面后立即开始播放。

备注

自动播放适用于桌面、移动应用和 Safari 浏览器,但在 Chrome/Edge 中不起作用。

balance

设置立体声平衡。

-1 - 左声道完全音量;右声道静音。1 - 右声道完全音量;左声道静音。0 - 两个声道的音量相同。

备注

设置平衡仅在 Windows 和 Linux 上支持。

get_current_position()

返回当前位置(以毫秒为单位)。

get_duration()

返回音频的持续时间(以毫秒为单位)。

playback_rate

设置播放速度。iOS 和 macOS 的限制为 0.5 到 2 倍,Android SDK 版本应为 23 或更高。

release_mode

设置释放模式。支持以下值:

  • ReleaseMode.RELEASE(默认)- 释放所有资源,就像调用 release() 方法一样。在 Android 上,媒体播放器的资源消耗比较高,这将使其释放。在 iOS 和 macOS 上,效果类似于 stop() 方法。
  • ReleaseMode.LOOP - 保留缓冲数据,并在完成后重新播放,创建一个循环。请注意,当使用此模式时,只调用 stop 方法是不足以释放资源的。
  • ReleaseMode.STOP - 停止音频播放,但保留所有资源。如果打算稍后再次播放,请使用此选项。

src

设置音频文件的 URL。它可以是资源 URL,请参阅 Image.src 以获取关于资源的更多信息。

src_base64

将音频文件的内容设置为 Base64 格式编码。

方法

pause()

停止播放音频。

play()

从开头开始播放音频。

release()

停止播放并释放与此音频控件相关联的资源。 资源将在调用 resume() 或更改源时被重新获取或缓冲。

resume()

从当前位置恢复播放音频。

seek()

将光标移动到所需位置。

方法参数:

  • position_milliseconds - 毫秒为单位的所需位置。

volume

设置音量(振幅)。

0 是静音,1 是最大音量。0 和 1 之间的值线性插值。

事件

on_duration_changed

音频持续时间可用时触发此事件(可能需要一段时间才能下载或缓冲)。

事件的 e.data 包含音频持续时间(以毫秒为单位)。

on_loaded

当音频加载/缓冲时触发。

on_position_changed

音频位置发生变化时触发。如果状态为播放,将每秒连续更新播放进度。可用于进度条。

on_seek_complete

搜索完成时触发。音频搜索完成后将发送事件。

on_state_changed

音频播放器状态发生变化时触发。事件的 e.data 包含以下状态之一:

  • stopped
  • playing
  • paused
  • completed
  • disposed