UNPKG

wavefile

Version:

Create, read and write wav files according to the specs.

367 lines (329 loc) 11.6 kB
// Type definitions for wavefile 11.0 // Project: https://github.com/rochars/wavefile // Definitions by: Rafael da Silva Rocha <https://github.com/rochars> // Definitions: https://github.com/rochars/wavefile export = wavefile; declare module wavefile { class WaveFile { /** * The bit depth code according to the samples. * @type {string} */ bitDepth: string; /** * The container identifier. * 'RIFF', 'RIFX' and 'RF64' are supported. * @type {string} */ container: string; /** * @type {number} */ chunkSize: number; /** * The format. * Always 'WAVE'. * @type {string} */ format: string; /** * The data of the 'fmt' chunk. * @type {!Object<string, *>} */ fmt: object; /** * The data of the 'fact' chunk. * @type {!Object<string, *>} */ fact: object; /** * The data of the 'cue ' chunk. * @type {!Object<string, *>} */ cue: object; /** * The data of the 'smpl' chunk. * @type {!Object<string, *>} */ smpl: object; /** * The data of the 'bext' chunk. * @type {!Object<string, *>} */ bext: object; /** * The data of the 'iXML' chunk. * @type {!Object<string, *>} */ iXML: object; /** * The data of the 'ds64' chunk. * Used only with RF64 files. * @type {!Object<string, *>} */ ds64: object; /** * The data of the 'data' chunk. * @type {!Object<string, *>} */ data: object; /** * The data of the 'LIST' chunks. * Each item in this list look like this: * { * chunkId: '', * chunkSize: 0, * format: '', * subChunks: [] * } * @type {!Array<!Object>} */ LIST: object[]; /** * The data of the 'junk' chunk. * @type {!Object<string, *>} */ junk: object; /** * The data of the '_PMX' chunk. * @type {!Object<string, *>} */ _PMX: object; /** * @param {Uint8Array=} [wavBuffer=null] A wave file buffer. * @throws {Error} If no 'RIFF' chunk is found. * @throws {Error} If no 'fmt ' chunk is found. * @throws {Error} If no 'data' chunk is found. */ constructor(wavBuffer?: Uint8Array); /** * Return the samples packed in a Float64Array. * @param {boolean=} [interleaved=false] True to return interleaved samples, * false to return the samples de-interleaved. * @param {Function=} [OutputObject=Float64Array] The sample container. * @return {!(Array|TypedArray)} the samples. */ getSamples(interleaved?:boolean, OutputObject?: Function): Float64Array; /** * Return the sample at a given index. * @param {number} index The sample index. * @return {number} The sample. * @throws {Error} If the sample index is off range. */ getSample(index: number): number; /** * Set the sample at a given index. * @param {number} index The sample index. * @param {number} sample The sample. * @throws {Error} If the sample index is off range. */ setSample(index: number, sample: number): void; /** * Set up the WaveFileCreator object based on the arguments passed. * Existing chunks are reset. * @param {number} numChannels The number of channels. * @param {number} sampleRate The sample rate. * Integers like 8000, 44100, 48000, 96000, 192000. * @param {string} bitDepthCode The audio bit depth code. * One of '4', '8', '8a', '8m', '16', '24', '32', '32f', '64' * or any value between '8' and '32' (like '12'). * @param {!(Array|TypedArray)} samples The samples. * @param {Object=} options Optional. Used to force the container * as RIFX with {'container': 'RIFX'} * @throws {Error} If any argument does not meet the criteria. */ fromScratch( numChannels: number, sampleRate: number, bitDepthCode: string, samples: Array<number>|Array<Array<number>>|ArrayLike<any>|Array<ArrayLike<any>>, options?: object): void; /** * Set up the WaveFileParser object from a byte buffer. * @param {!Uint8Array} wavBuffer The buffer. * @param {boolean=} [samples=true] True if the samples should be loaded. * @throws {Error} If container is not RIFF, RIFX or RF64. * @throws {Error} If format is not WAVE. * @throws {Error} If no 'fmt ' chunk is found. * @throws {Error} If no 'data' chunk is found. */ fromBuffer(bytes: Uint8Array, samples?:boolean): void; /** * Return a byte buffer representig the WaveFileParser object as a .wav file. * The return value of this method can be written straight to disk. * @return {!Uint8Array} A wav file. * @throws {Error} If bit depth is invalid. * @throws {Error} If the number of channels is invalid. * @throws {Error} If the sample rate is invalid. */ toBuffer(): Uint8Array; /** * Use a .wav file encoded as a base64 string to load the WaveFile object. * @param {string} base64String A .wav file as a base64 string. * @throws {Error} If any property of the object appears invalid. */ fromBase64(base64String: string): void; /** * Return a base64 string representig the WaveFile object as a .wav file. * @return {string} A .wav file as a base64 string. * @throws {Error} If any property of the object appears invalid. */ toBase64(): string; /** * Return a DataURI string representig the WaveFile object as a .wav file. * The return of this method can be used to load the audio in browsers. * @return {string} A .wav file as a DataURI. * @throws {Error} If any property of the object appears invalid. */ toDataURI(): string; /** * Use a .wav file encoded as a DataURI to load the WaveFile object. * @param {string} dataURI A .wav file as DataURI. * @throws {Error} If any property of the object appears invalid. */ fromDataURI(dataURI: string): void; /** * Force a file as RIFF. */ toRIFF(): void; /** * Force a file as RIFX. */ toRIFX(): void; /** * Change the bit depth of the samples. * @param {string} newBitDepth The new bit depth of the samples. * One of '8' ... '32' (integers), '32f' or '64' (floats) * @param {boolean=} [changeResolution=true] A boolean indicating if the * resolution of samples should be actually changed or not. * @throws {Error} If the bit depth is not valid. */ toBitDepth(newBitDepth: string, changeResolution?: boolean): void; /** * Convert the sample rate of the file. * @param {number} sampleRate The target sample rate. * @param {Object=} options The extra configuration, if needed. */ toSampleRate(samples: number, options?:object): void; /** * Encode a 16-bit wave file as 4-bit IMA ADPCM. * @throws {Error} If sample rate is not 8000. * @throws {Error} If number of channels is not 1. */ toIMAADPCM(): void; /** * Decode a 4-bit IMA ADPCM wave file as a 16-bit wave file. * @param {string=} [bitDepthCode='16'] The new bit depth of the samples. * One of '8' ... '32' (integers), '32f' or '64' (floats). */ fromIMAADPCM(bitDepthCode?: string): void; /** * Encode a 16-bit wave file as 8-bit A-Law. */ toALaw(): void; /** * Decode a 8-bit A-Law wave file into a 16-bit wave file. * @param {string=} [bitDepthCode='16'] The new bit depth of the samples. * One of '8' ... '32' (integers), '32f' or '64' (floats). */ fromALaw(bitDepthCode?: string): void; /** * Encode 16-bit wave file as 8-bit mu-Law. */ toMuLaw(): void; /** * Decode a 8-bit mu-Law wave file into a 16-bit wave file. * @param {string=} [bitDepthCode='16'] The new bit depth of the samples. * One of '8' ... '32' (integers), '32f' or '64' (floats). */ fromMuLaw(bitDepthCode?: string): void; /** * Write a RIFF tag in the INFO chunk. If the tag do not exist, * then it is created. It if exists, it is overwritten. * @param {string} tag The tag name. * @param {string} value The tag value. * @throws {Error} If the tag name is not valid. */ setTag(tag: string, value: string): void; /** * Return the value of a RIFF tag in the INFO chunk. * @param {string} tag The tag name. * @return {?string} The value if the tag is found, null otherwise. */ getTag(tag: string): string|null; /** * Return a Object<tag, value> with the RIFF tags in the file. * @return {!Object<string, string>} The file tags. */ listTags(): object; /** * Remove a RIFF tag in the INFO chunk. * @param {string} tag The tag name. * @return {boolean} True if a tag was deleted. */ deleteTag(tag: string): boolean; /** * Create a cue point in the wave file. * @param {!Object<string, *>} pointData The data of the cue point. */ setCuePoint(pointData: object): void; /** * Remove a cue point from a wave file. * @param {number} index the index of the point. First is 1, * second is 2, and so on. */ deleteCuePoint(index: number): void; /** * Return an array with all cue points in the file, in the order they appear * in the file. * Objects representing cue points/regions look like this: * { * position: 500, // the position in milliseconds * label: 'cue marker 1', * end: 1500, // the end position in milliseconds * dwName: 1, * dwPosition: 0, * fccChunk: 'data', * dwChunkStart: 0, * dwBlockStart: 0, * dwSampleOffset: 22050, // the position as a sample offset * dwSampleLength: 3646827, // the region length as a sample count * dwPurposeID: 544106354, * dwCountry: 0, * dwLanguage: 0, * dwDialect: 0, * dwCodePage: 0, * } * @return {!Array<Object>} */ listCuePoints(): Array<object>; /** * Update the label of a cue point. * @param {number} pointIndex The ID of the cue point. * @param {string} label The new text for the label. */ updateLabel(pointIndex: number, label: string): void; /** * Set the value of the iXML chunk. * @param {string} iXMLValue The value for the iXML chunk. * @throws {TypeError} If the value is not a string. */ setiXML(iXMLValue: string): void; /** * Return the value of the iXML chunk. * @return {string} The contents of the iXML chunk. */ getiXML(): string; /** * Set the value of the _PMX chunk. * @param {string} _PMXValue The value for the _PMX chunk. * @throws {TypeError} If the value is not a string. */ set_PMX(_PMXValue: string): void; /** * Get the value of the _PMX chunk. * @return {string} The contents of the _PMX chunk. */ get_PMX(): string; } }