なんか、空いてるようなので小ネタで乱入します!
誰だお前?
趣味で音の鳴るアプリとか作って遊んでる人です。
最近作ってるアプリ。生成AIで作った画像からサウンドコラージュを無限に生成します
Web MIDI API が Web Worker で動作するように!
最近、Web MIDI API の仕様(Working Draft)がなんと9年ぶり!に更新されました。
すっごい気になる!内容が含まれていますので紹介します。
-
MIDIAccess
へ Transferable 属性追加!
引用元:https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Transferable_objects
-
MIDIAccess
やMIDIInputMap
MIDIOutputMap
などのオブジェクトの動作コンテキストにWorker
追加
これ、どういう意味かというと、今までWindowコンテキスト(メインスレッド)でしか動作しなかった Web MIDI APIが Workerで動作するようになる、ということですね!
WorkerNavigator
にrequestMIDIAccess()
を生やす、という修正ではないので、あくまで Windowコンテキストでユーザーパーミッションを解決してから postMessage
で Web Worker に MIDIAccess
を転送し、そこで使ってもらう。という使い方になるようです。
実装が超楽しみですね!
まだブラウザには実装されてないので動きません。
仕様追加されてるけどChromeにまだ実装されてないよ!
という issue があげられています。
気になる方はチェックするようにしましょう!
最終コメントが
mj...@chromium.orgmj...@chromium.org #4Nov 22, 2024 03:43AM
Sorry for the delay, yes we haven't implemented this yet and we should. I will set to Available.
とのことで、めちゃくちゃ期待できますね!
おまけ。確認用コード!
実装されたら即確かめられるように、MIDIAccess
を Web Workerに転送するだけのコードを作りました!
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1">
<title>MIDIAccess worker transfer test</title>
<style>
</style>
</head>
<body>
<script type="module">
const access = await navigator.requestMIDIAccess();
if(access == null){
console.log("MIDI not supported.");
}else{
console.log("MIDI supported.");
const wk = new Worker("./worker.mjs",{type:"module"});
wk.postMessage(access,[access]);
console.log("MIDIAccess transfered.");
}
</script>
</body>
</html>
self.onmessage = (msg) ={
let midiAccess = msg.data;
console.log("midiAccess received");
};
現在は、まだ MIDIAccess
を転送できないぞ!というエラーが出てWorkerに MIDIAccess
を届けることができません。
まとめ
- まだ実装されてないけど Web MIDI API が web worker で動くようになりそうです。
- 宣伝:KTECのアドカレ も見てね!