mirror of
https://github.com/arcodange-org/mediabunny.git
synced 2026-09-30 20:33:55 +02:00
Remove sample correlation logic in decoder pipeline
This commit is contained in:
@@ -8,8 +8,6 @@ import { EncodedAudioSample, PLACEHOLDER_DATA } from '../sample';
|
||||
import { FrameHeader, getXingOffset, INFO, XING } from './mp3-misc';
|
||||
import { Mp3Reader } from './mp3-reader';
|
||||
|
||||
const AUDIO_SAMPLES_PER_FRAME = 1152;
|
||||
|
||||
type Sample = {
|
||||
timestamp: number;
|
||||
duration: number;
|
||||
@@ -46,7 +44,7 @@ export class Mp3Demuxer extends Demuxer {
|
||||
this.reader.pos += id3Tag.size;
|
||||
}
|
||||
|
||||
let nextTimestamp = 0;
|
||||
let nextTimestampInSamples = 0;
|
||||
|
||||
// Let's read all samples
|
||||
while (true) {
|
||||
@@ -71,16 +69,16 @@ export class Mp3Demuxer extends Demuxer {
|
||||
this.firstFrameHeader = header;
|
||||
}
|
||||
|
||||
const sampleDuration = AUDIO_SAMPLES_PER_FRAME / header.sampleRate;
|
||||
const sampleDuration = header.audioSamplesInFrame / header.sampleRate;
|
||||
const sample: Sample = {
|
||||
timestamp: nextTimestamp,
|
||||
timestamp: nextTimestampInSamples / header.sampleRate,
|
||||
duration: sampleDuration,
|
||||
dataStart: header.startPos,
|
||||
dataSize: header.totalSize,
|
||||
};
|
||||
|
||||
this.allSamples.push(sample);
|
||||
nextTimestamp += sampleDuration;
|
||||
nextTimestampInSamples += header.audioSamplesInFrame;
|
||||
}
|
||||
|
||||
if (!this.firstFrameHeader) {
|
||||
@@ -121,6 +119,11 @@ class Mp3AudioTrackBacking implements InputAudioTrackBacking {
|
||||
return 0;
|
||||
}
|
||||
|
||||
async getTimeResolution() {
|
||||
assert(this.demuxer.firstFrameHeader);
|
||||
return this.demuxer.firstFrameHeader.sampleRate / this.demuxer.firstFrameHeader.audioSamplesInFrame;
|
||||
}
|
||||
|
||||
computeDuration() {
|
||||
return this.demuxer.computeDuration();
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@ export type FrameHeader = {
|
||||
copyright: number;
|
||||
original: number;
|
||||
emphasis: number;
|
||||
audioSamplesInFrame: number;
|
||||
};
|
||||
|
||||
export const computeMp3FrameSize = (layer: number, bitrate: number, sampleRate: number, padding: number) => {
|
||||
@@ -114,6 +115,19 @@ export const readFrameHeader = (word: number, reader: { pos: number; fileSize: n
|
||||
return null;
|
||||
}
|
||||
|
||||
let audioSamplesInFrame: number;
|
||||
if (mpegVersionId === 3) {
|
||||
audioSamplesInFrame = layer === 3 ? 384 : 1152;
|
||||
} else {
|
||||
if (layer === 3) {
|
||||
audioSamplesInFrame = 384;
|
||||
} else if (layer === 2) {
|
||||
audioSamplesInFrame = 1152;
|
||||
} else {
|
||||
audioSamplesInFrame = 576;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
startPos: startPos,
|
||||
totalSize: frameLength,
|
||||
@@ -127,5 +141,6 @@ export const readFrameHeader = (word: number, reader: { pos: number; fileSize: n
|
||||
copyright,
|
||||
original,
|
||||
emphasis,
|
||||
audioSamplesInFrame,
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user