This commit is contained in:
Vanilagy
2025-09-05 18:59:13 +02:00
parent dd7804e5ab
commit b58476b1b0
19 changed files with 393 additions and 395 deletions
+16 -16
View File
@@ -11,7 +11,7 @@ import { Demuxer } from '../demuxer';
import { Input } from '../input';
import { InputAudioTrack, InputAudioTrackBacking } from '../input-track';
import { PacketRetrievalOptions } from '../media-sink';
import { MediaMetadata } from '../metadata';
import { MetadataTags } from '../tags';
import { assert, UNDETERMINED_LANGUAGE } from '../misc';
import { EncodedPacket, PLACEHOLDER_DATA } from '../packet';
import { readAscii, readBytes, Reader, readU16, readU32, readU64 } from '../reader';
@@ -40,7 +40,7 @@ export class WaveDemuxer extends Demuxer {
tracks: InputAudioTrack[] = [];
lastKnownPacketIndex = 0;
metadata: MediaMetadata = {};
metadataTags: MetadataTags = {};
constructor(input: Input) {
super(input);
@@ -204,25 +204,25 @@ export class WaveDemuxer extends Demuxer {
const value = String.fromCharCode(...bytes.subarray(0, stringLength));
this.metadata.raw ??= {};
this.metadata.raw[chunkName] = value;
this.metadataTags.raw ??= {};
this.metadataTags.raw[chunkName] = value;
switch (chunkName) {
case 'INAM':
case 'TITL': {
this.metadata.title ??= value;
this.metadataTags.title ??= value;
}; break;
case 'TIT3': {
this.metadata.description ??= value;
this.metadataTags.description ??= value;
}; break;
case 'IART': {
this.metadata.artist ??= value;
this.metadataTags.artist ??= value;
}; break;
case 'IPRD': {
this.metadata.album ??= value;
this.metadataTags.album ??= value;
}; break;
case 'IPRT':
@@ -233,10 +233,10 @@ export class WaveDemuxer extends Demuxer {
const trackNumMax = parts[1] && Number.parseInt(parts[1], 10);
if (Number.isInteger(trackNum) && trackNum > 0) {
this.metadata.trackNumber ??= trackNum;
this.metadataTags.trackNumber ??= trackNum;
}
if (trackNumMax && Number.isInteger(trackNumMax) && trackNumMax > 0) {
this.metadata.trackNumberMax ??= trackNumMax;
this.metadataTags.tracksTotal ??= trackNumMax;
}
}; break;
@@ -244,26 +244,26 @@ export class WaveDemuxer extends Demuxer {
case 'IDIT': {
const date = new Date(value);
if (!Number.isNaN(date.getTime())) {
this.metadata.date ??= date;
this.metadataTags.date ??= date;
}
}; break;
case 'YEAR': {
const year = Number.parseInt(value, 10);
if (Number.isInteger(year) && year > 0) {
this.metadata.date ??= new Date(year, 0, 1);
this.metadataTags.date ??= new Date(year, 0, 1);
}
}; break;
case 'IGNR':
case 'GENR': {
this.metadata.genre ??= value;
this.metadataTags.genre ??= value;
}; break;
case 'ICMT':
case 'CMNT':
case 'COMM': {
this.metadata.comment ??= value;
this.metadataTags.comment ??= value;
}; break;
}
@@ -319,9 +319,9 @@ export class WaveDemuxer extends Demuxer {
return this.tracks;
}
async getMetadata() {
async getMetadataTags() {
await this.readMetadata();
return this.metadata;
return this.metadataTags;
}
}
+8 -8
View File
@@ -15,7 +15,7 @@ import { Writer } from '../writer';
import { EncodedPacket } from '../packet';
import { WavOutputFormat } from '../output-format';
import { assert, assertNever, keyValueIterator } from '../misc';
import { MediaMetadata, mediaMetadataIsEmpty } from '../metadata';
import { MetadataTags, metadataTagsAreEmpty } from '../tags';
export class WaveMuxer extends Muxer {
private format: WavOutputFormat;
@@ -159,9 +159,9 @@ export class WaveMuxer extends Muxer {
this.riffWriter.writeU16(blockSize);
this.riffWriter.writeU16(8 * pcmInfo.sampleSize);
if (!mediaMetadataIsEmpty(this.output._metadata)) {
if (!metadataTagsAreEmpty(this.output._metadataTags)) {
// Metadata exists, let's write an INFO chunk
this.writeInfoChunk(this.output._metadata);
this.writeInfoChunk(this.output._metadataTags);
}
// data chunk
@@ -180,7 +180,7 @@ export class WaveMuxer extends Muxer {
}
}
private writeInfoChunk(metadata: MediaMetadata) {
private writeInfoChunk(metadata: MetadataTags) {
const startPos = this.writer.getPos();
this.riffWriter.writeAscii('LIST');
@@ -207,8 +207,8 @@ export class WaveMuxer extends Muxer {
}; break;
case 'trackNumber': {
const string = metadata.trackNumberMax !== undefined
? `${value}/${metadata.trackNumberMax}`
const string = metadata.tracksTotal !== undefined
? `${value}/${metadata.tracksTotal}`
: value.toString();
this.writeInfoTag('ITRK', string);
@@ -232,8 +232,8 @@ export class WaveMuxer extends Muxer {
case 'albumArtist':
case 'discNumber':
case 'trackNumberMax':
case 'discNumberMax':
case 'tracksTotal':
case 'discsTotal':
case 'description':
case 'lyrics':
case 'images': {