本プログラムは textalive-app-api (ver.0.3.2) において以下の挙動に関する問い合わせのための検証用に作成したものです。
- Player を複数生成し、requestPlay() を実行すると楽曲が再生されないことがある
- Player を複数生成し、同じタイミングで requestPlay() を実行したものの Player.timer.position に差異が発生する
問い合わせ内容の症状は全て本プログラムにおいて
- 再現性あり(毎回必ず発生)
new Player() を実行してから onTimerReady() のイベントリスナーが発生するまでに別の Player を生成すると、requestPlay() を実行しても楽曲が再生されません。
この時、すべての Player.requestPlay() は true を返しています。
TextAlivePlayer.ts の TextAlivePlayer._isReady を true にすると次の Player を生成するようになっていますので、適所にコメントアウトしている this._isReady = true が実行されるようにして下さい。
Player の生成処理は TextAlivePlayer.initialize() にて実行しています。
症状の説明にもある通り、onTimerReady() が呼び出されるまで Player の生成を実行しないことで複数の Player が問題なく動作するようになっています。
任意のタイミングで Player を生成しても症状が発生しないよう対応いただけますでしょうか?
また、再生に失敗する場合は requestPlay() が false を返すよう対応いただけますでしょうか?
表題の通り複数の Player.requestPlay() を同一タイミングで実行しても position の値にズレが発生しています。
これは、Player.timer.position や onTimeUpdate() で取得可能な position いずれのケースでも発生します。
index.ts の MainSequence.update() にて各 Player の position をコンソール出力している処理がありますので、コメントアウトを外して出力をご確認下さい。
過去に Gitter Chat のやり取りにて言及されていた、ユーザ側でロジックの調整できる環境を提供いただくか、現行の Timer クラスにて対応いただけますでしょうか?
Node.js をインストールして下さい。
package.json のあるディレクトリ (app) にて下記コマンドを実行し、パッケージをインストールして下さい。
npm install
トークンを下記のjsonファイルに設定して下さい。(トークンは https://developer.textalive.jp/ から取得して下さい。)
- 開発用:app/src/textalive/dev_textalive_config.json
下記コマンドを実行することで、サーバが起動します。
npm run build-dev
下記の出力が表示されていればOKです。
そのurlにアクセスすることでアプリを確認することができます。
Server running at
http://localhost:****
(**** はデフォルト 1234 のポート番号)
- 起動すると6曲分の Player クラスを生成し、再生準備を行います。
- 再生準備が完了するとコンソール出力に ready と表示されます。
- 画面をクリックすると全ての Player を再生し、一定間隔ごとに聞こえる曲が変わるよう音量を変更する処理が実行されます。
ソースコードは app/src 以下にあります。各ソースコードの概要は以下の通りです。
エントリーポイント用。
定数を定義しているファイル。
マジカルミライ2023プログラミングコンテスト対象楽曲の Plyaer.createFromSongUrl() 用パラメータ定義。
Player クラスを保持、イベントハンドラの登録を行っているクラス。
- textalive-app-api
https://github.com/TextAliveJp/textalive-app-api/blob/master/LICENSE.md - copy-files-from-to
Copyright (c) 2017 webextensions.org
https://github.com/webextensions/copy-files-from-to/blob/master/LICENSE - del-cli
Copyright (c) Sindre Sorhus [email protected] (https://sindresorhus.com)
https://github.com/sindresorhus/del-cli/blob/main/license - parcel
Copyright (c) 2017-present Devon Govett
https://github.com/parcel-bundler/parcel/blob/v2/LICENSE - process
Copyright (c) 2013 Roman Shtylman [email protected]
https://github.com/defunctzombie/node-process/blob/master/LICENSE - typescript
本アプリではApach License 2.0 のライセンスで配布されているパッケージがインストールされます
Apache License 2.0 http://www.apache.org/licenses/LICENSE-2.0
https://github.com/microsoft/TypeScript/blob/main/LICENSE.txt