Usage

Play a track and record a voice note

This type is used by audio.player

tsx
import { Box, Button, VStack, Text, audio, onMount } from 'kuito';

function Track() {
  // The component owns it: made when it mounts, released when it unmounts.
  const song = audio.player('https://example.com/song.mp3', { loop: true });
  const { time, duration } = song;

  return (
    <VStack>
      {/* A 280-point bar that fills from the left, moved on the UI thread. */}
      <Box width={280} height={4} overflow="hidden">
        <Box
          width={280}
          height={4}
          backgroundColor="#e50914"
          translateX={duration.value > 0 ? (time.value / duration.value - 1) * 280 : -280}
        />
      </Box>
      <Button onPress={() => (song.playing.value = !song.playing.value)}>
        {song.playing.value ? 'Pause' : 'Play'}
      </Button>
      <Button onPress={() => void song.seek(time.value + 30)}>Skip</Button>
    </VStack>
  );
}

function Memo() {
  const recorder = audio.recorder({ quality: 'medium', metering: true });

  onMount(() => void audio.configure({ allowsRecording: true }));

  return (
    <VStack>
      <Box height={8} backgroundColor="#e5484d" opacity={1 + recorder.level.value / 60} />
      <Button onPress={() => void recorder.start()}>Record</Button>
      <Button onPress={async () => console.log((await recorder.stop()).uri)}>Stop</Button>
    </VStack>
  );
}

Type declaration

ts
export type AudioPlayerOptions = ScopeOptions & {
  /** 0 to 1. Defaults to 1. */
  volume?: number;
  /** 0.5 to 2, pitch kept. Defaults to 1. */
  rate?: number;
  /** Starts over at the end instead of stopping. Defaults to false. */
  loop?: boolean;
};

Members 4

NameTypeRequiredDescription
scopetypeof appModuleNo—
volumenumberNo0 to 1. Defaults to 1.
ratenumberNo0.5 to 2, pitch kept. Defaults to 1.
loopbooleanNoStarts over at the end instead of stopping. Defaults to false.
scope — nested fields

scope fields

NameTypeRequiredDescription
watch<E extends keyof Events>(event: E, listener: Events[E]) => EventSubscriptionYesCalls listener when the system warns that memory runs low. In a component it stops when the component unmounts; elsewhere the returned subscription stops it.
stateReadonlySignal<State>YesWhether the app is in the foreground. Watched, it follows the platform; starting to observe reports the state the platform starts from, which catches a change made in between.
Default: AppStateModule.state
openSettings() => Promise<void>YesOpens this app's page in the system Settings.
Default: AppStateModule.openSettings
watch — method signatures

Signatures

ts
<E extends keyof Events>(event: E, listener: Events[E]): EventSubscription

Type parameters

NameConstraintDefault
E"memoryWarning"—

Parameters

NameTypeRequiredDescription
eventEYes—
listenerEvents[E]Yes—

Returns

EventSubscription

openSettings — method signatures

Signatures

ts
(): Promise<void>

Parameters

No parameters.

Returns

Promise<void>

Generated from the public TypeScript declarations: signatures, props and defaults come from the checked source, descriptions from its JSDoc. No defaults are invented.