Initial working version

This commit is contained in:
Samuel Kent
2022-12-22 20:22:22 +11:00
parent ce9675a1cc
commit ced7fa5092
902 changed files with 150252 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
import { IGetToken } from 'strtok3/lib/core';
/**
* Speex Header Packet
* Ref: https://www.speex.org/docs/manual/speex-manual/node8.html#SECTION00830000000000000000
*/
export interface IHeader {
/**
* speex_string, char[] 8
*/
speex: string;
/**
* speex_version, char[] 20
*/
version: string;
/**
* Version id
*/
version_id: number;
header_size: number;
rate: number;
mode: number;
mode_bitstream_version: number;
nb_channels: number;
bitrate: number;
frame_size: number;
vbr: number;
frames_per_packet: number;
extra_headers: number;
reserved1: number;
reserved2: number;
}
/**
* Speex Header Packet
* Ref: https://www.speex.org/docs/manual/speex-manual/node8.html#SECTION00830000000000000000
*/
export declare const Header: IGetToken<IHeader>;
+31
View File
@@ -0,0 +1,31 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Header = void 0;
const Token = require("token-types");
const util = require("../../common/Util");
/**
* Speex Header Packet
* Ref: https://www.speex.org/docs/manual/speex-manual/node8.html#SECTION00830000000000000000
*/
exports.Header = {
len: 80,
get: (buf, off) => {
return {
speex: new Token.StringType(8, 'ascii').get(buf, off + 0),
version: util.trimRightNull(new Token.StringType(20, 'ascii').get(buf, off + 8)),
version_id: buf.readInt32LE(off + 28),
header_size: buf.readInt32LE(off + 32),
rate: buf.readInt32LE(off + 36),
mode: buf.readInt32LE(off + 40),
mode_bitstream_version: buf.readInt32LE(off + 44),
nb_channels: buf.readInt32LE(off + 48),
bitrate: buf.readInt32LE(off + 52),
frame_size: buf.readInt32LE(off + 56),
vbr: buf.readInt32LE(off + 60),
frames_per_packet: buf.readInt32LE(off + 64),
extra_headers: buf.readInt32LE(off + 68),
reserved1: buf.readInt32LE(off + 72),
reserved2: buf.readInt32LE(off + 76)
};
}
};
+22
View File
@@ -0,0 +1,22 @@
/// <reference types="node" />
import { ITokenizer } from 'strtok3/lib/core';
import { IPageHeader } from '../Ogg';
import { VorbisParser } from '../vorbis/VorbisParser';
import { IOptions } from '../../type';
import { INativeMetadataCollector } from '../../common/MetadataCollector';
/**
* Speex, RFC 5574
* Ref:
* https://www.speex.org/docs/manual/speex-manual/
* https://tools.ietf.org/html/rfc5574
*/
export declare class SpeexParser extends VorbisParser {
private tokenizer;
constructor(metadata: INativeMetadataCollector, options: IOptions, tokenizer: ITokenizer);
/**
* Parse first Speex Ogg page
* @param {IPageHeader} header
* @param {Buffer} pageData
*/
protected parseFirstPage(header: IPageHeader, pageData: Buffer): void;
}
+35
View File
@@ -0,0 +1,35 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SpeexParser = void 0;
const initDebug = require("debug");
const Speex = require("./Speex");
const VorbisParser_1 = require("../vorbis/VorbisParser");
const debug = initDebug('music-metadata:parser:ogg:speex');
/**
* Speex, RFC 5574
* Ref:
* https://www.speex.org/docs/manual/speex-manual/
* https://tools.ietf.org/html/rfc5574
*/
class SpeexParser extends VorbisParser_1.VorbisParser {
constructor(metadata, options, tokenizer) {
super(metadata, options);
this.tokenizer = tokenizer;
}
/**
* Parse first Speex Ogg page
* @param {IPageHeader} header
* @param {Buffer} pageData
*/
parseFirstPage(header, pageData) {
debug('First Ogg/Speex page');
const speexHeader = Speex.Header.get(pageData, 0);
this.metadata.setFormat('codec', `Speex ${speexHeader.version}`);
this.metadata.setFormat('numberOfChannels', speexHeader.nb_channels);
this.metadata.setFormat('sampleRate', speexHeader.rate);
if (speexHeader.bitrate !== -1) {
this.metadata.setFormat('bitrate', speexHeader.bitrate);
}
}
}
exports.SpeexParser = SpeexParser;