@IkawaDaiki

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ElectronとWeb MIDI APIを組み合わせる

ElectronでWeb MIDI APIを使いたい

お世話になります。

Web MIDI APIを用いてMIDIを扱いと考えております。
デスクトップアプリケーションとして開発したかったのでElectronをフレームワークにしているのですが、ブラウザーじゃないのでnavigatorが無いというエラーが出ました。

App threw an error during load
ReferenceError: navigator is not defined
    at Object.<anonymous> (C:\Users\user\project\main.js:16:1)
    at Module._compile (node:internal/modules/cjs/loader:1271:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1326:10)
    at Module.load (node:internal/modules/cjs/loader:1126:32)
    at Module._load (node:internal/modules/cjs/loader:967:12)
    at l._load (node:electron/js2c/asar_bundle:2:13642)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/translators:169:29)
    at ModuleJob.run (node:internal/modules/esm/module_job:194:25)

https://www.electronjs.org/ja/docs/latest/api/session
調べていたら、このページを見つけました。

const { session } = require('electron')
session.fromPartition('some-partition').setPermissionRequestHandler((webContents, permission, callback) => {
  if (webContents.getURL() === 'some-host' && permission === 'notifications') {
    return callback(false) // 拒否。
  }

  callback(true)
})

これで使えるようになるとのことですが、具体的にどうすればいいか分かりません。
どうすればいいかお教えいただけませんでしょうか。
当方プログラミングはほぼ素人同等なのですが、諸事情により作らざるを得ない状況です。

よろしくお願いいたします。

0 likes

2Answer

Web MIDI APIは Chromeエンジンで動くものでは無いでしょうか?

「デスクトップアプリケーションとして開発したい」ということですが、ローカルにChromeを使えば実現できると思うのですが、そうしない理由はなんでしょうか?

詳しく知っている訳ではありませんので、間違っていたらごめんなさい。

0Like

Comments

  1. @IkawaDaiki

    Questioner

    今回開発するアプリケーションは、後々VST Plugin(DAWのプラグイン規格)に適合させることを視野に入れているものになります。
    そのためにはデスクトップアプリケーションにする必要があると考えています。
    最初はC#で開発を進めていましたが、別の機能の実装が暗礁に乗り上げたため、Electronを使用せざるを得ない状況です。
    おそらく上記URLの情報通りであれば使えると踏んでいるのですが、如何せん急に計画変更をしたために当方javascriptに対しては知識が足りず、どうすればいいか分からない状況です。
    よろしくお願いいたします。

ElectronにはNode.js環境で動作するメインプロセスとブラウザ環境で動作するレンダラープロセスがありブラウザの機能はレンダラープロセスからしか呼べません。
詳しくはドキュメントを確認してください。

0Like

Your answer might help someone💌