note

This rune is part of @refrakt-md/media. Install with npm install @refrakt-md/media and add "@refrakt-md/media" to the packages array in your refrakt.config.json.

Audio

An audio player element. Supports waveform visualisation, inline chapter markers, and connection to a named playlist rune. A paragraph becomes the description, and a list becomes inline chapter markers with timestamps.

Basic usage

A simple audio player with a source file.

{% audio src="https://archive.org/download/musopen-chopin/Nocturne%20Op.%209%20no.%202%20in%20E%20flat%20major.mp3" title="Nocturne Op. 9 No. 2 in E-flat major" artist="Frederic Chopin" /%}
<div data-rune="audio">
  <rf-audio waveform="false">
    <script type="application/json">[{&quot;src&quot;:&quot;https://archive.org/download/musopen-chopin/Nocturne%20Op.%209%20no.%202%20in%20E%20flat%20major.mp3&quot;,&quot;name&quot;:&quot;Nocturne Op. 9 No. 2 in E-flat major&quot;,&quot;artist&quot;:&quot;Frederic Chopin&quot;}]</script>
  </rf-audio>
</div>
<div class="rf-audio rf-audio--false" data-waveform="false" data-rune="audio" data-density="compact">
  <rf-audio waveform="false">
    <script type="application/json">[{&quot;src&quot;:&quot;https://archive.org/download/musopen-chopin/Nocturne%20Op.%209%20no.%202%20in%20E%20flat%20major.mp3&quot;,&quot;name&quot;:&quot;Nocturne Op. 9 No. 2 in E-flat major&quot;,&quot;artist&quot;:&quot;Frederic Chopin&quot;}]</script>
  </rf-audio>
</div>

With waveform

Enable waveform visualisation with the waveform attribute.

{% audio src="https://archive.org/download/musopen-chopin/Mazurka%20Op.%207%20no.%204%20in%20A%20flat%20major.mp3" title="Mazurka Op. 7 No. 4 in A-flat major" artist="Frederic Chopin" waveform=true /%}
<div data-rune="audio">
  <meta content="true" data-field="waveform">
  <rf-audio waveform="true">
    <script type="application/json">[{&quot;src&quot;:&quot;https://archive.org/download/musopen-chopin/Mazurka%20Op.%207%20no.%204%20in%20A%20flat%20major.mp3&quot;,&quot;name&quot;:&quot;Mazurka Op. 7 No. 4 in A-flat major&quot;,&quot;artist&quot;:&quot;Frederic Chopin&quot;}]</script>
  </rf-audio>
</div>
<div class="rf-audio rf-audio--true" data-waveform="true" data-rune="audio" data-density="compact">
  <rf-audio waveform="true">
    <script type="application/json">[{&quot;src&quot;:&quot;https://archive.org/download/musopen-chopin/Mazurka%20Op.%207%20no.%204%20in%20A%20flat%20major.mp3&quot;,&quot;name&quot;:&quot;Mazurka Op. 7 No. 4 in A-flat major&quot;,&quot;artist&quot;:&quot;Frederic Chopin&quot;}]</script>
  </rf-audio>
</div>

With inline chapters

Add a list inside the rune to define chapter markers. Bold text is the chapter label and parenthetical text is the timestamp.

{% audio src="https://archive.org/download/musopen-chopin/Ballade%20no.%201%20-%20Op.%2023.mp3" title="Ballade No. 1 in G minor, Op. 23" artist="Frederic Chopin" %}

A sweeping narrative arc from brooding introduction through lyrical themes to a fiery conclusion.

1. **Introduction** (0:00) Largo opening over a Neapolitan chord
2. **First Theme** (0:45) Principal theme in G minor
3. **Second Theme** (2:50) Lyrical melody in E-flat major
4. **Development** (4:30) Thematic transformation and modulation
5. **Recapitulation** (7:00) Themes return in reverse order
6. **Coda** (8:30) Presto con fuoco to the dramatic finish
{% /audio %}
<div data-rune="audio">
  <rf-audio waveform="false">
    <script type="application/json">[{&quot;src&quot;:&quot;https://archive.org/download/musopen-chopin/Ballade%20no.%201%20-%20Op.%2023.mp3&quot;,&quot;name&quot;:&quot;Ballade No. 1 in G minor, Op. 23&quot;,&quot;artist&quot;:&quot;Frederic Chopin&quot;,&quot;chapters&quot;:[{&quot;name&quot;:&quot;Introduction&quot;,&quot;time&quot;:0},{&quot;name&quot;:&quot;First Theme&quot;,&quot;time&quot;:45},{&quot;name&quot;:&quot;Second Theme&quot;,&quot;time&quot;:170},{&quot;name&quot;:&quot;Development&quot;,&quot;time&quot;:270},{&quot;name&quot;:&quot;Recapitulation&quot;,&quot;time&quot;:420},{&quot;name&quot;:&quot;Coda&quot;,&quot;time&quot;:510}]}]</script>
  </rf-audio>
  <div data-name="description">
    <p>A sweeping narrative arc from brooding introduction through lyrical themes to a fiery conclusion.</p>
  </div>
</div>

A sweeping narrative arc from brooding introduction through lyrical themes to a fiery conclusion.

<div class="rf-audio rf-audio--false" data-waveform="false" data-rune="audio" data-density="compact">
  <rf-audio waveform="false">
    <script type="application/json">[{&quot;src&quot;:&quot;https://archive.org/download/musopen-chopin/Ballade%20no.%201%20-%20Op.%2023.mp3&quot;,&quot;name&quot;:&quot;Ballade No. 1 in G minor, Op. 23&quot;,&quot;artist&quot;:&quot;Frederic Chopin&quot;,&quot;chapters&quot;:[{&quot;name&quot;:&quot;Introduction&quot;,&quot;time&quot;:0},{&quot;name&quot;:&quot;First Theme&quot;,&quot;time&quot;:45},{&quot;name&quot;:&quot;Second Theme&quot;,&quot;time&quot;:170},{&quot;name&quot;:&quot;Development&quot;,&quot;time&quot;:270},{&quot;name&quot;:&quot;Recapitulation&quot;,&quot;time&quot;:420},{&quot;name&quot;:&quot;Coda&quot;,&quot;time&quot;:510}]}]</script>
  </rf-audio>
  <div data-name="description" class="rf-audio__description" data-section="description">
    <p>A sweeping narrative arc from brooding introduction through lyrical themes to a fiery conclusion.</p>
  </div>
</div>

Connected to a playlist

Use the playlist attribute to connect the player to a named playlist rune via its id.

{% playlist type="album" artist="Frederic Chopin" id="nocturnes" %}
# Chopin Nocturnes

- **Nocturne Op. 15 No. 1 in F major** [play](https://archive.org/download/musopen-chopin/Nocturne%20Op.%2015%20no.%201%20In%20F%20major.mp3) (5:06)
- **Nocturne Op. 27 No. 1 in C-sharp minor** [play](https://archive.org/download/musopen-chopin/Nocturne%20Op.%2027%20no.%201%20in%20C%20sharp%20minor.mp3) (5:52)
- **Nocturne Op. 32 No. 1 in B major** [play](https://archive.org/download/musopen-chopin/Nocturne%20Op.%2032%20no.%201%20in%20B%20major.mp3) (5:01)
{% /playlist %}

{% audio playlist="nocturnes" /%}
<section data-field="content-section" data-rune="playlist" typeof="MusicPlaylist">
  <meta content="album" data-field="type">
  <meta content="stacked" data-field="layout">
  <meta content="Frederic Chopin" data-field="artist" property="byArtist">
  <meta content="nocturnes" data-field="id">
  <div data-name="content">
    <header>
      <h1 id="chopin-nocturnes" data-name="headline" property="name">Chopin Nocturnes</h1>
    </header>
    <ol data-name="tracks">
      <li typeof="MusicRecording" data-src="https://archive.org/download/musopen-chopin/Nocturne%20Op.%2015%20no.%201%20In%20F%20major.mp3" data-field="track" property="track">
        <span data-name="track-name" property="name">Nocturne Op. 15 No. 1 in F major</span>
        <span data-name="track-artist" property="byArtist">Frederic Chopin</span>
        <span data-name="track-duration">5:06</span>
        <meta property="duration" content="PT306S">
      </li>
      <li typeof="MusicRecording" data-src="https://archive.org/download/musopen-chopin/Nocturne%20Op.%2027%20no.%201%20in%20C%20sharp%20minor.mp3" data-field="track" property="track">
        <span data-name="track-name" property="name">Nocturne Op. 27 No. 1 in C-sharp minor</span>
        <span data-name="track-artist" property="byArtist">Frederic Chopin</span>
        <span data-name="track-duration">5:52</span>
        <meta property="duration" content="PT352S">
      </li>
      <li typeof="MusicRecording" data-src="https://archive.org/download/musopen-chopin/Nocturne%20Op.%2032%20no.%201%20in%20B%20major.mp3" data-field="track" property="track">
        <span data-name="track-name" property="name">Nocturne Op. 32 No. 1 in B major</span>
        <span data-name="track-artist" property="byArtist">Frederic Chopin</span>
        <span data-name="track-duration">5:01</span>
        <meta property="duration" content="PT301S">
      </li>
    </ol>
  </div>
</section>
<div data-rune="audio">
  <rf-audio waveform="false" playlist="nocturnes">
    <script type="application/json">[]</script>
  </rf-audio>
</div>
album

Chopin Nocturnes

  1. Nocturne Op. 15 No. 1 in F majorFrederic Chopin5:06
  2. Nocturne Op. 27 No. 1 in C-sharp minorFrederic Chopin5:52
  3. Nocturne Op. 32 No. 1 in B majorFrederic Chopin5:01
<section data-field="content-section" typeof="MusicPlaylist" class="rf-playlist rf-playlist--album rf-playlist--stacked" data-type="album" data-layout="stacked" data-ratio="1 1" data-valign="top" data-gap="default" data-artist="Frederic Chopin" data-id="nocturnes" data-rune="playlist" data-density="full" data-media-position="top" style="--split-ratio: 1fr 1fr; --split-valign: start; --split-gap: var(--rf-spacing-md)">
  <div data-name="meta" class="rf-playlist__meta" data-section="header">
    <span data-name="type-badge" data-meta-type="category" data-meta-rank="primary" class="rf-playlist__type-badge">album</span>
  </div>
  <div data-name="content" class="rf-playlist__content">
    <header data-name="preamble" class="rf-playlist__preamble" data-section="preamble">
      <h1 id="chopin-nocturnes" data-name="headline" property="name" class="rf-playlist__headline" data-section="title">Chopin Nocturnes</h1>
    </header>
    <ol data-name="tracks" class="rf-playlist__tracks" data-sequence="numbered">
      <li typeof="MusicRecording" data-src="https://archive.org/download/musopen-chopin/Nocturne%20Op.%2015%20no.%201%20In%20F%20major.mp3" data-field="track" property="track">
        <span data-name="track-name" property="name">Nocturne Op. 15 No. 1 in F major</span>
        <span data-name="track-artist" property="byArtist">Frederic Chopin</span>
        <span data-name="track-duration">5:06</span>
        <meta property="duration" content="PT306S" />
      </li>
      <li typeof="MusicRecording" data-src="https://archive.org/download/musopen-chopin/Nocturne%20Op.%2027%20no.%201%20in%20C%20sharp%20minor.mp3" data-field="track" property="track">
        <span data-name="track-name" property="name">Nocturne Op. 27 No. 1 in C-sharp minor</span>
        <span data-name="track-artist" property="byArtist">Frederic Chopin</span>
        <span data-name="track-duration">5:52</span>
        <meta property="duration" content="PT352S" />
      </li>
      <li typeof="MusicRecording" data-src="https://archive.org/download/musopen-chopin/Nocturne%20Op.%2032%20no.%201%20in%20B%20major.mp3" data-field="track" property="track">
        <span data-name="track-name" property="name">Nocturne Op. 32 No. 1 in B major</span>
        <span data-name="track-artist" property="byArtist">Frederic Chopin</span>
        <span data-name="track-duration">5:01</span>
        <meta property="duration" content="PT301S" />
      </li>
    </ol>
  </div>
</section>
<div class="rf-audio rf-audio--false" data-waveform="false" data-rune="audio" data-density="compact">
  <rf-audio waveform="false" playlist="nocturnes">
    <script type="application/json">[]</script>
  </rf-audio>
</div>

Attributes

AttributeTypeDefaultDescription
srcstringAudio file URL
playliststringID of a playlist rune to connect to
titlestringTrack title displayed in the player
artiststringArtist name displayed in the player
waveformbooleanShow waveform visualisation
chaptersstringURL to an external chapters file