Takumiboo
2021-12-29 03:35
初めまして。Airsonicからの乗り換えを検討しています。
Airsonicと同じデータフォルダを読み込ませているのですが、英数字以外で始まるアーティスト名のフォルダにあるファイルが読み込めていないようです。
内部詳細ではロケールの部分に
Javaのデフォルト文字セットがUTF-8をサポートしていないようです。国際文字は部分的にサポートされる場合があります
JavaのファイルエンコーディングがUTF-8をサポートしていないようです。国際文字は部分的にサポートされる場合があります
と表示されています。
こちらは何か対処方法がありますでしょうか?
Java: 17.0.1, OS: Windows 10
返信
Webmaster
2021-12-29 18:46
> 内部詳細のロケールの部分
これはAirsonicで機能レビュー時から存在する既知の不具合です(特にアナウンスされていませんが)。
ほとんどの場合無視して問題はありません。またLinuxでは発生しません。
気が向けば修正する可能性がありますが、致命的でもないので即修正する予定はありません。
> 英数字以外で始まるアーティスト名のフォルダにあるファイルが読み込めていない
これはご提示されている情報だけでは状況が掴めないかもしれません。
> Airsonicと同じデータフォルダを読み込ませている
JpsonicはAirsonicのソースを利用してはいますが、Airsonicのデータフォルダに対する後方互換性、直接的な移行については特に保証していません。
データフォルダを新たに空の状態から試すのが無難かもしれません。
返信
Takumiboo
2021-12-30 02:33
返信ありがとうございます。
データフォルダについて誤解を招く表現でしたが、AirsonicのDBなどを読み込ませているということではなく、同じ音楽ライブラリフォルダ、という意味です。
また今気が付きましたが、
データベースにアクセス不能なミュージックフォルダに格納されているファイルが存在します
メディアファイルデータベースにパスが不正なメディアファイルが含まれています
アクセス不能なメディアファイル数 2
パスが不正なメディアファイル数 2533
というアラートも出ています。おそらくこれらが表示されていない英数字以外で始まるフォルダとその中の楽曲かと思われます。
改めてAirsonicの同じ画面を見てみるとたしかにこちらでもロケールのエラーが出ていました。なのでこちらは関係がないのかもしれないですね。
返信
Webmaster
2021-12-30 20:49
了解いたしました。
私なら以下のような手順で確認を行うと思います。
・何かエラーが記録されていないかログを確認
・Music Center for PCで作成したファイルのみを用意しローカルマシンで正常にスキャンできるか確認。CDからリッピングするのが手っ取り早いですが、ライブラリがミュージックフォルダと分類の方法にあるようなディレクトリで構成されている場合、CDからでなくてもタグを付与できます。たとえばYoutubeからダウンロードしてきたようなファイルでも、ディレクトリ構成を一致させればCDDBから取得したデータをファイルに付与することが可能です(アルバムを右クリックして「アルバムとして検索」を選択するとGracenoteのデータとの比較ダイアログが開きます)。
・もしMusic Centerのデータの読み込みに問題がなければ、Jpsonicは正常に動作しています
・Jpsonicが正常に動作しているのに読めないファイルがある場合、そのファイルに問題があると疑いをかけます。テスト用にいくつか既存のファイルをコピーし、タグを削除したあとMusic Centerでタグを再付与します。それが読めたとしたら黒です
JpsonicはAirsonicを元に作成されているのですが、対象としているJavaのバージョンや使用されているライブラリは世代の新しいもの、ほぼ最新へ刷新されています。
Subsonic APIの互換性には配慮しますが、Airsonicに対して全機能の後方互換は保証していません。Jpsonicの仕様は、Jpsonicの仕様です。
タグバーサについては特に各プロダクトの非互換や不具合がとても多い部分です。
粗悪なデータも含め対象範囲(使用しているソフトや、そのバージョン≒いつぐらいにそのファイルを作成したか)を定めずに読めないインプット系トラブルの調査を行うことは悪魔の証明です。
そのため、Jpsonicでは「Music Centerの出力が正解」という仕様にしています。ご了承ください。
もちろんそれ以外のソフトも使用可能ですが、多くのオープンソフトウェアのライセンスには「無保証」と書いてあるはずです。
そのソフトウェアがMusic centerと互換性を持つタグを扱えて、バグがないことが前提になります。
返信
Takumiboo
2022-01-01 02:57
メディアスキャン時にエラーが出ていたようです。
2021-12-29 03:04:19.717 ERROR — scan-task-pool-1 : An error occurred in the pooling thread.
java.lang.UnsupportedOperationException: Not available for this field DISC_NO
at org.jaudiotagger.audio.generic.GenericTag.getValue(GenericTag.java:198) ~[jaudiotagger-2.2.6-SNAPSHOT.jar!/:na]
at org.jaudiotagger.tag.wav.WavTag.getValue(WavTag.java:311) ~[jaudiotagger-2.2.6-SNAPSHOT.jar!/:na]
at org.jaudiotagger.tag.wav.WavTag.getFirst(WavTag.java:316) ~[jaudiotagger-2.2.6-SNAPSHOT.jar!/:na]
at com.tesshu.jpsonic.service.metadata.JaudiotaggerParser.getTagField(JaudiotaggerParser.java:161) ~[classes!/:111.0.0-RELEASE]
at com.tesshu.jpsonic.service.metadata.JaudiotaggerParser.getRawMetaData(JaudiotaggerParser.java:111) ~[classes!/:111.0.0-RELEASE]
at com.tesshu.jpsonic.service.metadata.MetaDataParser.getMetaData(MetaDataParser.java:50) ~[classes!/:111.0.0-RELEASE]
at com.tesshu.jpsonic.service.MediaFileService.applyFile(MediaFileService.java:634) ~[classes!/:111.0.0-RELEASE]
at com.tesshu.jpsonic.service.MediaFileService.createMediaFile(MediaFileService.java:624) ~[classes!/:111.0.0-RELEASE]
at com.tesshu.jpsonic.service.MediaFileService.updateChildren(MediaFileService.java:519) ~[classes!/:111.0.0-RELEASE]
at com.tesshu.jpsonic.service.MediaFileService.getChildrenOf(MediaFileService.java:263) ~[classes!/:111.0.0-RELEASE]
at com.tesshu.jpsonic.service.MediaScannerService.scanFile(MediaScannerService.java:280) ~[classes!/:111.0.0-RELEASE]
at com.tesshu.jpsonic.service.MediaScannerService.scanFile(MediaScannerService.java:284) ~[classes!/:111.0.0-RELEASE]
at com.tesshu.jpsonic.service.MediaScannerService.scanFile(MediaScannerService.java:284) ~[classes!/:111.0.0-RELEASE]
at com.tesshu.jpsonic.service.MediaScannerService.doScanLibrary(MediaScannerService.java:189) ~[classes!/:111.0.0-RELEASE]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
楽曲をiTunesで管理しているのでMusic Centerでの動作確認にはちょっと後ろ向きですね…アドバイスいただいたのにすみません。
ライブラリの違いなどで同じデータでも読み込めない可能性があるということですね、承知しました。
Webmaster
2022-01-01 12:45
ログありがとうございます。
ファイルが手元にあれば再現できそうですが、今のところ対応予定はありません
少々気になる点があるため調査します。
致命的かというとそうでもない部分であるため、即何かが改善されることを保証するものでないことをご了承くださいm(_ _ )m
Takumiboo
2022-01-07 18:40
お手数をおかけいたします。
ちなみにエラーメッセージでは「パスが不正」とのことでしたが、これがファイルに付与されたタグに起因するものということはあるのでしょうか?
一般的にパスと言うとファイルパスのことを指すかと思い、またどうやら格納フォルダ名(=アーティスト名)が日本語で始まる楽曲が軒並み読み込まれていなかったので、そちらの問題かと思っておりました。
返信
Webmaster
2022-01-08 02:17
ちょっぴり長いですが経緯を解説します。
>そちらの問題かと思っておりました
これは「内部詳細」がWindows上ではイマイチな動きをすることが原因かと思います。
ご指摘のある「内部詳細」ですが、ここで行われているチェックロジックはスキャンのロジックとは独立しています。
ざっくり言うと、データベースに登録済みのレコードに対して、後追いで「このデータあってるのかな?」とチェックする方式です。
このチェックが品質の高いものかというとそこまでガチではなく、速度重視の簡易実装です。
本来このチェックがきちんと動作しているか証明するにはOSと主要なDBのマトリクスでテストする必要があります。
レビュー時にその点を指摘し実装者も把握していますが、結果的には現状の状態でマージされています。
(個人的には特にそこの方針に固執する気はありません。私が管理していたプロジェクトではないので)
またこの機能が見切り発車で役に立たないものかというとそうではなく、多くの方が配備するであろうLinuxでは問題が顕在化しません。
ですので、完全な実装でないにしても現実的には一定の有用性がある機能だとは思います。
Windowsの場合「Windowsじゃこのチェックちゃんと動かないかもね」とメッセージ表示する位ご丁寧な方が日本人向きかもしれませんが。
私なら本格的にWindows向けへプロダクト展開するならその時点で不具合を修正します。
プログラム的に2次被害を発生させるような不具合ではないので、修正の緊急性は高くないと見ています。
> ファイルに付与されたタグに起因するものということはあるのでしょうか
紛らわしくて恐縮ですが。
上記のような経緯があるため、内部詳細の画面で表示されている内容は、ファイルが読み込めない件とは無関係です。
ログを見る限りでは日本語であるかどうかもおそらく関係がなく、ディスクナンバーが登録されていないという単純なタグ不備があるように見えます。
ですので、お手数でなければいくつかのファイルにディスクナンバーを書き込んでみて挙動の変化を見るというのもアリかと。
(他のタグで同じようなことが起きなければ、すんなり読めたりするかもしれません)
___
現在Jpsonicは、Airsonicよりも若干タグの要件が厳しめになっているかと思います。
これは厳しいマゾ仕様が私の好みだから、というわけではなく、一応の理由があります。
どことはいいませんが、頻繁にメモリオーバーフローの報告があるAirsonic派生プロダクトがあります。
Airsonicはずさんなエラー処理が割と多いので、検証をおろそかにして強引に機能追加をしていけば、より深い沼にハマることもあるでしょう。
そのためJpsonicはまず、ありとあらゆるエラー処理をAirsonicよりも厳しめに書き換えるという修正を行っています。
メモリオーバーフローを発生させる疑いのある処理の対象には、がっつりとタグ解析の処理も含まれています。
・一端エラー処理を厳しめに極振りする (←今ココ)
・あまり厳しすぎるなら慎重に書き換えを行う
幸いにもJpsonicでは今まで一度もメモリオーバーフローの報告がありません。
これ自体は致命的によいコトです。
一方エラー処理を厳しめにしたのはプログラムの全範囲ですが、幸いにもちょっと厳しすぎる箇所は現状タグ解析くらいのように見えます。
多少強引な進め方ですが、結果的にはこのような事実が明確化されている分、レガシーサーバに比べ前進しています。
今後の流れとしては、ちょっと厳しすぎるんじゃないかナー?という箇所は、重点的に検証を追加し仕様変更を行うことになるでしょう。
ただし厳しいといっても、不合理なほど厳しいかというと「別に厳しいというほどでもないのでは」という捉え方もあることに注意してください。
フォーマット仕様上必須でなくても「現実的に楽曲データ管理するには半ば必須」というタグはあると思います。
現状Music CenterでFLACにタグ付けしているような場合ではエラーが発生していないと思います。
これは一般的なソフトウェアで必要とされやすいタグ項目はMusic Centerが埋めているためだと思います。
CDを作ってCCDBも管理してきたSONYですので、その仕様にはそこらのフリーウェアよりも視野の広い含蓄が含まれています。
そのレベルでタグ管理されているライブラリでは、Jpsonicはエラーを吐かないと思います。
これらの仕様はファイルフォーマット毎に異なるため、確認に案外と手間のかかる作業です。
ですのでボチボチ、となります。
今後スキャンの並列化云々にまつわる様々な修正を行う際に、おそらく比較的先の順位で着手することになるでしょう。
ものすごく先の話になるのですが、もしいったんスキャン仕様を甘めにしたとしてそのずっと後に。
タグチェックのような機能をもし仮に作るとしたら、タグ項目の仕様はSONY仕様に寄せると思います。
たとえば「ディスクナンバーが登録されていないよ!」というような注意喚起を出すようなチェックが作られると思います。
今はその過程にあるとお考え下さい m(_ _ )m
返信
Takumiboo
2022-01-23 15:34
試行錯誤の結果原因らしきものがわかりました。
日本語アーティスト名の楽曲がすべて表示されていなかったのでそれが原因かと思っておりましたが、よくよく見てみるとアルファベットのYやZから始まるアーティストも表示されていないことに気が付き、索引タブで見ていくと、とあるフォルダ内の楽曲がすべて表示されていないことがわかり、さらに索引順でそれより後ろのアーティストがすべて表示されていないことがわかりました。
いったんその不完全なアーティストフォルダを退避したうえでスキャンすると日本語アーティスト名の楽曲を含めた曲がスキャンされました。
該当のフォルダをはwavファイルとmp3ファイルが混在しているフォルダだったのですが、Jpsonicで表示されていない楽曲以降をMp3tagで見てみると、タグ情報が付与されているwavファイル(RIFFタグ?のものとID3タグのものがありました)で引っかかっているようでした。これらのファイルからタグ情報をすべて削除して再度スキャンしたらこれらのファイルも読み込まれました。
おっしゃる通り(詳細な原因は不明ですが)タグ情報の不備と思われるファイルが原因でした。お騒がせいたしました。
特にこれらのファイルにディスク番号などは付与されていなかったので、何か別の原因でタグの読み込みがうまくいかず、ログにはDISC_NO云々というエラーが出ていたのかもしれません。
これはおそらく開発上の方針にもよるとは思うのですが、利用者側の希望としては、何かしらの原因でパース出来ないファイルに遭遇した際には、そこで処理がエラー落ちして終了するのではなく、スキップして継続したり、どのファイルのパース中にエラーが発生したかをログに出力していただくなどすると原因追求しやすいなと思いました。
(ログでは今まで”Scanned media library with 2250 entries.”のあとにDISC_NO云々のエラーが発生し、そこでパース処理が終了していましたが、ファイル修正後は”Scanned media library with 3212 entries.”まで表示されており、エラー以降は処理が停止してしまっているようでした。)
これで移行に際しての問題は解決したので、Airsonic-advancedからJpsonicへの移行を本格的に検討したいと思います。
ありがとうございました。
返信
Takumiboo
2022-01-23 21:00
すみません追記です。
他に多数ディスク番号の無い楽曲データがあり、それらを読み込んでもエラーは出なかったため、ディスク番号タグの有無が原因ではなかったようです。
返信
Webmaster
2022-01-24 01:48
回避方法が見つかったようで良かったです。
パーサの問題点は概ね把握しておりまして。
レガシーサーバのコードがどうなっているかというと、どんなファイルであろうが決められたタグを読みに行きエラーが返ってきたら握りつぶすという実装をしています。結果的に問題があってもスルーされるだけ、という動きになります。
これがユーザの望むべき理想的実装かというとそうでもなく、解析中にもっと深刻なエラーが起きたら?という点まで考慮されていないため修正対象になります。
現在は応急処置的に、ログを出力し解析処理を止めています。
結果的に一般的に使用されるようなタグがサポートされないようなファイル混じりのライブラリでは、ご指摘のような現象が起こる可能性があります。
全てFLACやMP3で管理しているような割と一般的っぽいライブラリでは再現しないため、後続処理で長期放置されていたより目立つ不具合(特定条件でFLAC再生できない問題等)を先に潰していたという次第です。
パーサは後のバージョンで正攻法の実装に改善予定です。が、メモリオーバーフローのような深刻なエラーが一回でも検知されれば即座に処理は停止されなければならないというのがマストの仕様になります。それ以外がどのような仕様になるかは今のところ未定です(善処しますが使用しているライブラリの設計次第の部分も含むため、現段階では細かい部分まで確定していません。SubsonicやAirsonicが設計放棄した部分なため)。
お手数ですが、しばらく凌いでいただくという方向で・・
ご報告ありがとうございました m(_ _ )m