PageSourceSearch

https://stacks-audiox.netlify.app/assets/features_metadata-handling.md.CEcp0i7n.js

js stacks-audiox.netlify.app collected 2026-10-03 11:27:25 UTC 57,967 bytes, 195 lines download raw bytes

1import{_ as i,i as a,o as n,am as t}from"./chunks/framework.Dx2ObkfS.js";const g=JSON.parse('{"title":"Metadata Handling","description":"","frontmatter":{},"headers":[],"relativePath":"features/metadata-handling.md","filePath":"features/metadata-handling.md","lastUpdated":1768861450000}'),h={name:"features/metadata-handling.md"};function l(k,s,p,e,d,r){return n(),a("div",null,[...s[0]||(s[0]=[t(`<h1 id="metadata-handling" tabindex="-1">Metadata Handling <a class="header-anchor" href="#metadata-handling" aria-label="Permalink to &quot;Metadata Handling&quot;">​</a></h1><p>Audiox provides comprehensive metadata handling capabilities, allowing you to read, write, and modify audio file metadata including ID3 tags, artist information, album art references, and more.</p><h2 id="reading-metadata" tabindex="-1">Reading Metadata <a class="header-anchor" href="#reading-metadata" aria-label="Permalink to &quot;Reading Metadata&quot;">​</a></h2><h3 id="basic-metadata-retrieval" tabindex="-1">Basic Metadata Retrieval <a class="header-anchor" href="#basic-metadata-retrieval" aria-label="Permalink to &quot;Basic Metadata Retrieval&quot;">​</a></h3><p>Get audio file information including basic metadata:</p><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { audioInfo } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@stacksjs/audiox&#39;</span></span>
2<span class="line"></span>
3<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> info</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> audioInfo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;music.mp3&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
4<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">console.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">log</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(info)</span></span>
5<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// [</span></span>
6<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//   {</span></span>
7<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//     codec: &#39;mp3&#39;,</span></span>
8<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//     channels: 2,</span></span>
9<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//     sampleRate: &#39;44100&#39;,</span></span>
10<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//     bitrate: &#39;192000&#39;,</span></span>
11<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//     duration: &#39;180.5&#39;,</span></span>
12<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//   }</span></span>
13<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// ]</span></span></code></pre></div><h3 id="extended-metadata" tabindex="-1">Extended Metadata <a class="header-anchor" href="#extended-metadata" aria-label="Permalink to &quot;Extended Metadata&quot;">​</a></h3><p>Request specific metadata tags:</p><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">
13import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { audioInfo } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@stacksjs/audiox&#39;</span></span>
14<span class="line"></span>
15<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> info</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> audioInfo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;music.mp3&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, {</span></span>
16<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  metadataTags: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;title&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;artist&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;album&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;track&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;genre&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;year&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span>
17<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span>
18<span class="line"></span>
19<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">console.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">log</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(info)</span></span>
20<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// [</span></span>
21<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//   {</span></span>
22<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//     codec: &#39;mp3&#39;,</span></span>
23<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//     channels: 2,</span></span>
24<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//     sampleRate: &#39;44100&#39;,</span></span>
25<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//     bitrate: &#39;192000&#39;,</span></span>
26<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//     duration: &#39;180.5&#39;,</span></span>
27<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//     metadata: {</span></span>
28<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//       title: &#39;Song Title&#39;,</span></span>
29<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//       artist: &#39;Artist Name&#39;,</span></span>
30<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//       album: &#39;Album Name&#39;,</span></span>
31<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//       track: &#39;1&#39;,</span></span>
32<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//       genre: &#39;Pop&#39;,</span></span>
33<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//       year: &#39;2024&#39;</span></span>
34<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//     }</span></span>
35<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">//   }</span></span>
36<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// ]</span></span></code></pre></div><h3 id="cli-metadata-reading" tabindex="-1">
36CLI Metadata Reading <a class="header-anchor" href="#cli-metadata-reading" aria-label="Permalink to &quot;CLI Metadata Reading&quot;">​</a></h3><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Get basic info</span></span>
37<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">audiox</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> info</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> music.mp3</span></span>
38<span class="line"></span>
39<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Get specific metadata fields</span></span>
40<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">audiox</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> info</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> music.mp3</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --metadata</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> title,artist,album,year</span></span>
41<span class="line"></span>
42<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Verbose output with all available metadata</span></span>
43<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">audiox</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> info</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> music.mp3</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --verbose</span></span></code></pre></div><h2 id="writing-metadata" tabindex="-1">Writing Metadata <a class="header-anchor" href="#writing-metadata" aria-label="Permalink to &quot;Writing Metadata&quot;">​</a></h2><h3 id="embedding-metadata-during-conversion" tabindex="-1">Embedding Metadata During Conversion <a class="header-anchor" href="#embedding-metadata-during-conversion" aria-label="Permalink to &quot;Embedding Metadata During Conversion&quot;">​</a></h3><p>Add metadata when converting audio files:</p><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { audio } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@stacksjs/audiox&#39;</span></span>
44<span class="line"></span>
45<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> audio</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;input.wav&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;output.mp3&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, {</span></span>
46<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  codec: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;mp3&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
47<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  bitrate: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;320k&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
48<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  metadata: {</span></span>
49<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    title: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;My Song&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
50<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    artist: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;Artist Name&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
51<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    album: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;Album Title&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
52<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    year: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;2024&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
53<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    track: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;1&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
54<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    genre: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;Electronic&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
55<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  },</span></span>
56<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span></code></pre></div><h3 id="cli-metadata-writing" tabindex="-1">CLI Metadata Writing <a class="header-anchor" href="#cli-metadata-writing" aria-label="Permalink to &quot;CLI Metadata Writing&quot;">​</a></h3><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span>
56<pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Add metadata during conversion</span></span>
57<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">audiox</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> convert</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> input.wav</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> output.mp3</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
58<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">  --codec</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> mp3</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
59<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">  --bitrate</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 320k</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
60<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">  --metadata</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;title=My Song&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
61<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">  --metadata</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;artist=Artist Name&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
62<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">  --metadata</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;album=Album Title&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
63<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">  --metadata</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;year=2024&quot;</span></span>
64<span class="line"></span>
65<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Alternative format</span></span>
66<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">audiox</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> convert</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">
66 input.wav</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> output.mp3</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
67<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">  --codec</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> mp3</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \\</span></span>
68<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">  --metadata</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> title=&quot;My Song&quot;,artist=&quot;Artist Name&quot;,year=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">2024</span></span></code></pre></div><h2 id="common-metadata-fields" tabindex="-1">Common Metadata Fields <a class="header-anchor" href="#common-metadata-fields" aria-label="Permalink to &quot;Common Metadata Fields&quot;">​</a></h2><h3 id="standard-tags" tabindex="-1">Standard Tags <a class="header-anchor" href="#standard-tags" aria-label="Permalink to &quot;Standard Tags&quot;">​</a></h3><table tabindex="0"><thead><tr><th>Field</th><th>Description</th><th>Example</th></tr></thead><tbody><tr><td><code>title</code></td><td>Track title</td><td>&quot;Bohemian Rhapsody&quot;</td></tr><tr><td><code>artist</code></td><td>Performing artist</td><td>&quot;Queen&quot;</td></tr><tr><td><code>album</code></td><td>Album name</td><td>&quot;A Night at the Opera&quot;</td></tr><tr><td><code>album_artist</code></td><td>Album artist</td><td>&quot;Queen&quot;</td></tr><tr><td><code>year</code></td><td>Release year</td><td>&quot;1975&quot;</td></tr><tr><td><code>track</code></td><td>Track number</td><td>&quot;11&quot;</td></tr><tr><td><code>disc</code></td><td>Disc number</td><td>&quot;1&quot;</td></tr><tr><td><code>genre</code></td><td>Music genre</td><td>&quot;Rock&quot;</td></tr><tr><td><code>composer</code></td><td>Composer</td><td>&quot;Freddie Mercury&quot;</td></tr><tr><td><code>comment</code></td><td>Additional comments</td><td>&quot;Remastered 2011&quot;</td></tr></tbody></table><h3 id="extended-tags" tabindex="-1">Extended Tags <a class="header-anchor" href="#extended-tags" aria-label="Permalink to &quot;Extended Tags&quot;">​</a></h3><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> audio</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;input.wav&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;output.mp3&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, {</span></span>
69<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  codec: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;mp3&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
70<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  metadata: {</span></span>
71<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    title: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;Track Title&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
72<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    artist: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;Artist Name&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
73<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    album: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;Album Name&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
74<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    album_artist: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;Album Artist&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
75<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    year: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;2024&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
76<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    track: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;5&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
77<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    disc: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;1&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
78<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    genre: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;Electronic&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
79<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    composer: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;Composer Name&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
80<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    publisher: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;Record Label&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
81<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    copyright: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;2024 Record Label&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
82<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    comment: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;Encoded with audiox&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
83<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    encoded_by: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;audiox&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
84<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  },</span></span>
85<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span></code></pre></div><h2 id="batch-metadata-operations" tabindex="-1">Batch Metadata Operations <a class="header-anchor" href="#batch-metadata-operations" aria-label="Permalink to &quot;Batch Metadata Operations&quot;">​</a></h2><h3 id="apply-consistent-metadata-to-multiple-files" tabindex="-1">Apply Consistent Metadata to Multiple Files <a class="header-anchor" href="#apply-consistent-metadata-to-multiple-files" aria-label="Permalink to &quot;Apply Consistent Metadata to Multiple Files&quot;">​</a></h3><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span>
85<pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { audio } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@stacksjs/audiox&#39;</span></span>
86<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { readdir } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;node:fs/promises&#39;</span></span>
87<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { join, parse } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;node:path&#39;</span></span>
88<span class="line"></span>
89<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> function</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> tagAlbum</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span></span>
90<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">  inputDir</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
91<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">  outputDir</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
92<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">  albumInfo</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
93<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">    artist</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span></span>
94<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">    album</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span></span>
95<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">    year</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span></span>
96<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">    genre</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span></span>
97<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  },</span></span>
98<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
99<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> files</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> readdir</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(inputDir)</span></span>
100<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> audioFiles</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> files.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">filter</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">f</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =&gt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> f.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">endsWith</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;.mp3&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)).</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">
100sort</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span></span>
101<span class="line"></span>
102<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">let</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> i </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">; i </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&lt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> audioFiles.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">length</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">; i</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">++</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
103<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">    const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> file</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> audioFiles[i]</span></span>
104<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">    const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> inputPath</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> join</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(inputDir, file)</span></span>
105<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">    const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> outputPath</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> join</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(outputDir, file)</span></span>
106<span class="line"></span>
107<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">    // Use filename as track title</span></span>
108<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">    const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> trackTitle</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> parse</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(file).name</span></span>
109<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">      .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">replace</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">^</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\d</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">+</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">[-_.\\s]</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">*</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// Remove leading track numbers</span></span>
110<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">      .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">replace</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">[-_]</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">g</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39; &#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// Replace separators with spaces</span></span>
111<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">      .</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">trim</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">()</span></span>
112<span class="line"></span>
113<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">    await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> audio</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(inputPath, outputPath, {</span></span>
114<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">      codec: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;mp3&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
115<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">      bitrate: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;320k&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
116<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">      metadata: {</span></span>
117<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">        ...</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">albumInfo,</span></span>
118<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">        title: trackTitle,</span></span>
119<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">        track: </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">String</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(i </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">+</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> 1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">),</span></span>
120<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">      },</span></span>
121<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    })</span></span>
122<span class="line"></span>
123<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    console.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">log</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">\`Tagged: \${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">file</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">}\`</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
124<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  }</span></span>
125<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
126<span class="line"></span>
127<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> tagAlbum</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;./raw-tracks&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;./tagged-album&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">
127, {</span></span>
128<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  artist: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;The Band&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
129<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  album: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;Greatest Hits&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
130<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  year: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;2024&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
131<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  genre: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;Rock&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
132<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})</span></span></code></pre></div><h3 id="reading-metadata-from-multiple-files" tabindex="-1">Reading Metadata from Multiple Files <a class="header-anchor" href="#reading-metadata-from-multiple-files" aria-label="Permalink to &quot;Reading Metadata from Multiple Files&quot;">​</a></h3><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { audioInfo } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@stacksjs/audiox&#39;</span></span>
133<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { readdir } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;node:fs/promises&#39;</span></span>
134<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { join } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;node:path&#39;</span></span>
135<span class="line"></span>
136<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> function</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> scanLibrary</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">directory</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
137<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> files</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> readdir</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(directory)</span></span>
138<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> audioFiles</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> files.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">filter</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">f</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =&gt;</span></span>
139<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;.mp3&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;.flac&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;.m4a&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">].</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">some</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">ext</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =&gt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> f.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">endsWith</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(ext)),</span></span>
140<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  )</span></span>
141<span class="line"></span>
142<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> library</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> []</span></span>
143<span class="line"></span>
144<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> (</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> file</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> of</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> audioFiles) {</span></span>
145<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">    const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> filePath</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> join</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(directory, file)</span></span>
146<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">    const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> info</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> audioInfo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(filePath, {</span></span>
147<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">      metadataTags: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;title&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;artist&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;album&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;year&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;genre&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span>
148<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    })</span></span>
149<span class="line"></span>
150<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    library.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">push</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">
150({</span></span>
151<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">      file,</span></span>
152<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">      ...</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">info[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span>
153<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    })</span></span>
154<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  }</span></span>
155<span class="line"></span>
156<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> library</span></span>
157<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
158<span class="line"></span>
159<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> tracks</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> scanLibrary</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;./music&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span>
160<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">console.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">table</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(tracks.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">map</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">t</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =&gt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ({</span></span>
161<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  File: t.file,</span></span>
162<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  Title: t.metadata?.title,</span></span>
163<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  Artist: t.metadata?.artist,</span></span>
164<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  Album: t.metadata?.album,</span></span>
165<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">})))</span></span></code></pre></div><h2 id="metadata-preservation" tabindex="-1">Metadata Preservation <a class="header-anchor" href="#metadata-preservation" aria-label="Permalink to &quot;Metadata Preservation&quot;">​</a></h2><h3 id="preserving-metadata-during-conversion" tabindex="-1">Preserving Metadata During Conversion <a class="header-anchor" href="#preserving-metadata-during-conversion" aria-label="Permalink to &quot;Preserving Metadata During Conversion&quot;">​</a></h3><p>When converting between formats, preserve existing metadata:</p><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { audio, audioInfo } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@stacksjs/audiox&#39;</span></span>
166<span class="line"></span>
167<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">async</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> function</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> convertWithMetadata</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">input</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;">output</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
168<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">  // Read existing metadata</span></span>
169<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> info</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> audioInfo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(input, {</span></span>
170<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    metadataTags: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;title&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;artist&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;album&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;year&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;track&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;genre&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span>
171<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  })</span></span>
172<span class="line"></span>
173<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> existingMetadata</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> info[</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]?.metadata </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">||</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {}</span></span>
174<span class="line"></span>
175<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">  // Convert with preserved metadata</span></span>
176<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">  await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> audio</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(input, output, {</span></span>
177<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    codec: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;mp3&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
178<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    bitrate: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;320k&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
179<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    metadata: existingMetadata,</span></span>
180<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  })</span></span>
181<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
182<span class="line"></span>
183<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">await</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> convertWithMetadata</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;original.flac&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;converted.mp3&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">)</span></span></code></pre></div><h2 id="configuration-default-metadata" tabindex="-1">Configuration Default Metadata <a class="header-anchor" href="#configuration-default-metadata" aria-label="Permalink to &quot;Configuration Default Metadata&quot;">​</a></h2><p>Set default metadata in your configuration file:</p><div class="language-ts vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ts</span>
183<pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// audiox.config.ts</span></span>
184<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">import</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { AudioxOptions } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">from</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &#39;@stacksjs/audiox&#39;</span></span>
185<span class="line"></span>
186<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">const</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> config</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> AudioxOptions</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> =</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
187<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  codec: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;mp3&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
188<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  bitrate: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;192k&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
189<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  metadata: {</span></span>
190<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    encoded_by: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;My Studio&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
191<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">    copyright: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;2024 My Label&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
192<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">  },</span></span>
193<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span>
194<span class="line"></span>
195<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> default</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> config</span></span></code></pre></div><h2 id="best-practices" tabindex="-1">Best Practices <a class="header-anchor" href="#best-practices" aria-label="Permalink to &quot;Best Practices&quot;">​</a></h2><ol><li><strong>Consistent Formatting</strong>: Use consistent formatting for metadata fields across your library</li><li><strong>Character Encoding</strong>: Ensure proper UTF-8 encoding for international characters</li><li><strong>Backup Original Files</strong>: Keep backups before batch metadata operations</li><li><strong>Validate Metadata</strong>: Verify metadata was written correctly after conversion</li><li><strong>Use Standard Fields</strong>: Stick to standard metadata fields for better compatibility</li><li><strong>Handle Missing Data</strong>: Gracefully handle files with missing or incomplete metadata</li></ol>`,36)])])}const F=i(h,[["render",l]]);export{g as __pageData,F as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.