インターネットラジオ「らじるれ郎」開発記録 (18)

こんばんは「らじるれ郎」です (^_^)
2
HOSOKAWA Jun @pik

@TodaProduction なるほど。調べきれていないのですが Edge の場合、add_PermissionRequested の CallBack に「こういう Permission 要求が来たよ」と来るので、それに対して「put_state(COREWEBVIEW2_PERMISSION_STATE_ALLOW)」として許可する感じっぽいです。要求を上げる方法は解りません… docs.microsoft.com/en-us/microsof…

2021-07-27 13:23:08
戸田プロダクション @TodaProduction

@pik 有り難うございます。その辺になると私にはもう無理なので (^_^;)、しばらく待ってネット上に 10.4.2 での解決方法が登場する日まで待つか、あるいは別の方法 (自動クリック等) で対応することを考えようと思います。お忙しいところ、お手間取らせて申し訳ありませんでした。

2021-07-27 14:18:15
HOSOKAWA Jun @pik

@TodaProduction 先ほどの件は TEdgeBrowser.OnPermissionRequested というイベントが発生するようです。 なので、このイベントで渡される引数に対して "第2引数".ArgsInterface.Set_State(COREWEBVIEW2_PERMISSION_STATE_ALLOW) を片っ端から設定してあげれば、出来るかもしれません。

2021-07-27 14:52:45
戸田プロダクション @TodaProduction

@pik すみませんが「片っ端から設定してあげる」とはどういう意味でしょうか? フォームに TEdgeBrowser を載せただけの最小限のテストプログラムに対し、仰せの通りイベントを設定して記述してみたつもり?ですが、残念ながら自動再生は開始されません。 pic.twitter.com/828FjG9eG5

2021-07-27 15:55:56
拡大
HOSOKAWA Jun @pik

@TodaProduction ダメでしたか…再生時に COREWEBVIEW2_PERMISSION_KIND_XXX がやってくるかなと思ったのですが、やってこないのであればとりあえずは無理そうですね…お手を煩わせてしまい申し訳ありません…

2021-07-27 15:58:59
戸田プロダクション @TodaProduction

@pik こちらこそ、お付き合いさせてすみませんでした。とりあえず現時点では OnFrameNavigationCompleted と OnNavigationCompleted で、各々のページを無理やりクリックして自動再生を開始させています。あまりお行儀の良いコードではありませんが、背に腹はかえられません。引き続き足掻きます (^_^;)。

2021-07-27 16:05:31
戸田プロダクション @TodaProduction

進捗状況 RadioTunes OnNavigationCompleted 時点でクリックしても駄目だったが、その前段階 OnFrameNavigationCompleted でクリックしたら無事に自動再生を開始出来た。画面表示も違和感無し。ただ ExecuteScript ではHTMLソースを取得するのに時間がかかり、メディア情報表示が相当もたつく。 pic.twitter.com/oa8EjH56LP

2021-07-29 09:00:34
拡大
戸田プロダクション @TodaProduction

進捗状況 Jango 青い警告画面が一瞬表示されて目障りだが、こちらは OnNavigationCompleted 時点のクリックが有効で自動再生を開始出来る。逆に OnFrameNavigationCompleted 段階では警告画面が存在せずクリック出来ない。メディア情報は OnDocumentTitleChanged で取得するため表示切替は実に良好。 pic.twitter.com/hyh9toNHx4

2021-07-29 09:11:25
拡大
戸田プロダクション @TodaProduction

進捗状況 radiko OnNavigationCompleted 時点で画面スクロールと自動クリックが効いて自動再生が可能。ただし、たまにスクロール結果が暴れて「再生する」ボタンの座標がズレることがある。画面スクロールが無い読み上げページは安定動作。番組名は OnDocumentTitleChanged で取得し表示切替も良好。 pic.twitter.com/ghrWm3PL3f

2021-07-29 09:23:31
拡大
戸田プロダクション @TodaProduction

進捗状況 FM++ とりあえずFMはなび を登録してテスト中だが、OnNavigationCompleted でも OnFrameNavigationCompleted でも、画面スクロールは可能なのに画面クリックが効かず自動再生が開始出来ない。マウスで再生ボタン押せば音自体は鳴る。せっかく TEdgeBrowser を搭載したのに… (^_^;)。 pic.twitter.com/CrKPJ88TWK

2021-07-29 09:36:18
拡大
戸田プロダクション @TodaProduction

Delphi - TEdgeBrowser 利用時の最大?課題、PCAudio 制御で試行錯誤している記録。 TEdgeBrowser で音を鳴らすと音量ミキサに WebView2 が表示されるが、これが既存 SetMute でミュート出来ない。WebView2 のプロセスIDがプログラム (らじるれ郎)自身のプロセスIDと一致しないからだと思われる。 pic.twitter.com/Ae5AcuK5Gy

2021-07-29 17:02:57
拡大
戸田プロダクション @TodaProduction

最初は外部から Edge.BrowserProcessID を与え IF 文で比較させてみたがダメだった。しかし 試しにプロセスID判定の IF 文自体を外すと WebView2 を含めて音量ミキサ内の全セッションがミュートされた。つまり、なんとかして WebView2 さえ捕捉出来れば、制御自体は既存ルーチンでも処理出来るはず。 pic.twitter.com/Oge0fUu8lg

2021-07-29 17:03:59
拡大
戸田プロダクション @TodaProduction

そこで片っ端からそれらしきメソッドを試してみると、SessionControl の SessionIdentifier に msedgewebview2.exe という文字列が含まれていれば、WebView2 セッションと判断して良さそう…ということが判った。早速 判定条件に組み込んだら、無事に TEdgeBrowser の音をミュートすることに成功した。 pic.twitter.com/u7VfcEB9Gy

2021-07-29 17:05:37
拡大
戸田プロダクション @TodaProduction

しかしこの方法だと TEdgeBrowser 搭載プログラムが2本以上同時に動く時、ひとつのプログラムの音量操作が他のプログラムにも影響を及ぼすんじゃないか? そう考えて、試しに らじるれ郎を2つ起動すると、なんと音量ミキサには WebView2 がひとつしか出てこなかった。これは一体どういうことなんだ? pic.twitter.com/VK4dvZIYa2

2021-07-29 17:06:29
拡大
戸田プロダクション @TodaProduction

片方のらじるれ郎で音をミュートすると、もう片方のらじるれ郎の音もミュートされた。片方でボリューム調整すると他方も連動して調整された。これは先ほどの SessionIdentifier 文字列判定とは無関係な気がする。なんたって音量ミキサ内には元々 WebView2 セッションがひとつしか無いんだもの (^_^;)。 pic.twitter.com/pJDwJS4YEU

2021-07-29 17:07:07
戸田プロダクション @TodaProduction

やっぱり変だ。Form に TEdgeBrowser 貼っただけの最小プログラムを2本同時起動しても、音量ミキサには WebView2 がひとつしか出てこない。プログラムによる PCAudio 制御以前に、複数の TEdgeBrowser でオーディオセッションが共有されるのは Delphi の不具合ではないのか? ふりだしに戻った感じ? pic.twitter.com/TltkscHIC4

2021-07-29 17:07:55
拡大
戸田プロダクション @TodaProduction

FM++、内蔵ステーションリストに全局登録した (^_^)v。 pic.twitter.com/dIMidfcC8O

2021-07-29 20:11:04
拡大
戸田プロダクション @TodaProduction

ただし、現時点では自動再生開始の目処はまったく立っていない。最悪ユーザーが手で開始ボタンを押す (^_^;)。

2021-07-29 20:21:17
戸田プロダクション @TodaProduction

げげげー、これは一体どういうことだ? Win7 + Delphi Community Edition 10.4.2 環境で作ったプログラムを、初めて居間のマシン (Win10 機) に持ってきて実行したらこんな表示になってしまった (@_@)。 (上) Fキー表示無し、(下) Fキー表示有り フォームの高さが足りずに表示が途切れてる感じ? pic.twitter.com/4lL4KozKn6

2021-07-30 14:07:17
拡大
戸田プロダクション @TodaProduction

えー、ちょちょっと待って (^_^;)、落ち着いて考えよう。 A:Win7 + Delphi 7.1 で生成したアプリ B:Aの *.DPR を Win7 + Delphi 10.4.2 でリコンパイルしたアプリ Aは Win7, Win10 で正常表示 Bは Win7 では正常表示、Win10 だと異常表示 同じ DPR から生成した EXE (バイナリ) なのになぜ?

2021-07-30 14:19:33
戸田プロダクション @TodaProduction

Bが Win7,Win10 両方で異常なら話はまだ判る。Delphi 7.1 DPR を 10.4.2 で読んだ時の変換エラーだろう。しかしそれならBは Win7 でも異常表示されるはず。それが正常表示されるということは、Win7 と Win10 で Form.Height が異なることになる。では逆になぜAは両OSで正常表示されるのか?(^_^;)

2021-07-30 14:37:26
DEKO @ht_deko

@TodaProduction フォームの Scaled プロパティが False になっていて、フォームの高さ/幅を ClientHeight/ClientWidth で指定していれば基本的には大丈夫なハズです。 たまにやらかすのはプロジェクトオプションの "DPI の認識" で、”対応せず” にしておかないと座標計算が派手に狂うことがあります。 pic.twitter.com/AkNUx0MGSF

2021-07-30 14:30:25
拡大
DEKO @ht_deko

@TodaProduction > たまにやらかす 96dpi (100%) で座標計算しているものは、100% でない環境において位置やサイズがおかしくなる事があります。 pic.twitter.com/yKzhm5oRp4

2021-07-30 14:37:37
拡大
戸田プロダクション @TodaProduction

@ht_deko うわぁぁぁぁ DEKO さん有り難うございますうぅぅぅ! フォームの Scaled は FALSE でしたが、仰る通りプロジェクトオプション「DPI の認識」が「ディスプレイごとの DPI に対応 V2」になっていました。「対応せず」に変更したら、見事 Win7, Win10 両方で正常表示に戻りました。感謝感激です (^_^)。 pic.twitter.com/GptLLOjfLp

2021-07-30 15:01:14
拡大
DEKO @ht_deko

@TodaProduction うまくいってよかったです~♪

2021-07-30 15:08:53