Skip to content

AudioAssetVisualization.kt

src/jvmMain/kotlin/afield/audio/ai/AudioAssetVisualization.kt · 39 lines

@file:afield.runtime.completion.CompletionCategory("Audio AI")

package afield.audio.ai

import afield.ui.visualization.AudioVisualizer
import afield.ui.visualization.AudioVisualizerOptions
import afield.ui.visualization.AudioVisualizerSource

The one-line bridge from a Field Audio AssetRepresentation to Field's general-purpose waveform player.

It exists so that playing a service asset needs no URL arithmetic: the extension resolves the binary path and the server-side waveform endpoint against the same-origin /field-audio prefix and hands both to AudioVisualizer, which then fetches only the envelope of whatever window the user is looking at.

fun AssetRepresentation.audioVisualizerHtml

Render any Field Audio WAV representation with range-aware server-side waveform summaries.

fun AssetRepresentation.audioVisualizerHtml(
    serviceBaseUrl: String = "/field-audio",
    label: String? = role,
    options: AudioVisualizerOptions = AudioVisualizerOptions(),
): String {
    require(mediaType in setOf("audio/wav", "audio/x-wav")) {
        "audio visualization requires a WAV representation, got $mediaType"
    }
    val base = serviceBaseUrl.trimEnd('/')
    return AudioVisualizer.renderHtml(
        AudioVisualizerSource(
            audioUrl = "$base$binaryUrl",
            waveformUrl = AudioVisualizer.fieldAudioWaveformUrl(id, base),
            durationSeconds = durationSeconds,
            label = label,
        ),
        options,
    )
}