diff --git a/src/mp3/mp3-demuxer.ts b/src/mp3/mp3-demuxer.ts index 9e9b511..16537cc 100644 --- a/src/mp3/mp3-demuxer.ts +++ b/src/mp3/mp3-demuxer.ts @@ -240,7 +240,6 @@ class Mp3AudioTrackBacking implements InputAudioTrackBacking { x => x.timestamp, ); if (sampleIndex === -1) { - console.log('uh', packet, this.demuxer.loadedSamples); throw new Error('Packet was not created from this track.'); } diff --git a/src/reader.ts b/src/reader.ts index cfcab58..6344e91 100644 --- a/src/reader.ts +++ b/src/reader.ts @@ -9,6 +9,44 @@ import { clamp, MaybePromise, toDataView } from './misc'; import { Source } from './source'; +export class Reader { + fileSize!: number; + + constructor(public source: Source) {} + + requestSlice(start: number, length: number): MaybePromise { + if (start + length > this.fileSize) { + return null; + } + + const end = start + length; + const result = this.source._read(start, end); + + if (result instanceof Promise) { + return result.then((x) => { + if (!x) { + return null; + } + + return new FileSlice(x.bytes, x.view, x.offset, start, end); + }); + } else { + if (!result) { + return null; + } + + return new FileSlice(result.bytes, result.view, result.offset, start, end); + } + } + + requestSliceRange(start: number, minLength: number, maxLength: number): MaybePromise { + return this.requestSlice( + start, + clamp(this.fileSize - start, minLength, maxLength), + ); + } +} + export class FileSlice { bufferPos: number; @@ -63,44 +101,6 @@ export class FileSlice { } } -export class Reader { - fileSize!: number; - - constructor(public source: Source) {} - - requestSlice(start: number, length: number): MaybePromise { - if (start + length > this.fileSize) { - return null; - } - - const end = start + length; - const result = this.source._read(start, end); - - if (result instanceof Promise) { - return result.then((x) => { - if (!x) { - return null; - } - - return new FileSlice(x.bytes, x.view, x.offset, start, end); - }); - } else { - if (!result) { - return null; - } - - return new FileSlice(result.bytes, result.view, result.offset, start, end); - } - } - - requestSliceRange(start: number, minLength: number, maxLength: number): MaybePromise { - return this.requestSlice( - start, - clamp(this.fileSize - start, minLength, maxLength), - ); - } -} - export const readBytes = (slice: FileSlice, length: number) => { const bytes = slice.bytes.subarray(slice.bufferPos, slice.bufferPos + length); slice.bufferPos += length; @@ -232,49 +232,3 @@ export const readAscii = (slice: FileSlice, length: number) => { return str; }; - -export class ReturnValue { - isPending = true; - value!: T; - - set(value: T): typeof symbol { - this.isPending = false; - this.value = value; - - return symbol; - } -} - -const symbol: unique symbol = Symbol(); - -export type Uh = Promise; - -/* -class ReturnValue { - isSet = false; - value!: T; - - set(value: T) { - this.isSet = true; - this.value = value; - } -} - -const maybeWait = async (ret: ReturnValue) => { - if (Math.random() < 0.5) { - await new Promise(resolve => setTimeout(resolve, 1000)); - } - - ret.set(Math.random()); -}; - -const yo = async () => { - const waitResult = new ReturnValue(); - const promise = maybeWait(waitResult); - if (!waitResult.isSet) await promise; - - console.log(waitResult.value); -}; - -yo(); -*/