midifile-ts
Advanced tools
Comparing version 1.1.2 to 1.1.3
{ | ||
"semi": false | ||
} |
@@ -0,0 +0,0 @@ { |
{ | ||
"editor.formatOnSave": true | ||
} |
@@ -1,17 +0,1 @@ | ||
/// <reference types="node" /> | ||
/// <reference types="node" /> | ||
declare type StreamSource = DataView | number[] | ArrayBuffer | Buffer | Uint8Array; | ||
declare class Stream { | ||
private buf; | ||
private position; | ||
constructor(buf: StreamSource); | ||
readByte(): number; | ||
readStr(length: number): string; | ||
read(length: number): number[]; | ||
readInt32(): number; | ||
readInt16(): number; | ||
readInt8(signed?: boolean): number; | ||
eof(): boolean; | ||
readVarInt(): number; | ||
} | ||
interface Event<T extends string> { | ||
@@ -24,2 +8,3 @@ deltaTime: number; | ||
} | ||
/* Meta */ | ||
interface SequenceNumberEvent extends MetaEvent<"sequenceNumber"> { | ||
@@ -84,2 +69,3 @@ number: number; | ||
} | ||
/* Channel */ | ||
interface ChannelEvent<T extends string> extends Event<"channel"> { | ||
@@ -113,2 +99,3 @@ channel: number; | ||
} | ||
/* Controller */ | ||
interface ControllerEvent extends ChannelEvent<"controller"> { | ||
@@ -118,2 +105,3 @@ controllerType: number; | ||
} | ||
/* Other */ | ||
interface SysExEvent extends Event<"sysEx"> { | ||
@@ -125,4 +113,25 @@ data: number[]; | ||
} | ||
declare type AnyEvent = SequenceNumberEvent | TextEvent | CopyrightNoticeEvent | TrackNameEvent | InstrumentNameEvent | LyricsEvent | MarkerEvent | CuePointEvent | ChannelPrefixEvent | PortPrefixEvent | EndOfTrackEvent | SetTempoEvent | SmpteOffsetEvent | TimeSignatureEvent | KeySignatureEvent | SequencerSpecificEvent | UnknownMetaEvent | NoteOffEvent | NoteOnEvent | NoteAftertouchEvent | ProgramChangeEvent | ChannelAftertouchEvent | PitchBendEvent | UnknownChannelEvent | ControllerEvent | SysExEvent | DividedSysExEvent; | ||
declare function deserialize(stream: Stream, lastEventTypeByte: number, setLastEventTypeByte: (eventType: number) => void): AnyEvent; | ||
type AnyEvent = SequenceNumberEvent | TextEvent | CopyrightNoticeEvent | TrackNameEvent | InstrumentNameEvent | LyricsEvent | MarkerEvent | CuePointEvent | ChannelPrefixEvent | PortPrefixEvent | EndOfTrackEvent | SetTempoEvent | SmpteOffsetEvent | TimeSignatureEvent | KeySignatureEvent | SequencerSpecificEvent | UnknownMetaEvent | NoteOffEvent | NoteOnEvent | NoteAftertouchEvent | ProgramChangeEvent | ChannelAftertouchEvent | PitchBendEvent | UnknownChannelEvent | ControllerEvent | SysExEvent | DividedSysExEvent; | ||
type StreamSource = DataView | number[] | ArrayBuffer | Uint8Array; | ||
/* Wrapper for accessing strings through sequential reads */ | ||
declare class Stream { | ||
private buf; | ||
private position; | ||
constructor(buf: StreamSource); | ||
readByte(): number; | ||
readStr(length: number): string; | ||
read(length: number): number[]; | ||
/* read a big-endian 32-bit integer */ | ||
readInt32(): number; | ||
/* read a big-endian 16-bit integer */ | ||
readInt16(): number; | ||
/* read an 8-bit integer */ | ||
readInt8(signed?: boolean): number; | ||
eof(): boolean; | ||
/* read a MIDI-style variable-length integer | ||
(big-endian value in groups of 7 bits, | ||
with top bit set to signify that another byte follows) | ||
*/ | ||
readVarInt(): number; | ||
} | ||
interface MidiHeader { | ||
@@ -137,23 +146,14 @@ formatType: number; | ||
} | ||
/* | ||
class to parse the .mid file format | ||
(depends on stream.js) | ||
*/ | ||
declare function read(data: StreamSource): MidiFile; | ||
declare class Buffer { | ||
private data; | ||
private position; | ||
get length(): number; | ||
writeByte(v: number): void; | ||
writeStr(str: string): void; | ||
writeInt32(v: number): void; | ||
writeInt16(v: number): void; | ||
writeBytes(arr: number[]): void; | ||
writeChunk(id: string, func: (buf: Buffer) => void): void; | ||
toBytes(): Uint8Array; | ||
} | ||
//https://sites.google.com/site/yyagisite/material/smfspec#format | ||
declare function write(tracks: AnyEvent[][], ticksPerBeat?: number): Uint8Array; | ||
declare function serialize(e: AnyEvent, includeDeltaTime?: boolean): number[]; | ||
declare function deserialize(stream: Stream, lastEventTypeByte: number, setLastEventTypeByte: (eventType: number) => void): AnyEvent; | ||
declare const MIDIChannelEvents: { | ||
[key: string]: number; | ||
}; | ||
declare const MIDIMetaEvents: { | ||
[key: string]: number; | ||
}; | ||
declare function serialize(e: AnyEvent, includeDeltaTime?: boolean): number[]; | ||
declare function write(tracks: AnyEvent[][], ticksPerBeat?: number): Uint8Array; | ||
declare const MIDIControlEventNames: string[]; | ||
@@ -166,2 +166,5 @@ declare const MIDIControlEvents: { | ||
}; | ||
declare const MIDIMetaEvents: { | ||
[key: string]: number; | ||
}; | ||
export { read, MidiFile, MidiHeader, write, serialize, deserialize, MIDIChannelEvents, MIDIControlEventNames, MIDIControlEvents, MIDIMetaEventNames, MIDIMetaEvents, StreamSource, Event, MetaEvent, SequenceNumberEvent, TextEvent, CopyrightNoticeEvent, TrackNameEvent, InstrumentNameEvent, LyricsEvent, MarkerEvent, CuePointEvent, ChannelPrefixEvent, PortPrefixEvent, EndOfTrackEvent, SetTempoEvent, SmpteOffsetEvent, TimeSignatureEvent, KeySignatureEvent, SequencerSpecificEvent, UnknownMetaEvent, ChannelEvent, NoteOffEvent, NoteOnEvent, NoteAftertouchEvent, ProgramChangeEvent, ChannelAftertouchEvent, PitchBendEvent, UnknownChannelEvent, ControllerEvent, SysExEvent, DividedSysExEvent, AnyEvent }; |
@@ -15,5 +15,2 @@ 'use strict'; | ||
} | ||
else if (buf instanceof Buffer) { | ||
this.buf = new DataView(buf.buffer); | ||
} | ||
else if (buf instanceof Array) { | ||
@@ -99,7 +96,7 @@ this.buf = new DataView(new Uint8Array(buf).buffer); | ||
var subtypeByte = stream.readInt8(); | ||
var length_1 = stream.readVarInt(); | ||
var length = stream.readVarInt(); | ||
switch (subtypeByte) { | ||
case 0x00: | ||
if (length_1 !== 2) | ||
throw new Error("Expected length for sequenceNumber event is 2, got " + length_1); | ||
if (length !== 2) | ||
throw new Error("Expected length for sequenceNumber event is 2, got " + length); | ||
return { | ||
@@ -116,3 +113,3 @@ deltaTime: deltaTime, | ||
subtype: "text", | ||
text: stream.readStr(length_1) | ||
text: stream.readStr(length) | ||
}; | ||
@@ -124,3 +121,3 @@ case 0x02: | ||
subtype: "copyrightNotice", | ||
text: stream.readStr(length_1) | ||
text: stream.readStr(length) | ||
}; | ||
@@ -132,3 +129,3 @@ case 0x03: | ||
subtype: "trackName", | ||
text: stream.readStr(length_1) | ||
text: stream.readStr(length) | ||
}; | ||
@@ -140,3 +137,3 @@ case 0x04: | ||
subtype: "instrumentName", | ||
text: stream.readStr(length_1) | ||
text: stream.readStr(length) | ||
}; | ||
@@ -148,3 +145,3 @@ case 0x05: | ||
subtype: "lyrics", | ||
text: stream.readStr(length_1) | ||
text: stream.readStr(length) | ||
}; | ||
@@ -156,3 +153,3 @@ case 0x06: | ||
subtype: "marker", | ||
text: stream.readStr(length_1) | ||
text: stream.readStr(length) | ||
}; | ||
@@ -164,7 +161,7 @@ case 0x07: | ||
subtype: "cuePoint", | ||
text: stream.readStr(length_1) | ||
text: stream.readStr(length) | ||
}; | ||
case 0x20: | ||
if (length_1 !== 1) | ||
throw new Error("Expected length for midiChannelPrefix event is 1, got " + length_1); | ||
if (length !== 1) | ||
throw new Error("Expected length for midiChannelPrefix event is 1, got " + length); | ||
return { | ||
@@ -177,4 +174,4 @@ deltaTime: deltaTime, | ||
case 0x21: | ||
if (length_1 !== 1) | ||
throw new Error("Expected length for midiChannelPrefix event is 1, got " + length_1); | ||
if (length !== 1) | ||
throw new Error("Expected length for midiChannelPrefix event is 1, got " + length); | ||
return { | ||
@@ -187,4 +184,4 @@ deltaTime: deltaTime, | ||
case 0x2f: | ||
if (length_1 !== 0) | ||
throw new Error("Expected length for endOfTrack event is 0, got " + length_1); | ||
if (length !== 0) | ||
throw new Error("Expected length for endOfTrack event is 0, got " + length); | ||
return { | ||
@@ -196,4 +193,4 @@ deltaTime: deltaTime, | ||
case 0x51: | ||
if (length_1 !== 3) | ||
throw new Error("Expected length for setTempo event is 3, got " + length_1); | ||
if (length !== 3) | ||
throw new Error("Expected length for setTempo event is 3, got " + length); | ||
return { | ||
@@ -208,4 +205,4 @@ deltaTime: deltaTime, | ||
case 0x54: { | ||
if (length_1 !== 5) | ||
throw new Error("Expected length for smpteOffset event is 5, got " + length_1); | ||
if (length !== 5) | ||
throw new Error("Expected length for smpteOffset event is 5, got " + length); | ||
var hourByte = stream.readInt8(); | ||
@@ -231,4 +228,4 @@ var table = { | ||
case 0x58: | ||
if (length_1 !== 4) | ||
throw new Error("Expected length for timeSignature event is 4, got " + length_1); | ||
if (length !== 4) | ||
throw new Error("Expected length for timeSignature event is 4, got " + length); | ||
return { | ||
@@ -244,4 +241,4 @@ deltaTime: deltaTime, | ||
case 0x59: | ||
if (length_1 !== 2) | ||
throw new Error("Expected length for keySignature event is 2, got " + length_1); | ||
if (length !== 2) | ||
throw new Error("Expected length for keySignature event is 2, got " + length); | ||
return { | ||
@@ -259,3 +256,3 @@ deltaTime: deltaTime, | ||
subtype: "sequencerSpecific", | ||
data: stream.read(length_1) | ||
data: stream.read(length) | ||
}; | ||
@@ -267,3 +264,3 @@ default: | ||
subtype: "unknown", | ||
data: stream.read(length_1) | ||
data: stream.read(length) | ||
}; | ||
@@ -273,15 +270,15 @@ } | ||
else if (eventTypeByte === 0xf0) { | ||
var length_2 = stream.readVarInt(); | ||
var length = stream.readVarInt(); | ||
return { | ||
deltaTime: deltaTime, | ||
type: "sysEx", | ||
data: stream.read(length_2) | ||
data: stream.read(length) | ||
}; | ||
} | ||
else if (eventTypeByte === 0xf7) { | ||
var length_3 = stream.readVarInt(); | ||
var length = stream.readVarInt(); | ||
return { | ||
deltaTime: deltaTime, | ||
type: "dividedSysEx", | ||
data: stream.read(length_3) | ||
data: stream.read(length) | ||
}; | ||
@@ -433,4 +430,4 @@ } | ||
while (!trackStream.eof()) { | ||
var event_1 = readEvent(trackStream); | ||
tracks[i].push(event_1); | ||
var event = readEvent(trackStream); | ||
tracks[i].push(event); | ||
} | ||
@@ -452,3 +449,3 @@ } | ||
var Buffer$1 = /** @class */ (function () { | ||
var Buffer = /** @class */ (function () { | ||
function Buffer() { | ||
@@ -462,3 +459,3 @@ this.data = []; | ||
}, | ||
enumerable: true, | ||
enumerable: false, | ||
configurable: true | ||
@@ -700,3 +697,3 @@ }); | ||
if (ticksPerBeat === void 0) { ticksPerBeat = 480; } | ||
var buf = new Buffer$1(); | ||
var buf = new Buffer(); | ||
// header chunk | ||
@@ -711,4 +708,4 @@ buf.writeChunk("MThd", function (it) { | ||
for (var _i = 0, track_1 = track; _i < track_1.length; _i++) { | ||
var event_1 = track_1[_i]; | ||
it.writeBytes(serialize(event_1)); | ||
var event = track_1[_i]; | ||
it.writeBytes(serialize(event)); | ||
} | ||
@@ -715,0 +712,0 @@ }); |
module.exports = { | ||
preset: "ts-jest" | ||
preset: "ts-jest", | ||
testEnvironment: "node", | ||
} |
{ | ||
"name": "midifile-ts", | ||
"version": "1.1.2", | ||
"version": "1.1.3", | ||
"description": "", | ||
@@ -14,10 +14,10 @@ "main": "dist/index.js", | ||
"devDependencies": { | ||
"@types/jest": "24.0.21", | ||
"@types/node": "12.12.5", | ||
"@wessberg/rollup-plugin-ts": "1.1.74", | ||
"jest": "^24.9.0", | ||
"rollup": "1.26.5", | ||
"ts-jest": "^24.1.0", | ||
"typescript": "3.7.2" | ||
"@types/jest": "26.0.15", | ||
"@types/node": "14.14.9", | ||
"@wessberg/rollup-plugin-ts": "1.3.8", | ||
"jest": "^26.6.3", | ||
"rollup": "2.33.3", | ||
"ts-jest": "^26.4.4", | ||
"typescript": "4.1.2" | ||
} | ||
} |
@@ -0,0 +0,0 @@ [![npm version](https://badge.fury.io/js/midifile-ts.svg)](https://badge.fury.io/js/midifile-ts) [![Actions Status](https://github.com/ryohey/midifile-ts/workflows/CI/badge.svg?branch=master)](https://github.com/ryohey/midifile-ts/actions) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) |
@@ -0,0 +0,0 @@ import ts from "@wessberg/rollup-plugin-ts" |
@@ -0,0 +0,0 @@ import { toCharCodes } from "./toCharCodes" |
@@ -0,0 +0,0 @@ export const MIDIChannelEvents: { [key: string]: number } = { |
@@ -0,0 +0,0 @@ export const MIDIControlEventNames = [ |
@@ -0,0 +0,0 @@ export const MIDIControlEvents: { [key: string]: number } = { |
@@ -0,0 +0,0 @@ export const MIDIMetaEventNames: { [key: number]: string } = { |
@@ -0,0 +0,0 @@ export const MIDIMetaEvents: { [key: string]: number } = { |
@@ -0,0 +0,0 @@ import { |
@@ -0,0 +0,0 @@ export interface Event<T extends string> { |
@@ -0,0 +0,0 @@ export { read, MidiFile, MidiHeader } from "./read" |
@@ -0,0 +0,0 @@ import assert from "assert" |
@@ -0,0 +0,0 @@ import { AnyEvent } from "./event" |
@@ -0,0 +0,0 @@ import assert from "assert" |
@@ -0,0 +0,0 @@ import { toVLQ } from "./vlq" |
@@ -0,0 +0,0 @@ import assert from "assert" |
@@ -5,3 +5,2 @@ export type StreamSource = | ||
| ArrayBuffer | ||
| Buffer | ||
| Uint8Array | ||
@@ -19,4 +18,2 @@ | ||
this.buf = new DataView(buf) | ||
} else if (buf instanceof Buffer) { | ||
this.buf = new DataView(buf.buffer) | ||
} else if (buf instanceof Array) { | ||
@@ -23,0 +20,0 @@ this.buf = new DataView(new Uint8Array(buf).buffer) |
@@ -0,0 +0,0 @@ export function toCharCodes(str: string): number[] { |
@@ -0,0 +0,0 @@ import assert from "assert" |
@@ -0,0 +0,0 @@ // variable-length quantity |
@@ -0,0 +0,0 @@ import assert from "assert" |
@@ -0,0 +0,0 @@ import { AnyEvent } from "./event" |
@@ -0,0 +0,0 @@ { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
128504
2277