import { type ColorValue, type ViewProps } from 'react-native'; export type AudioWaveformPlayerState = 'idle' | 'loading' | 'ready' | 'ended' | 'error'; export type AudioWaveformTimeMode = 'count-up' | 'count-down'; export type AudioWaveformSource = { uri: string; }; export type AudioWaveformPlayerStateEvent = { state: AudioWaveformPlayerState; isPlaying: boolean; speed: number; error?: string; }; export type AudioWaveformTimeUpdateEvent = { currentTimeMs: number; durationMs: number; }; export type AudioWaveformSeekEvent = { positionMs: number; }; export type AudioWaveformLoadEvent = { durationMs: number; }; export type AudioWaveformLoadErrorEvent = { message: string; }; export type AudioWaveformViewProps = Omit & { source: AudioWaveformSource; /** Pre-computed amplitudes in [0, 1]. When provided, native decode is skipped. */ samples?: ReadonlyArray; /** Highlighted bar color (the "played" portion). */ playedBarColor?: ColorValue; /** Bar color for the not-yet-played portion. */ unplayedBarColor?: ColorValue; /** Bar thickness (default 3). */ barWidth?: number; /** Gap between bars (default 2). */ barGap?: number; /** Bar corner radius (default = barWidth / 2). */ barRadius?: number; /** Force a specific number of bars; default auto from view width. */ barCount?: number; /** Background of the rounded container (default light blue). Has no effect when showBackground={false}. */ containerBackgroundColor?: ColorValue; /** Container corner radius (default 16). Has no effect when showBackground={false}. */ containerBorderRadius?: number; /** Whether to draw the rounded container background. Default true. */ showBackground?: boolean; /** Show the play/pause button. Default true. */ showPlayButton?: boolean; playButtonColor?: ColorValue; /** Show the time label. Default true. */ showTime?: boolean; timeColor?: ColorValue; /** count-up: 0:00 -> duration. count-down: duration -> 0:00. Default count-up. */ timeMode?: AudioWaveformTimeMode; /** Show the playback-speed pill. Default true. */ showSpeedControl?: boolean; speedColor?: ColorValue; speedBackgroundColor?: ColorValue; /** Available speeds the pill cycles through (default [0.5, 1, 1.5, 2]). */ speeds?: ReadonlyArray; /** Initial speed when the component mounts. Default 1. */ defaultSpeed?: number; /** Begin playback as soon as the source is ready. Default false. */ autoPlay?: boolean; /** Seek to this position immediately on load (milliseconds). Default 0. */ initialPositionMs?: number; /** Restart from the beginning when playback ends. Default false. */ loop?: boolean; /** * Allow audio to keep playing when the host app is backgrounded. * Default `false` — playback is paused on `didEnterBackground` (iOS) / * `onHostPause` (Android). * * When `true`: * - **iOS**: the host app must enable the "Audio, AirPlay, and Picture in * Picture" Background Mode (Xcode → Signing & Capabilities → +Capability * → Background Modes, or add `UIBackgroundModes: [audio]` to * `Info.plist`). The library will configure `AVAudioSession` to * `.playback` and activate it when the source is set. * - **Android**: no host configuration is required for typical use. * `MediaPlayer` keeps playing through `Activity.onPause` already. * Optionally add `` * to your app manifest if you need playback to survive device sleep — * the library will then call `MediaPlayer.setWakeMode` automatically. */ playInBackground?: boolean; /** * When the app is backgrounded, skip the cheap-but-pointless waveform / * time-label refreshes that would otherwise piggy-back on every 30 Hz * progress tick (the OS already skips the actual GPU painting). * * Default `true` — there is no visible effect since the view is * offscreen, and we save a small amount of CPU per tick. The * `onTimeUpdate` JS event keeps firing regardless so you can still * drive Now Playing / Lock Screen / analytics from background. * * Set to `false` if you want the bars + time label to stay refreshed in * background for some reason (rare). */ pauseUiUpdatesInBackground?: boolean; /** When defined, the component is fully controlled — internal taps fire onPlayerStateChange but do not toggle play state. */ playing?: boolean; /** When defined, the component is fully controlled — speed pill taps fire onPlayerStateChange but do not change speed. */ speed?: number; onLoad?: (event: AudioWaveformLoadEvent) => void; onLoadError?: (event: AudioWaveformLoadErrorEvent) => void; onPlayerStateChange?: (event: AudioWaveformPlayerStateEvent) => void; onTimeUpdate?: (event: AudioWaveformTimeUpdateEvent) => void; onSeek?: (event: AudioWaveformSeekEvent) => void; onEnd?: () => void; }; export type AudioWaveformViewRef = { play: () => void; pause: () => void; toggle: () => void; seekTo: (positionMs: number) => void; setSpeed: (speed: number) => void; }; export declare const AudioWaveformView: import("react").ForwardRefExoticComponent unknown) | undefined; onAccessibilityTap?: (() => unknown) | undefined; onLayout?: ((event: import("react-native").LayoutChangeEvent) => unknown) | undefined; onMagicTap?: (() => unknown) | undefined; onAccessibilityEscape?: (() => unknown) | undefined; }>, "onMoveShouldSetResponder" | "onMoveShouldSetResponderCapture" | "onResponderGrant" | "onResponderMove" | "onResponderReject" | "onResponderRelease" | "onResponderStart" | "onResponderEnd" | "onResponderTerminate" | "onResponderTerminationRequest" | "onStartShouldSetResponder" | "onStartShouldSetResponderCapture" | "onMouseEnter" | "onMouseLeave" | "onClick" | "onClickCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onBlur" | "onBlurCapture" | "onFocus" | "onFocusCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyUp" | "onKeyUpCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "nativeBackgroundAndroid" | "nativeForegroundAndroid" | "renderToHardwareTextureAndroid" | "hasTVPreferredFocus" | "nextFocusDown" | "nextFocusForward" | "nextFocusLeft" | "nextFocusRight" | "nextFocusUp" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "accessibilityIgnoresInvertColors" | "accessibilityViewIsModal" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "aria-modal" | "accessibilityElementsHidden" | "accessibilityLanguage" | "accessibilityRespondsToUserInteraction" | "accessible" | "accessibilityLabel" | "accessibilityHint" | "aria-label" | "accessibilityRole" | "role" | "accessibilityState" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "accessibilityActions" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "aria-hidden" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "importantForAccessibility" | "screenReaderFocusable" | "children" | "style" | "collapsable" | "collapsableChildren" | "id" | "testID" | "nativeID" | "needsOffscreenAlphaCompositing" | "hitSlop" | "pointerEvents" | "removeClippedSubviews" | "experimental_accessibilityOrder"> & Omit boolean) | undefined; onMoveShouldSetResponderCapture?: ((e: import("react-native").GestureResponderEvent) => boolean) | undefined; onResponderGrant?: ((e: import("react-native").GestureResponderEvent) => void | boolean) | undefined; onResponderMove?: ((e: import("react-native").GestureResponderEvent) => void) | undefined; onResponderReject?: ((e: import("react-native").GestureResponderEvent) => void) | undefined; onResponderRelease?: ((e: import("react-native").GestureResponderEvent) => void) | undefined; onResponderStart?: ((e: import("react-native").GestureResponderEvent) => void) | undefined; onResponderEnd?: ((e: import("react-native").GestureResponderEvent) => void) | undefined; onResponderTerminate?: ((e: import("react-native").GestureResponderEvent) => void) | undefined; onResponderTerminationRequest?: ((e: import("react-native").GestureResponderEvent) => boolean) | undefined; onStartShouldSetResponder?: ((e: import("react-native").GestureResponderEvent) => boolean) | undefined; onStartShouldSetResponderCapture?: ((e: import("react-native").GestureResponderEvent) => boolean) | undefined; }>, "onMouseEnter" | "onMouseLeave" | "onClick" | "onClickCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onBlur" | "onBlurCapture" | "onFocus" | "onFocusCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyUp" | "onKeyUpCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "nativeBackgroundAndroid" | "nativeForegroundAndroid" | "renderToHardwareTextureAndroid" | "hasTVPreferredFocus" | "nextFocusDown" | "nextFocusForward" | "nextFocusLeft" | "nextFocusRight" | "nextFocusUp" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "accessibilityIgnoresInvertColors" | "accessibilityViewIsModal" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "aria-modal" | "accessibilityElementsHidden" | "accessibilityLanguage" | "accessibilityRespondsToUserInteraction" | "accessible" | "accessibilityLabel" | "accessibilityHint" | "aria-label" | "accessibilityRole" | "role" | "accessibilityState" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "accessibilityActions" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "aria-hidden" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "importantForAccessibility" | "screenReaderFocusable" | "children" | "style" | "collapsable" | "collapsableChildren" | "id" | "testID" | "nativeID" | "needsOffscreenAlphaCompositing" | "hitSlop" | "pointerEvents" | "removeClippedSubviews" | "experimental_accessibilityOrder"> & Omit void) | undefined; onMouseLeave?: ((event: import("react-native").MouseEvent) => void) | undefined; }>, "onClick" | "onClickCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onBlur" | "onBlurCapture" | "onFocus" | "onFocusCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyUp" | "onKeyUpCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "nativeBackgroundAndroid" | "nativeForegroundAndroid" | "renderToHardwareTextureAndroid" | "hasTVPreferredFocus" | "nextFocusDown" | "nextFocusForward" | "nextFocusLeft" | "nextFocusRight" | "nextFocusUp" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "accessibilityIgnoresInvertColors" | "accessibilityViewIsModal" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "aria-modal" | "accessibilityElementsHidden" | "accessibilityLanguage" | "accessibilityRespondsToUserInteraction" | "accessible" | "accessibilityLabel" | "accessibilityHint" | "aria-label" | "accessibilityRole" | "role" | "accessibilityState" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "accessibilityActions" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "aria-hidden" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "importantForAccessibility" | "screenReaderFocusable" | "children" | "style" | "collapsable" | "collapsableChildren" | "id" | "testID" | "nativeID" | "needsOffscreenAlphaCompositing" | "hitSlop" | "pointerEvents" | "removeClippedSubviews" | "experimental_accessibilityOrder"> & Omit void) | undefined; onClickCapture?: ((event: import("react-native").PointerEvent) => void) | undefined; onPointerEnter?: ((event: import("react-native").PointerEvent) => void) | undefined; onPointerEnterCapture?: ((event: import("react-native").PointerEvent) => void) | undefined; onPointerLeave?: ((event: import("react-native").PointerEvent) => void) | undefined; onPointerLeaveCapture?: ((event: import("react-native").PointerEvent) => void) | undefined; onPointerMove?: ((event: import("react-native").PointerEvent) => void) | undefined; onPointerMoveCapture?: ((event: import("react-native").PointerEvent) => void) | undefined; onPointerCancel?: ((e: import("react-native").PointerEvent) => void) | undefined; onPointerCancelCapture?: ((e: import("react-native").PointerEvent) => void) | undefined; onPointerDown?: ((e: import("react-native").PointerEvent) => void) | undefined; onPointerDownCapture?: ((e: import("react-native").PointerEvent) => void) | undefined; onPointerUp?: ((e: import("react-native").PointerEvent) => void) | undefined; onPointerUpCapture?: ((e: import("react-native").PointerEvent) => void) | undefined; onPointerOver?: ((e: import("react-native").PointerEvent) => void) | undefined; onPointerOverCapture?: ((e: import("react-native").PointerEvent) => void) | undefined; onPointerOut?: ((e: import("react-native").PointerEvent) => void) | undefined; onPointerOutCapture?: ((e: import("react-native").PointerEvent) => void) | undefined; onGotPointerCapture?: ((e: import("react-native").PointerEvent) => void) | undefined; onGotPointerCaptureCapture?: ((e: import("react-native").PointerEvent) => void) | undefined; onLostPointerCapture?: ((e: import("react-native").PointerEvent) => void) | undefined; onLostPointerCaptureCapture?: ((e: import("react-native").PointerEvent) => void) | undefined; }>, "onClick" | "onBlur" | "onBlurCapture" | "onFocus" | "onFocusCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyUp" | "onKeyUpCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "nativeBackgroundAndroid" | "nativeForegroundAndroid" | "renderToHardwareTextureAndroid" | "hasTVPreferredFocus" | "nextFocusDown" | "nextFocusForward" | "nextFocusLeft" | "nextFocusRight" | "nextFocusUp" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "accessibilityIgnoresInvertColors" | "accessibilityViewIsModal" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "aria-modal" | "accessibilityElementsHidden" | "accessibilityLanguage" | "accessibilityRespondsToUserInteraction" | "accessible" | "accessibilityLabel" | "accessibilityHint" | "aria-label" | "accessibilityRole" | "role" | "accessibilityState" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "accessibilityActions" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "aria-hidden" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "importantForAccessibility" | "screenReaderFocusable" | "children" | "style" | "collapsable" | "collapsableChildren" | "id" | "testID" | "nativeID" | "needsOffscreenAlphaCompositing" | "hitSlop" | "pointerEvents" | "removeClippedSubviews" | "experimental_accessibilityOrder"> & Omit void) | undefined; onBlurCapture?: ((event: import("react-native").BlurEvent) => void) | undefined; onFocus?: ((event: import("react-native").FocusEvent) => void) | undefined; onFocusCapture?: ((event: import("react-native").FocusEvent) => void) | undefined; }>, "onClick" | "onKeyDown" | "onKeyDownCapture" | "onKeyUp" | "onKeyUpCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "nativeBackgroundAndroid" | "nativeForegroundAndroid" | "renderToHardwareTextureAndroid" | "hasTVPreferredFocus" | "nextFocusDown" | "nextFocusForward" | "nextFocusLeft" | "nextFocusRight" | "nextFocusUp" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "accessibilityIgnoresInvertColors" | "accessibilityViewIsModal" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "aria-modal" | "accessibilityElementsHidden" | "accessibilityLanguage" | "accessibilityRespondsToUserInteraction" | "accessible" | "accessibilityLabel" | "accessibilityHint" | "aria-label" | "accessibilityRole" | "role" | "accessibilityState" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "accessibilityActions" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "aria-hidden" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "importantForAccessibility" | "screenReaderFocusable" | "children" | "style" | "collapsable" | "collapsableChildren" | "id" | "testID" | "nativeID" | "needsOffscreenAlphaCompositing" | "hitSlop" | "pointerEvents" | "removeClippedSubviews" | "experimental_accessibilityOrder"> & Omit void) | undefined; onKeyDownCapture?: ((event: import("react-native").KeyDownEvent) => void) | undefined; onKeyUp?: ((event: import("react-native").KeyUpEvent) => void) | undefined; onKeyUpCapture?: ((event: import("react-native").KeyUpEvent) => void) | undefined; }>, "onClick" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "nativeBackgroundAndroid" | "nativeForegroundAndroid" | "renderToHardwareTextureAndroid" | "hasTVPreferredFocus" | "nextFocusDown" | "nextFocusForward" | "nextFocusLeft" | "nextFocusRight" | "nextFocusUp" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "accessibilityIgnoresInvertColors" | "accessibilityViewIsModal" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "aria-modal" | "accessibilityElementsHidden" | "accessibilityLanguage" | "accessibilityRespondsToUserInteraction" | "accessible" | "accessibilityLabel" | "accessibilityHint" | "aria-label" | "accessibilityRole" | "role" | "accessibilityState" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "accessibilityActions" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "aria-hidden" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "importantForAccessibility" | "screenReaderFocusable" | "children" | "style" | "collapsable" | "collapsableChildren" | "id" | "testID" | "nativeID" | "needsOffscreenAlphaCompositing" | "hitSlop" | "pointerEvents" | "removeClippedSubviews" | "experimental_accessibilityOrder"> & Omit void) | undefined; onTouchCancelCapture?: ((e: import("react-native").GestureResponderEvent) => void) | undefined; onTouchEnd?: ((e: import("react-native").GestureResponderEvent) => void) | undefined; onTouchEndCapture?: ((e: import("react-native").GestureResponderEvent) => void) | undefined; onTouchMove?: ((e: import("react-native").GestureResponderEvent) => void) | undefined; onTouchMoveCapture?: ((e: import("react-native").GestureResponderEvent) => void) | undefined; onTouchStart?: ((e: import("react-native").GestureResponderEvent) => void) | undefined; onTouchStartCapture?: ((e: import("react-native").GestureResponderEvent) => void) | undefined; }>, "onClick" | "nativeBackgroundAndroid" | "nativeForegroundAndroid" | "renderToHardwareTextureAndroid" | "hasTVPreferredFocus" | "nextFocusDown" | "nextFocusForward" | "nextFocusLeft" | "nextFocusRight" | "nextFocusUp" | "focusable" | "tabIndex" | "shouldRasterizeIOS" | "accessibilityIgnoresInvertColors" | "accessibilityViewIsModal" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "aria-modal" | "accessibilityElementsHidden" | "accessibilityLanguage" | "accessibilityRespondsToUserInteraction" | "accessible" | "accessibilityLabel" | "accessibilityHint" | "aria-label" | "accessibilityRole" | "role" | "accessibilityState" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "accessibilityActions" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "aria-hidden" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "importantForAccessibility" | "screenReaderFocusable" | "children" | "style" | "collapsable" | "collapsableChildren" | "id" | "testID" | "nativeID" | "needsOffscreenAlphaCompositing" | "hitSlop" | "pointerEvents" | "removeClippedSubviews" | "experimental_accessibilityOrder"> & Omit unknown) | undefined; }>, "shouldRasterizeIOS" | "accessibilityIgnoresInvertColors" | "accessibilityViewIsModal" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "aria-modal" | "accessibilityElementsHidden" | "accessibilityLanguage" | "accessibilityRespondsToUserInteraction" | "accessible" | "accessibilityLabel" | "accessibilityHint" | "aria-label" | "accessibilityRole" | "role" | "accessibilityState" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "accessibilityActions" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "aria-hidden" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "importantForAccessibility" | "screenReaderFocusable" | "children" | "style" | "collapsable" | "collapsableChildren" | "id" | "testID" | "nativeID" | "needsOffscreenAlphaCompositing" | "hitSlop" | "pointerEvents" | "removeClippedSubviews" | "experimental_accessibilityOrder"> & Omit, "accessibilityIgnoresInvertColors" | "accessibilityViewIsModal" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "aria-modal" | "accessibilityElementsHidden" | "accessibilityLanguage" | "accessibilityRespondsToUserInteraction" | "accessible" | "accessibilityLabel" | "accessibilityHint" | "aria-label" | "accessibilityRole" | "role" | "accessibilityState" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "accessibilityActions" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "aria-hidden" | "accessibilityLabelledBy" | "aria-labelledby" | "accessibilityLiveRegion" | "aria-live" | "importantForAccessibility" | "screenReaderFocusable" | "children" | "style" | "collapsable" | "collapsableChildren" | "id" | "testID" | "nativeID" | "needsOffscreenAlphaCompositing" | "hitSlop" | "pointerEvents" | "removeClippedSubviews" | "experimental_accessibilityOrder"> & Omit | undefined); "aria-labelledby"?: string | undefined; accessibilityLiveRegion?: ("none" | "polite" | "assertive") | undefined; "aria-live"?: ("polite" | "assertive" | "off") | undefined; importantForAccessibility?: ("auto" | "yes" | "no" | "no-hide-descendants") | undefined; screenReaderFocusable?: boolean; }>, "accessibilityIgnoresInvertColors" | "accessibilityViewIsModal" | "accessibilityShowsLargeContentViewer" | "accessibilityLargeContentTitle" | "aria-modal" | "accessibilityElementsHidden" | "accessibilityLanguage" | "accessibilityRespondsToUserInteraction" | "accessible" | "accessibilityLabel" | "accessibilityHint" | "aria-label" | "accessibilityRole" | "role" | "accessibilityState" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "accessibilityActions" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "aria-hidden"> & Omit, "accessible" | "accessibilityLabel" | "accessibilityHint" | "aria-label" | "accessibilityRole" | "role" | "accessibilityState" | "accessibilityValue" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "accessibilityActions" | "aria-busy" | "aria-checked" | "aria-disabled" | "aria-expanded" | "aria-selected" | "aria-hidden"> & { accessible?: boolean | undefined; accessibilityLabel?: string | undefined; accessibilityHint?: string | undefined; "aria-label"?: string | undefined; accessibilityRole?: import("react-native").AccessibilityRole | undefined; role?: import("react-native").Role | undefined; accessibilityState?: import("react-native").AccessibilityState | undefined; accessibilityValue?: import("react-native").AccessibilityValue | undefined; "aria-valuemax"?: import("react-native").AccessibilityValue["max"] | undefined; "aria-valuemin"?: import("react-native").AccessibilityValue["min"] | undefined; "aria-valuenow"?: import("react-native").AccessibilityValue["now"] | undefined; "aria-valuetext"?: import("react-native").AccessibilityValue["text"] | undefined; accessibilityActions?: ReadonlyArray | undefined; "aria-busy"?: boolean | undefined; "aria-checked"?: (boolean | undefined) | "mixed"; "aria-disabled"?: boolean | undefined; "aria-expanded"?: boolean | undefined; "aria-selected"?: boolean | undefined; "aria-hidden"?: boolean | undefined; }>, "children" | "style" | "collapsable" | "collapsableChildren" | "id" | "testID" | "nativeID" | "needsOffscreenAlphaCompositing" | "hitSlop" | "pointerEvents" | "removeClippedSubviews" | "experimental_accessibilityOrder"> & Omit | undefined; }>, never>>, "children"> & { source: AudioWaveformSource; /** Pre-computed amplitudes in [0, 1]. When provided, native decode is skipped. */ samples?: ReadonlyArray; /** Highlighted bar color (the "played" portion). */ playedBarColor?: ColorValue; /** Bar color for the not-yet-played portion. */ unplayedBarColor?: ColorValue; /** Bar thickness (default 3). */ barWidth?: number; /** Gap between bars (default 2). */ barGap?: number; /** Bar corner radius (default = barWidth / 2). */ barRadius?: number; /** Force a specific number of bars; default auto from view width. */ barCount?: number; /** Background of the rounded container (default light blue). Has no effect when showBackground={false}. */ containerBackgroundColor?: ColorValue; /** Container corner radius (default 16). Has no effect when showBackground={false}. */ containerBorderRadius?: number; /** Whether to draw the rounded container background. Default true. */ showBackground?: boolean; /** Show the play/pause button. Default true. */ showPlayButton?: boolean; playButtonColor?: ColorValue; /** Show the time label. Default true. */ showTime?: boolean; timeColor?: ColorValue; /** count-up: 0:00 -> duration. count-down: duration -> 0:00. Default count-up. */ timeMode?: AudioWaveformTimeMode; /** Show the playback-speed pill. Default true. */ showSpeedControl?: boolean; speedColor?: ColorValue; speedBackgroundColor?: ColorValue; /** Available speeds the pill cycles through (default [0.5, 1, 1.5, 2]). */ speeds?: ReadonlyArray; /** Initial speed when the component mounts. Default 1. */ defaultSpeed?: number; /** Begin playback as soon as the source is ready. Default false. */ autoPlay?: boolean; /** Seek to this position immediately on load (milliseconds). Default 0. */ initialPositionMs?: number; /** Restart from the beginning when playback ends. Default false. */ loop?: boolean; /** * Allow audio to keep playing when the host app is backgrounded. * Default `false` — playback is paused on `didEnterBackground` (iOS) / * `onHostPause` (Android). * * When `true`: * - **iOS**: the host app must enable the "Audio, AirPlay, and Picture in * Picture" Background Mode (Xcode → Signing & Capabilities → +Capability * → Background Modes, or add `UIBackgroundModes: [audio]` to * `Info.plist`). The library will configure `AVAudioSession` to * `.playback` and activate it when the source is set. * - **Android**: no host configuration is required for typical use. * `MediaPlayer` keeps playing through `Activity.onPause` already. * Optionally add `` * to your app manifest if you need playback to survive device sleep — * the library will then call `MediaPlayer.setWakeMode` automatically. */ playInBackground?: boolean; /** * When the app is backgrounded, skip the cheap-but-pointless waveform / * time-label refreshes that would otherwise piggy-back on every 30 Hz * progress tick (the OS already skips the actual GPU painting). * * Default `true` — there is no visible effect since the view is * offscreen, and we save a small amount of CPU per tick. The * `onTimeUpdate` JS event keeps firing regardless so you can still * drive Now Playing / Lock Screen / analytics from background. * * Set to `false` if you want the bars + time label to stay refreshed in * background for some reason (rare). */ pauseUiUpdatesInBackground?: boolean; /** When defined, the component is fully controlled — internal taps fire onPlayerStateChange but do not toggle play state. */ playing?: boolean; /** When defined, the component is fully controlled — speed pill taps fire onPlayerStateChange but do not change speed. */ speed?: number; onLoad?: (event: AudioWaveformLoadEvent) => void; onLoadError?: (event: AudioWaveformLoadErrorEvent) => void; onPlayerStateChange?: (event: AudioWaveformPlayerStateEvent) => void; onTimeUpdate?: (event: AudioWaveformTimeUpdateEvent) => void; onSeek?: (event: AudioWaveformSeekEvent) => void; onEnd?: () => void; } & import("react").RefAttributes>; //# sourceMappingURL=AudioWaveformView.native.d.ts.map