cleaner error when midi is unsupported
This commit is contained in:
parent
66c444efac
commit
823ab73585
1 changed files with 30 additions and 23 deletions
|
|
@ -5,36 +5,43 @@ This program is free software: you can redistribute it and/or modify it under th
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { enableWebMidi, WebMidi } from '@strudel.cycles/midi'
|
import { enableWebMidi, WebMidi } from '@strudel.cycles/midi';
|
||||||
|
|
||||||
export function useWebMidi(props) {
|
export function useWebMidi(props) {
|
||||||
const { ready, connected, disconnected } = props;
|
const { ready, connected, disconnected } = props;
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const [outputs, setOutputs] = useState(WebMidi?.outputs || []);
|
const [outputs, setOutputs] = useState(WebMidi?.outputs || []);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
enableWebMidi()
|
if (typeof navigator.requestMIDIAccess === 'function') {
|
||||||
.then(() => {
|
enableWebMidi()
|
||||||
// Reacting when a new device becomes available
|
.then(() => {
|
||||||
WebMidi.addListener('connected', (e) => {
|
// Reacting when a new device becomes available
|
||||||
setOutputs([...WebMidi.outputs]);
|
WebMidi.addListener('connected', (e) => {
|
||||||
connected?.(WebMidi, e);
|
setOutputs([...WebMidi.outputs]);
|
||||||
|
connected?.(WebMidi, e);
|
||||||
|
});
|
||||||
|
// Reacting when a device becomes unavailable
|
||||||
|
WebMidi.addListener('disconnected', (e) => {
|
||||||
|
setOutputs([...WebMidi.outputs]);
|
||||||
|
disconnected?.(WebMidi, e);
|
||||||
|
});
|
||||||
|
ready?.(WebMidi);
|
||||||
|
setLoading(false);
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
//throw new Error("Web Midi could not be enabled...");
|
||||||
|
console.warn('Web Midi could not be enabled..');
|
||||||
|
return;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
// Reacting when a device becomes unavailable
|
} else {
|
||||||
WebMidi.addListener('disconnected', (e) => {
|
console.warn(
|
||||||
setOutputs([...WebMidi.outputs]);
|
`Your Browser does not support WebMIDI.
|
||||||
disconnected?.(WebMidi, e);
|
See https://caniuse.com/?search=web%20midi%20api`,
|
||||||
});
|
);
|
||||||
ready?.(WebMidi);
|
}
|
||||||
setLoading(false);
|
|
||||||
})
|
|
||||||
.catch((err) => {
|
|
||||||
if (err) {
|
|
||||||
console.error(err);
|
|
||||||
//throw new Error("Web Midi could not be enabled...");
|
|
||||||
console.warn('Web Midi could not be enabled..');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}, [ready, connected, disconnected, outputs]);
|
}, [ready, connected, disconnected, outputs]);
|
||||||
const outputByName = (name) => WebMidi.getOutputByName(name);
|
const outputByName = (name) => WebMidi.getOutputByName(name);
|
||||||
return { loading, outputs, outputByName };
|
return { loading, outputs, outputByName };
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue