effect-web-midi 0.1.12 → 0.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- export { isControlChange, isPitchBendChange, withParsedDataField, withTouchpadPositionUpdates, } from "./internal/Parsing.js";
1
+ export { isChannelPressure, isChannelPressurePayload, isControlChange, isControlChangePayload, isNotePress, isNotePressPayload, isNoteRelease, isNoteReleasePayload, isPitchBendChange, isPitchBendChangePayload, isTouchpadPositionUpdate, isTouchpadPositionUpdatePayload, isTouchpadRelease, isTouchpadReleasePayload, isUnknownReply, isUnknownReplyPayload, withParsedDataField, withTouchpadPositionUpdates, } from "./internal/Parsing.js";
2
2
  //# sourceMappingURL=Parsing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Parsing.js","sourceRoot":"","sources":["../../src/Parsing.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EACf,iBAAiB,EAQjB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAA"}
1
+ {"version":3,"file":"Parsing.js","sourceRoot":"","sources":["../../src/Parsing.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,+BAA+B,EAC/B,iBAAiB,EACjB,wBAAwB,EACxB,cAAc,EACd,qBAAqB,EAUrB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAA"}
@@ -13,7 +13,7 @@ import * as Stream from 'effect/Stream';
13
13
  export const withParsedDataField = (self) => Stream.map(self, ({ midiMessage, ...obj }) => ({
14
14
  ...obj,
15
15
  _tag: 'ParsedMIDIMessage',
16
- midiMessage: dataEntryParser(midiMessage),
16
+ midiMessage: parseMidiMessagePayload(midiMessage),
17
17
  }));
18
18
  /**
19
19
  *
@@ -22,9 +22,9 @@ export const withParsedDataField = (self) => Stream.map(self, ({ midiMessage, ..
22
22
  */
23
23
  export const withTouchpadPositionUpdates = (self) => Stream.mapAccum(self, { x: null, y: null }, (ctx, current) => {
24
24
  const { midiMessage, ...rest } = current;
25
- const state = isControlChange(midiMessage)
25
+ const state = isControlChangePayload(midiMessage)
26
26
  ? { ...ctx, y: midiMessage.value }
27
- : isPitchBendChange(midiMessage)
27
+ : isPitchBendChangePayload(midiMessage)
28
28
  ? { ...ctx, x: midiMessage.value }
29
29
  : midiMessage._tag === 'Touchpad Release'
30
30
  ? { x: null, y: null }
@@ -43,7 +43,7 @@ export const withTouchpadPositionUpdates = (self) => Stream.mapAccum(self, { x:
43
43
  : Stream.succeed(current),
44
44
  ];
45
45
  }).pipe(Stream.flatten());
46
- function dataEntryParser(midiMessage) {
46
+ function parseMidiMessagePayload(rawPayload) {
47
47
  const unknown = () => {
48
48
  let stack = '';
49
49
  if ('stackTraceLimit' in Error &&
@@ -58,20 +58,20 @@ function dataEntryParser(midiMessage) {
58
58
  }
59
59
  const result = {
60
60
  _tag: 'Unknown Reply',
61
- unexpectedData: midiMessage.toString(),
61
+ unexpectedData: rawPayload.toString(),
62
62
  stack,
63
63
  };
64
64
  return result;
65
65
  };
66
- const status = midiMessage.at(0);
66
+ const status = rawPayload.at(0);
67
67
  if (status === undefined)
68
68
  return unknown();
69
- const second = midiMessage.at(1);
69
+ const second = rawPayload.at(1);
70
70
  if (second === undefined)
71
71
  return unknown();
72
72
  const code = status >> 4;
73
73
  const channel = status & 0b1111;
74
- if (midiMessage.length === 2) {
74
+ if (rawPayload.length === 2) {
75
75
  if (code === 0xd) {
76
76
  return {
77
77
  _tag: 'Channel Pressure',
@@ -80,9 +80,9 @@ function dataEntryParser(midiMessage) {
80
80
  };
81
81
  }
82
82
  }
83
- if (midiMessage.length !== 3)
83
+ if (rawPayload.length !== 3)
84
84
  return unknown();
85
- const third = midiMessage.at(2);
85
+ const third = rawPayload.at(2);
86
86
  if (third === undefined)
87
87
  return unknown();
88
88
  if (code === 0x8) {
@@ -125,12 +125,20 @@ function dataEntryParser(midiMessage) {
125
125
  }
126
126
  return unknown();
127
127
  }
128
- export const isUnknownReply = (e) => e._tag === 'Unknown Reply';
129
- export const isNotePress = (e) => e._tag === 'Note Press';
130
- export const isChannelPressure = (e) => e._tag === 'Channel Pressure';
131
- export const isNoteRelease = (e) => e._tag === 'Note Release';
132
- export const isControlChange = (e) => e._tag === 'Control Change';
133
- export const isTouchpadRelease = (e) => e._tag === 'Touchpad Release';
134
- export const isPitchBendChange = (e) => e._tag === 'Pitch Bend Change';
135
- export const isTouchpadPositionUpdate = (e) => e._tag === 'Touchpad Position Update';
128
+ export const isUnknownReplyPayload = (e) => e._tag === 'Unknown Reply';
129
+ export const isUnknownReply = (e) => isUnknownReplyPayload(e.midiMessage);
130
+ export const isNotePressPayload = (e) => e._tag === 'Note Press';
131
+ export const isNotePress = (e) => isNotePressPayload(e.midiMessage);
132
+ export const isChannelPressurePayload = (e) => e._tag === 'Channel Pressure';
133
+ export const isChannelPressure = (e) => isChannelPressurePayload(e.midiMessage);
134
+ export const isNoteReleasePayload = (e) => e._tag === 'Note Release';
135
+ export const isNoteRelease = (e) => isNoteReleasePayload(e.midiMessage);
136
+ export const isControlChangePayload = (e) => e._tag === 'Control Change';
137
+ export const isControlChange = (e) => isControlChangePayload(e.midiMessage);
138
+ export const isTouchpadReleasePayload = (e) => e._tag === 'Touchpad Release';
139
+ export const isTouchpadRelease = (e) => isTouchpadReleasePayload(e.midiMessage);
140
+ export const isPitchBendChangePayload = (e) => e._tag === 'Pitch Bend Change';
141
+ export const isPitchBendChange = (e) => isPitchBendChangePayload(e.midiMessage);
142
+ export const isTouchpadPositionUpdatePayload = (e) => e._tag === 'Touchpad Position Update';
143
+ export const isTouchpadPositionUpdate = (e) => isTouchpadPositionUpdatePayload(e.midiMessage);
136
144
  //# sourceMappingURL=Parsing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Parsing.js","sourceRoot":"","sources":["../../../src/internal/Parsing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Parsing.js","sourceRoot":"","sources":["../../../src/internal/Parsing.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { type ControlChange, isControlChange, isPitchBendChange, type NotePress, type NoteRelease, type ParsedMIDIMessages, type PitchBendChange, type TouchpadPositionUpdate, type TouchpadRelease, type UnknownReply, withParsedDataField, withTouchpadPositionUpdates, } from './internal/Parsing.ts';
1
+ export { type ChannelPressurePayload, type ControlChangePayload, type DefaultParsedMIDIMessagePayload, isChannelPressure, isChannelPressurePayload, isControlChange, isControlChangePayload, isNotePress, isNotePressPayload, isNoteRelease, isNoteReleasePayload, isPitchBendChange, isPitchBendChangePayload, isTouchpadPositionUpdate, isTouchpadPositionUpdatePayload, isTouchpadRelease, isTouchpadReleasePayload, isUnknownReply, isUnknownReplyPayload, type MIDIMessage, type NotePressPayload, type NoteReleasePayload, type ParsedMIDIMessage, type PitchBendChangePayload, type TaggedObject, type TouchpadPositionUpdatePayload, type TouchpadReleasePayload, type UnknownReplyPayload, withParsedDataField, withTouchpadPositionUpdates, } from './internal/Parsing.ts';
2
2
  //# sourceMappingURL=Parsing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Parsing.d.ts","sourceRoot":"","sources":["../../src/Parsing.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAClB,eAAe,EACf,iBAAiB,EACjB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAA"}
1
+ {"version":3,"file":"Parsing.d.ts","sourceRoot":"","sources":["../../src/Parsing.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,+BAA+B,EACpC,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,+BAA+B,EAC/B,iBAAiB,EACjB,wBAAwB,EACxB,cAAc,EACd,qBAAqB,EACrB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,6BAA6B,EAClC,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAA"}
@@ -3,101 +3,106 @@
3
3
  * MIDI API with the only MIDI device I have: nanoPAD v1
4
4
  */
5
5
  import * as Stream from 'effect/Stream';
6
+ import type * as EMIDIInput from './EMIDIInput.ts';
6
7
  /**
7
8
  *
8
9
  * @param self
9
10
  * @returns
10
11
  */
11
- export declare const withParsedDataField: <A extends {
12
- readonly midiMessage: Uint8Array<ArrayBuffer>;
13
- }, E, R>(self: Stream.Stream<A, E, R>) => Stream.Stream<Omit<A, "midiMessage" | "_tag"> & {
14
- readonly _tag: "ParsedMIDIMessage";
15
- readonly midiMessage: ParsedMIDIMessages;
16
- }, E, R>;
12
+ export declare const withParsedDataField: <A extends MIDIMessage, E, R>(self: Stream.Stream<A, E, R>) => Stream.Stream<ParsedMIDIMessage, E, R>;
17
13
  /**
18
14
  *
19
15
  * @param self
20
16
  * @returns
21
17
  */
22
18
  export declare const withTouchpadPositionUpdates: <A extends {
23
- midiMessage: ControlChange | TouchpadRelease | PitchBendChange | {
19
+ midiMessage: ControlChangePayload | TouchpadReleasePayload | PitchBendChangePayload | {
24
20
  _tag: string & {};
25
21
  };
26
22
  }, E, R>(self: Stream.Stream<A, E, R>) => Stream.Stream<A | (Omit<A, "midiMessage"> & {
27
- readonly midiMessage: TouchpadPositionUpdate;
23
+ readonly midiMessage: TouchpadPositionUpdatePayload;
28
24
  }), E, R>;
29
- export type ParsedMIDIMessages = NoteRelease | NotePress | UnknownReply | ControlChange | ChannelPressure | TouchpadRelease | PitchBendChange;
30
- export interface UnknownReply extends Readonly<{
25
+ export type DefaultParsedMIDIMessagePayload = NoteReleasePayload | NotePressPayload | UnknownReplyPayload | ControlChangePayload | ChannelPressurePayload | TouchpadReleasePayload | PitchBendChangePayload;
26
+ export interface MIDIMessage {
27
+ readonly _tag: 'MIDIMessage';
28
+ readonly cameFrom: EMIDIInput.EMIDIInput;
29
+ readonly capturedAt: Date;
30
+ readonly midiMessage: Uint8Array<ArrayBuffer>;
31
+ }
32
+ export interface ParsedMIDIMessage<Payload extends TaggedObject = DefaultParsedMIDIMessagePayload> {
33
+ readonly _tag: 'ParsedMIDIMessage';
34
+ readonly cameFrom: EMIDIInput.EMIDIInput;
35
+ readonly capturedAt: Date;
36
+ readonly midiMessage: Payload;
37
+ }
38
+ export type TaggedObject = {
39
+ readonly _tag: string;
40
+ };
41
+ export interface UnknownReplyPayload extends Readonly<{
31
42
  _tag: 'Unknown Reply';
32
43
  unexpectedData: string;
33
44
  stack: string;
34
45
  }> {
35
46
  }
36
- export declare const isUnknownReply: (e: {
37
- _tag: string;
38
- }) => e is UnknownReply;
39
- export interface NotePress extends Readonly<{
47
+ export declare const isUnknownReplyPayload: (e: TaggedObject) => e is UnknownReplyPayload;
48
+ export declare const isUnknownReply: (e: ParsedMIDIMessage<TaggedObject>) => e is ParsedMIDIMessage<UnknownReplyPayload>;
49
+ export interface NotePressPayload extends Readonly<{
40
50
  _tag: 'Note Press';
41
51
  channel: number;
42
52
  note: number;
43
53
  velocity: number;
44
54
  }> {
45
55
  }
46
- export declare const isNotePress: (e: {
47
- _tag: string;
48
- }) => e is NotePress;
49
- export interface ChannelPressure extends Readonly<{
56
+ export declare const isNotePressPayload: (e: TaggedObject) => e is NotePressPayload;
57
+ export declare const isNotePress: (e: ParsedMIDIMessage<TaggedObject>) => e is ParsedMIDIMessage<NotePressPayload>;
58
+ export interface ChannelPressurePayload extends Readonly<{
50
59
  _tag: 'Channel Pressure';
51
60
  channel: number;
52
61
  velocity: number;
53
62
  }> {
54
63
  }
55
- export declare const isChannelPressure: (e: {
56
- _tag: string;
57
- }) => e is ChannelPressure;
58
- export interface NoteRelease extends Readonly<{
64
+ export declare const isChannelPressurePayload: (e: TaggedObject) => e is ChannelPressurePayload;
65
+ export declare const isChannelPressure: (e: ParsedMIDIMessage<TaggedObject>) => e is ParsedMIDIMessage<ChannelPressurePayload>;
66
+ export interface NoteReleasePayload extends Readonly<{
59
67
  _tag: 'Note Release';
60
68
  channel: number;
61
69
  note: number;
62
70
  }> {
63
71
  }
64
- export declare const isNoteRelease: (e: {
65
- _tag: string;
66
- }) => e is NoteRelease;
67
- export interface ControlChange extends Readonly<{
72
+ export declare const isNoteReleasePayload: (e: TaggedObject) => e is NoteReleasePayload;
73
+ export declare const isNoteRelease: (e: ParsedMIDIMessage<TaggedObject>) => e is ParsedMIDIMessage<NoteReleasePayload>;
74
+ export interface ControlChangePayload extends Readonly<{
68
75
  _tag: 'Control Change';
69
76
  channel: number;
70
77
  control: number;
71
78
  value: number;
72
79
  }> {
73
80
  }
74
- export declare const isControlChange: (e: {
75
- _tag: string;
76
- }) => e is ControlChange;
77
- export interface TouchpadRelease extends Readonly<{
81
+ export declare const isControlChangePayload: (e: TaggedObject) => e is ControlChangePayload;
82
+ export declare const isControlChange: (e: ParsedMIDIMessage<TaggedObject>) => e is ParsedMIDIMessage<ControlChangePayload>;
83
+ export interface TouchpadReleasePayload extends Readonly<{
78
84
  _tag: 'Touchpad Release';
79
85
  channel: number;
80
86
  }> {
81
87
  }
82
- export declare const isTouchpadRelease: (e: {
83
- _tag: string;
84
- }) => e is TouchpadRelease;
85
- export interface PitchBendChange extends Readonly<{
88
+ export declare const isTouchpadReleasePayload: (e: TaggedObject) => e is TouchpadReleasePayload;
89
+ export declare const isTouchpadRelease: (e: ParsedMIDIMessage<TaggedObject>) => e is ParsedMIDIMessage<TouchpadReleasePayload>;
90
+ export interface PitchBendChangePayload extends Readonly<{
86
91
  _tag: 'Pitch Bend Change';
87
92
  channel: number;
88
93
  value: number;
89
94
  }> {
90
95
  }
91
- export declare const isPitchBendChange: (e: {
92
- _tag: string;
93
- }) => e is PitchBendChange;
94
- export interface TouchpadPositionUpdate extends Readonly<{
96
+ export declare const isPitchBendChangePayload: (e: TaggedObject) => e is PitchBendChangePayload;
97
+ export declare const isPitchBendChange: (e: ParsedMIDIMessage<TaggedObject>) => e is ParsedMIDIMessage<PitchBendChangePayload>;
98
+ export interface TouchpadPositionUpdatePayload extends Readonly<{
95
99
  _tag: 'Touchpad Position Update';
96
100
  x: number;
97
101
  y: number;
98
102
  }> {
99
103
  }
100
- export declare const isTouchpadPositionUpdate: (e: {
104
+ export declare const isTouchpadPositionUpdatePayload: (e: {
101
105
  _tag: string;
102
- }) => e is TouchpadPositionUpdate;
106
+ }) => e is TouchpadPositionUpdatePayload;
107
+ export declare const isTouchpadPositionUpdate: (e: ParsedMIDIMessage<TaggedObject>) => e is ParsedMIDIMessage<TouchpadPositionUpdatePayload>;
103
108
  //# sourceMappingURL=Parsing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Parsing.d.ts","sourceRoot":"","sources":["../../../src/internal/Parsing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAKvC;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,CAAC,SAAS;IAAE,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,CAAA;CAAE,EAC3D,CAAC,EACD,CAAC,EAED,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAMrB,MAAM,CAAC,MAAM,CAClB,IAAI,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC,GAAG;IAChC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAA;CACzC,EACD,CAAC,EACD,CAAC,CACF,CAAA;AAEH;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,GACtC,CAAC,SAAS;IACR,WAAW,EACP,aAAa,GACb,eAAe,GACf,eAAe,GACf;QAAE,IAAI,EAAE,MAAM,GAAG,EAAE,CAAA;KAAE,CAAA;CAC1B,EACD,CAAC,EACD,CAAC,EAED,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CACZ,CAAC,GACD,CAAC,IAAI,CAAC,CAAC,EAAE,aAAa,CAAC,GAAG;IAAE,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAA;CAAE,CAAC,EAC7E,CAAC,EACD,CAAC,CA6BuB,CAAA;AAE1B,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,SAAS,GACT,YAAY,GACZ,aAAa,GACb,eAAe,GACf,eAAe,GACf,eAAe,CAAA;AAiGnB,MAAM,WAAW,YACf,SAAQ,QAAQ,CAAC;IACf,IAAI,EAAE,eAAe,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;CACd,CAAC;CAAG;AAEP,eAAO,MAAM,cAAc,GAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KAAG,CAAC,IAAI,YAC9B,CAAA;AAE5B,MAAM,WAAW,SACf,SAAQ,QAAQ,CAAC;IACf,IAAI,EAAE,YAAY,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAC;CAAG;AAEP,eAAO,MAAM,WAAW,GAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KAAG,CAAC,IAAI,SAC9B,CAAA;AAEzB,MAAM,WAAW,eACf,SAAQ,QAAQ,CAAC;IACf,IAAI,EAAE,kBAAkB,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAC;CAAG;AAEP,eAAO,MAAM,iBAAiB,GAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KAAG,CAAC,IAAI,eAC9B,CAAA;AAE/B,MAAM,WAAW,WACf,SAAQ,QAAQ,CAAC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;CAAG;AAE9E,eAAO,MAAM,aAAa,GAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KAAG,CAAC,IAAI,WAC9B,CAAA;AAE3B,MAAM,WAAW,aACf,SAAQ,QAAQ,CAAC;IACf,IAAI,EAAE,gBAAgB,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd,CAAC;CAAG;AAEP,eAAO,MAAM,eAAe,GAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KAAG,CAAC,IAAI,aAC9B,CAAA;AAE7B,MAAM,WAAW,eACf,SAAQ,QAAQ,CAAC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;CAAG;AAEpE,eAAO,MAAM,iBAAiB,GAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KAAG,CAAC,IAAI,eAC9B,CAAA;AAE/B,MAAM,WAAW,eACf,SAAQ,QAAQ,CAAC;IACf,IAAI,EAAE,mBAAmB,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd,CAAC;CAAG;AAEP,eAAO,MAAM,iBAAiB,GAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KAAG,CAAC,IAAI,eAC7B,CAAA;AAEhC,MAAM,WAAW,sBACf,SAAQ,QAAQ,CAAC;IACf,IAAI,EAAE,0BAA0B,CAAA;IAChC,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV,CAAC;CAAG;AAEP,eAAO,MAAM,wBAAwB,GAAI,GAAG;IAC1C,IAAI,EAAE,MAAM,CAAA;CACb,KAAG,CAAC,IAAI,sBAA+D,CAAA"}
1
+ {"version":3,"file":"Parsing.d.ts","sourceRoot":"","sources":["../../../src/internal/Parsing.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "effect-web-midi",
3
- "version": "0.1.12",
3
+ "version": "0.1.14",
4
4
  "type": "module",
5
5
  "description": "Effect WEB MIDI",
6
6
  "license": "MIT",
package/src/Parsing.ts CHANGED
@@ -1,14 +1,32 @@
1
1
  export {
2
- type ControlChange,
2
+ type ChannelPressurePayload,
3
+ type ControlChangePayload,
4
+ type DefaultParsedMIDIMessagePayload,
5
+ isChannelPressure,
6
+ isChannelPressurePayload,
3
7
  isControlChange,
8
+ isControlChangePayload,
9
+ isNotePress,
10
+ isNotePressPayload,
11
+ isNoteRelease,
12
+ isNoteReleasePayload,
4
13
  isPitchBendChange,
5
- type NotePress,
6
- type NoteRelease,
7
- type ParsedMIDIMessages,
8
- type PitchBendChange,
9
- type TouchpadPositionUpdate,
10
- type TouchpadRelease,
11
- type UnknownReply,
14
+ isPitchBendChangePayload,
15
+ isTouchpadPositionUpdate,
16
+ isTouchpadPositionUpdatePayload,
17
+ isTouchpadRelease,
18
+ isTouchpadReleasePayload,
19
+ isUnknownReply,
20
+ isUnknownReplyPayload,
21
+ type MIDIMessage,
22
+ type NotePressPayload,
23
+ type NoteReleasePayload,
24
+ type ParsedMIDIMessage,
25
+ type PitchBendChangePayload,
26
+ type TaggedObject,
27
+ type TouchpadPositionUpdatePayload,
28
+ type TouchpadReleasePayload,
29
+ type UnknownReplyPayload,
12
30
  withParsedDataField,
13
31
  withTouchpadPositionUpdates,
14
32
  } from './internal/Parsing.ts'
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import * as Stream from 'effect/Stream'
7
+ import type * as EMIDIInput from './EMIDIInput.ts'
7
8
 
8
9
  //? NOTE: Look at the issue https://github.com/WebAudio/web-midi-api/issues/179
9
10
  // which discusses higher-level MIDI message access
@@ -13,25 +14,14 @@ import * as Stream from 'effect/Stream'
13
14
  * @param self
14
15
  * @returns
15
16
  */
16
- export const withParsedDataField = <
17
- A extends { readonly midiMessage: Uint8Array<ArrayBuffer> },
18
- E,
19
- R,
20
- >(
17
+ export const withParsedDataField = <A extends MIDIMessage, E, R>(
21
18
  self: Stream.Stream<A, E, R>,
22
- ) =>
19
+ ): Stream.Stream<ParsedMIDIMessage, E, R> =>
23
20
  Stream.map(self, ({ midiMessage, ...obj }) => ({
24
21
  ...obj,
25
- _tag: 'ParsedMIDIMessage' as const,
26
- midiMessage: dataEntryParser(midiMessage),
27
- })) as Stream.Stream<
28
- Omit<A, 'midiMessage' | '_tag'> & {
29
- readonly _tag: 'ParsedMIDIMessage'
30
- readonly midiMessage: ParsedMIDIMessages
31
- },
32
- E,
33
- R
34
- >
22
+ _tag: 'ParsedMIDIMessage',
23
+ midiMessage: parseMidiMessagePayload(midiMessage),
24
+ }))
35
25
 
36
26
  /**
37
27
  *
@@ -41,9 +31,9 @@ export const withParsedDataField = <
41
31
  export const withTouchpadPositionUpdates = <
42
32
  A extends {
43
33
  midiMessage:
44
- | ControlChange
45
- | TouchpadRelease
46
- | PitchBendChange
34
+ | ControlChangePayload
35
+ | TouchpadReleasePayload
36
+ | PitchBendChangePayload
47
37
  | { _tag: string & {} }
48
38
  },
49
39
  E,
@@ -52,7 +42,9 @@ export const withTouchpadPositionUpdates = <
52
42
  self: Stream.Stream<A, E, R>,
53
43
  ): Stream.Stream<
54
44
  | A
55
- | (Omit<A, 'midiMessage'> & { readonly midiMessage: TouchpadPositionUpdate }),
45
+ | (Omit<A, 'midiMessage'> & {
46
+ readonly midiMessage: TouchpadPositionUpdatePayload
47
+ }),
56
48
  E,
57
49
  R
58
50
  > =>
@@ -61,9 +53,9 @@ export const withTouchpadPositionUpdates = <
61
53
  { x: null as number | null, y: null as number | null },
62
54
  (ctx, current) => {
63
55
  const { midiMessage, ...rest } = current
64
- const state = isControlChange(midiMessage)
56
+ const state = isControlChangePayload(midiMessage)
65
57
  ? { ...ctx, y: midiMessage.value }
66
- : isPitchBendChange(midiMessage)
58
+ : isPitchBendChangePayload(midiMessage)
67
59
  ? { ...ctx, x: midiMessage.value }
68
60
  : midiMessage._tag === 'Touchpad Release'
69
61
  ? { x: null, y: null }
@@ -78,25 +70,41 @@ export const withTouchpadPositionUpdates = <
78
70
  _tag: 'Touchpad Position Update' as const,
79
71
  x: state.x,
80
72
  y: state.y,
81
- } satisfies TouchpadPositionUpdate,
73
+ } satisfies TouchpadPositionUpdatePayload,
82
74
  })
83
75
  : Stream.succeed(current),
84
76
  ]
85
77
  },
86
78
  ).pipe(Stream.flatten())
87
79
 
88
- export type ParsedMIDIMessages =
89
- | NoteRelease
90
- | NotePress
91
- | UnknownReply
92
- | ControlChange
93
- | ChannelPressure
94
- | TouchpadRelease
95
- | PitchBendChange
96
-
97
- function dataEntryParser(
98
- midiMessage: Uint8Array<ArrayBuffer>,
99
- ): ParsedMIDIMessages {
80
+ export type DefaultParsedMIDIMessagePayload =
81
+ | NoteReleasePayload
82
+ | NotePressPayload
83
+ | UnknownReplyPayload
84
+ | ControlChangePayload
85
+ | ChannelPressurePayload
86
+ | TouchpadReleasePayload
87
+ | PitchBendChangePayload
88
+
89
+ export interface MIDIMessage {
90
+ readonly _tag: 'MIDIMessage'
91
+ readonly cameFrom: EMIDIInput.EMIDIInput
92
+ readonly capturedAt: Date
93
+ readonly midiMessage: Uint8Array<ArrayBuffer>
94
+ }
95
+
96
+ export interface ParsedMIDIMessage<
97
+ Payload extends TaggedObject = DefaultParsedMIDIMessagePayload,
98
+ > {
99
+ readonly _tag: 'ParsedMIDIMessage'
100
+ readonly cameFrom: EMIDIInput.EMIDIInput
101
+ readonly capturedAt: Date
102
+ readonly midiMessage: Payload
103
+ }
104
+
105
+ function parseMidiMessagePayload(
106
+ rawPayload: Uint8Array<ArrayBuffer>,
107
+ ): DefaultParsedMIDIMessagePayload {
100
108
  const unknown = () => {
101
109
  let stack = ''
102
110
  if (
@@ -113,22 +121,22 @@ function dataEntryParser(
113
121
  }
114
122
  const result = {
115
123
  _tag: 'Unknown Reply' as const,
116
- unexpectedData: midiMessage.toString(),
124
+ unexpectedData: rawPayload.toString(),
117
125
  stack,
118
126
  }
119
127
  return result
120
128
  }
121
129
 
122
- const status = midiMessage.at(0)
130
+ const status = rawPayload.at(0)
123
131
  if (status === undefined) return unknown()
124
132
 
125
- const second = midiMessage.at(1)
133
+ const second = rawPayload.at(1)
126
134
  if (second === undefined) return unknown()
127
135
 
128
136
  const code = status >> 4
129
137
  const channel = status & 0b1111
130
138
 
131
- if (midiMessage.length === 2) {
139
+ if (rawPayload.length === 2) {
132
140
  if (code === 0xd) {
133
141
  return {
134
142
  _tag: 'Channel Pressure',
@@ -138,9 +146,9 @@ function dataEntryParser(
138
146
  }
139
147
  }
140
148
 
141
- if (midiMessage.length !== 3) return unknown()
149
+ if (rawPayload.length !== 3) return unknown()
142
150
 
143
- const third = midiMessage.at(2)
151
+ const third = rawPayload.at(2)
144
152
  if (third === undefined) return unknown()
145
153
 
146
154
  if (code === 0x8) {
@@ -189,17 +197,27 @@ function dataEntryParser(
189
197
  return unknown()
190
198
  }
191
199
 
192
- export interface UnknownReply
200
+ export type TaggedObject = { readonly _tag: string }
201
+
202
+ export interface UnknownReplyPayload
193
203
  extends Readonly<{
194
204
  _tag: 'Unknown Reply'
195
205
  unexpectedData: string
196
206
  stack: string
197
207
  }> {}
198
208
 
199
- export const isUnknownReply = (e: { _tag: string }): e is UnknownReply =>
200
- e._tag === 'Unknown Reply'
209
+ export const isUnknownReplyPayload = (
210
+ e: TaggedObject,
211
+ ): e is UnknownReplyPayload => e._tag === 'Unknown Reply'
201
212
 
202
- export interface NotePress
213
+ export const isUnknownReply = (
214
+ e: ParsedMIDIMessage<TaggedObject>,
215
+ ): e is ParsedMIDIMessage<UnknownReplyPayload> =>
216
+ isUnknownReplyPayload(e.midiMessage)
217
+
218
+ /////////////////////////////////////////////
219
+
220
+ export interface NotePressPayload
203
221
  extends Readonly<{
204
222
  _tag: 'Note Press'
205
223
  channel: number
@@ -207,26 +225,48 @@ export interface NotePress
207
225
  velocity: number
208
226
  }> {}
209
227
 
210
- export const isNotePress = (e: { _tag: string }): e is NotePress =>
228
+ export const isNotePressPayload = (e: TaggedObject): e is NotePressPayload =>
211
229
  e._tag === 'Note Press'
212
230
 
213
- export interface ChannelPressure
231
+ export const isNotePress = (
232
+ e: ParsedMIDIMessage<TaggedObject>,
233
+ ): e is ParsedMIDIMessage<NotePressPayload> => isNotePressPayload(e.midiMessage)
234
+
235
+ /////////////////////////////////////////////
236
+
237
+ export interface ChannelPressurePayload
214
238
  extends Readonly<{
215
239
  _tag: 'Channel Pressure'
216
240
  channel: number
217
241
  velocity: number
218
242
  }> {}
219
243
 
220
- export const isChannelPressure = (e: { _tag: string }): e is ChannelPressure =>
221
- e._tag === 'Channel Pressure'
244
+ export const isChannelPressurePayload = (
245
+ e: TaggedObject,
246
+ ): e is ChannelPressurePayload => e._tag === 'Channel Pressure'
247
+
248
+ export const isChannelPressure = (
249
+ e: ParsedMIDIMessage<TaggedObject>,
250
+ ): e is ParsedMIDIMessage<ChannelPressurePayload> =>
251
+ isChannelPressurePayload(e.midiMessage)
252
+
253
+ /////////////////////////////////////////////
222
254
 
223
- export interface NoteRelease
255
+ export interface NoteReleasePayload
224
256
  extends Readonly<{ _tag: 'Note Release'; channel: number; note: number }> {}
225
257
 
226
- export const isNoteRelease = (e: { _tag: string }): e is NoteRelease =>
227
- e._tag === 'Note Release'
258
+ export const isNoteReleasePayload = (
259
+ e: TaggedObject,
260
+ ): e is NoteReleasePayload => e._tag === 'Note Release'
228
261
 
229
- export interface ControlChange
262
+ export const isNoteRelease = (
263
+ e: ParsedMIDIMessage<TaggedObject>,
264
+ ): e is ParsedMIDIMessage<NoteReleasePayload> =>
265
+ isNoteReleasePayload(e.midiMessage)
266
+
267
+ /////////////////////////////////////////////
268
+
269
+ export interface ControlChangePayload
230
270
  extends Readonly<{
231
271
  _tag: 'Control Change'
232
272
  channel: number
@@ -234,32 +274,61 @@ export interface ControlChange
234
274
  value: number
235
275
  }> {}
236
276
 
237
- export const isControlChange = (e: { _tag: string }): e is ControlChange =>
238
- e._tag === 'Control Change'
277
+ export const isControlChangePayload = (
278
+ e: TaggedObject,
279
+ ): e is ControlChangePayload => e._tag === 'Control Change'
280
+
281
+ export const isControlChange = (
282
+ e: ParsedMIDIMessage<TaggedObject>,
283
+ ): e is ParsedMIDIMessage<ControlChangePayload> =>
284
+ isControlChangePayload(e.midiMessage)
239
285
 
240
- export interface TouchpadRelease
286
+ /////////////////////////////////////////////
287
+
288
+ export interface TouchpadReleasePayload
241
289
  extends Readonly<{ _tag: 'Touchpad Release'; channel: number }> {}
242
290
 
243
- export const isTouchpadRelease = (e: { _tag: string }): e is TouchpadRelease =>
244
- e._tag === 'Touchpad Release'
291
+ export const isTouchpadReleasePayload = (
292
+ e: TaggedObject,
293
+ ): e is TouchpadReleasePayload => e._tag === 'Touchpad Release'
294
+
295
+ export const isTouchpadRelease = (
296
+ e: ParsedMIDIMessage<TaggedObject>,
297
+ ): e is ParsedMIDIMessage<TouchpadReleasePayload> =>
298
+ isTouchpadReleasePayload(e.midiMessage)
299
+
300
+ /////////////////////////////////////////////
245
301
 
246
- export interface PitchBendChange
302
+ export interface PitchBendChangePayload
247
303
  extends Readonly<{
248
304
  _tag: 'Pitch Bend Change'
249
305
  channel: number
250
306
  value: number
251
307
  }> {}
252
308
 
253
- export const isPitchBendChange = (e: { _tag: string }): e is PitchBendChange =>
254
- e._tag === 'Pitch Bend Change'
309
+ export const isPitchBendChangePayload = (
310
+ e: TaggedObject,
311
+ ): e is PitchBendChangePayload => e._tag === 'Pitch Bend Change'
255
312
 
256
- export interface TouchpadPositionUpdate
313
+ export const isPitchBendChange = (
314
+ e: ParsedMIDIMessage<TaggedObject>,
315
+ ): e is ParsedMIDIMessage<PitchBendChangePayload> =>
316
+ isPitchBendChangePayload(e.midiMessage)
317
+
318
+ /////////////////////////////////////////////
319
+
320
+ export interface TouchpadPositionUpdatePayload
257
321
  extends Readonly<{
258
322
  _tag: 'Touchpad Position Update'
259
323
  x: number
260
324
  y: number
261
325
  }> {}
262
326
 
263
- export const isTouchpadPositionUpdate = (e: {
327
+ export const isTouchpadPositionUpdatePayload = (e: {
264
328
  _tag: string
265
- }): e is TouchpadPositionUpdate => e._tag === 'Touchpad Position Update'
329
+ }): e is TouchpadPositionUpdatePayload => e._tag === 'Touchpad Position Update'
330
+
331
+ export const isTouchpadPositionUpdate = (
332
+ e: ParsedMIDIMessage<TaggedObject>,
333
+ ): e is ParsedMIDIMessage<TouchpadPositionUpdatePayload> =>
334
+ isTouchpadPositionUpdatePayload(e.midiMessage)