MujicaUI

Media · #349

AudioWaveform 浅色主题渲染快照
浅色 · 渲染快照
AudioWaveform 深色主题渲染快照
深色 · 渲染快照

349 AudioWaveform 音频波形

用途

绘制调用方提供的采样波形,覆盖播放进度,可拖动选择区间。

最小示例

samples := make([]float32, 48000) // from your decoder, -1 to 1
pos, sel := time.Duration(0), media.MediaRange{}
view := func(c *ui.Context) {
	core.Use(c, core.Settings{})
	media.AudioWaveform(c, samples, media.AudioWaveformOptions{
		Duration: time.Second, Position: pos, Selection: &sel,
		OnSeek: func(d time.Duration) { pos = d },
	})
}
ui.Render(view, 400, 300, 1)

参数

func AudioWaveform(c *ui.Context, samples []float32, opts AudioWaveformOptions) ChoiceResult

samples 取值 -1 到 1。数据就绪时 Duration 须大于 0,OnSeek 必填。

字段类型默认值含义
Durationtime.Duration—音频长度。
Positiontime.Duration0已播放部分。
OnSeekfunc(time.Duration)—点击或方向键跳转。
Selection*MediaRangenil非 nil 时可拖动或 Shift+方向键选择区间。
Heightfloat320(即 96)高度。
Status / ErrorDataStatus / stringDataReady加载中、失败(须给 Error)与无数据时显示同尺寸占位。
Labelstring"Waveform"无障碍名称。

状态

  • 已播放部分用强调色,其余用说明色,并有播放线和菱形标记,不只靠颜色区分。
  • 选区用 Selection 底色加两条边线。

事件

Changed() 在选区变化后为 true;跳转通过 OnSeek 报告。

键盘操作

按键作用
← / →跳转 ±5 秒
Shift+← / →从播放位置开始或调整选区终点
Escape清除选区

限制

  • 峰值按像素列计算,只在数据或宽度变化时重算,不会每帧计算。
  • 数据以首元素地址和长度识别;原地修改采样请换一个切片。