Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork0
An Observable based library for the use of Web MIDI API with Angular
License
ng-web-apis/midi
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Attention! This repository is archived and the library has been moved totinkoff/ng-web-apis monorepository
Part of
Web APIs for Angular
This library contains abstractions and helpful utils to useWeb MIDI API idiomatically with Angular.
If you do not have@ng-web-apis/common:
npm i @ng-web-apis/commonYou would also need@types/webmidi package until it is included in TypeScript. Now install the package:
npm i @ng-web-apis/midiTo useWeb MIDI API with your Angular application you canuse tokens, RxJs operators and utils included with this package:
MIDI_SUPPORT—booleanvalue checking browser supportSYSEX—booleantoken responsible for system exclusive access,falseby defaultMIDI_ACCESS— aPromisewithMIDIAccess object,depends onSYSEXtoken for access levelMIDI_INPUT— aPromisewithMIDIInput. You would need toprovide it yourself see utility functions belowMIDI_OUTPUT— aPromisewithMIDIOutput. You would need toprovide it yourself see utility functions belowMIDI_MESSAGES— an Observable ofMIDIMessageEventfrom allMIDIInputs,use rxjs function below to narrow and process the stream
You can provide
MIDI_INPUTandMIDI_OUTPUTtokens with following functions:inputById,inputByName,outputById,outputByName:
import{Component,Inject}from'@angular/core';import{inputById,MIDI_INPUT,MIDI_OUTPUT,outputByName}from'@ng-web-apis/midi';@Component({selector:'my-comp',template:'...',providers:[inputById('input-0'),outputByName('VirtualMIDISynth')],})exportclassMyComponent{constructor( @Inject(MIDI_INPUT)input:Promise<MIDIInput>, @Inject(MIDI_OUTPUT)output:Promise<MIDIOutput>,){}}
- You can convert MIDI note to frequency and back using
toFrequencyandtoNotefunctions.They optionally accept second argument for tuning of middle A note using 440 as default value - You can use
frequencypipe fromFrequencyPipeModuleto convert MIDI note to frequencydirectly in template
These are filtering operators which you can use onMIDI_MESSAGES stream to narrow it to your needs.All of them are applied like that:
messages$.pipe(filterByChannel(1),aftertouch(),);
filterByChannelonly lets through messages from given channel(0 to 15)filterByIdonly lets through messages from particularMIDIInputidentifying it byidpropertyfilterByNameonly lets through messages from particularMIDIInputidentifying it bynamepropertynotesonly lets through played notes messages,normalizing noteOff messages to noteOn with 0 velocityaftertouchonly lets through aftertouch messages, same logic goes fow all functions belowmodulationWheelpanpitchBendpolyphonicAftertouchprogramChangesustainPedal
If you believe other operators could be helpful, pleasefile an issue explaining whatwould you like to be added and why.
These are used to convert message to something necessary for you, since it turnsMIDIMessageEventsto different objects, use itafter all monotype operations from the list abovehave been applied.
toData— extractsdataUint8Arrayfrom eachMIDIMessageEventtoTime— extractsreceivedTimetimestamp from eachMIDIMessageEventtoStatusByte— extracts first element fromdataUint8ArraytoDataByte— extracts second element fromdataUint8ArraytoValueByte— extracts third element fromdataUint8Array
Keep in mind some messages might not contain third or even second byte so only use thoseextractions when you are sure (i.e. filtered the stream to compliant messages beforehand).
You cantry online demo here
OtherWeb APIs for Angular by@ng-web-apis
Do you also want to open-source something, but hate the collateral work?Check out thisAngular Open-source Library Starterwe’ve created for our projects. It got you covered on continuous integration,pre-commit checks, linting, versioning + changelog, code coverage and all that jazz.
About
An Observable based library for the use of Web MIDI API with Angular
Topics
Resources
License
Code of conduct
Contributing
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors3
Uh oh!
There was an error while loading.Please reload this page.