2020/01/25

Wine 5.0.x系でのDirectShowからのMP3再生における問題と回避策

Wine 5.0.x系時点のDirectShowからのMP3再生に関する問題について。

  1. 内蔵版quartzの中のMP3再生は外部プロジェクトに依存するように
  2. LinuxなどではRPGツクール作品などでMP3 BGMのループ再生に問題があるが未解決
  3. 回避策 (条件あり)
  4. 2021/1/3追記: Winetricksのquartzとquartz_feb2010に関するメモ

内蔵版quartzの中のMP3再生は外部プロジェクトに依存するように

内蔵(builtin)版のquartz.dllでのGStreamerを使用しないMP3再生機能が過去のバージョンでは動作していたが、この機能は

  • MP3ファイルによっては再生処理に問題があった(例:RPGツクール作品の一部のMP3ファイルの再生)
  • 最近メンテナンスがされていない
  • 外部プロジェクトの機能を用いて置き換えすることが可能で、そうするのが妥当とされる

といった理由で他のAVIやWAV形式の処理とともにWine 5.0では取り除かれている。今後はLinuxなどではGStreamerのプラグイン群(32bitアプリケーションでは32bit版のプラグインが必要)を用いてwinegstreamer.dll経由で再生する方法のみとなり、MP3再生には該当するパッケージが必要となる。

5.0-rc系をテストしているときにwinegstreamer.dllを使用していないときにMP3再生をしようとするとOLEエラーになる問題を発見してバグ報告したのだが、現在のGStreamer関係の開発者から上記に相当する説明がなされ、Wine 5.0のリリースノートにもこの件についての項目が書かれていた。

The builtin AVI, MPEG-I, and WAVE decoders have been removed; we now depend on GStreamer or the Mac QuickTime Toolkit to decode such media files.

MacではGStreamerとは異なる別の仕組みを利用するらしいが詳細は不明。

LinuxなどではRPGツクール作品などでMP3 BGMのループ再生に問題があるが未解決

先述した修正自体は理にかなったものであり、未解決のバグに対する対策にもなるのだが、GStreamerを用いた場合はRPGツクール2000/2003/XP作品におけるループ再生(単純に最新から繰り返し再生するだけのもの)に不具合があり、これを5.0-rc系の初期に発見してすぐにバグ報告したのだが、簡単に解決しそうなものではなく、解決案の候補が示されただけに留まってWine 5.0の正式版がリリースされてしまっており、これが今後解決されるまでは安定版リリースにおいては内蔵版のDirectShowは不具合を抱えたままとなる

(2020/3/1)この不具合はWine 5.3で修正されているが、ネイティブ版dsound.dllとの同時使用はできないため、ツクールXPからのMIDI BGMの再生の不具合回避とMP3再生の両方を同時に正しく動作させることはできず、今後のDirectMusicの実装の改善を待つか、4.0.x系までのWineを使う必要がある。

一方でウディタ作品の音関係の動作は以前と変わらない。こちらは2.10作品の文字化け問題が改善されたので5.0.x系のほうがよいが、同問題の発生しないGallium Nineが使えるハードウェア環境であればバージョン0.4をWine 4.0.x系に入れて使う手もある。

回避策 (条件あり)

回避策としてはquartz.dllをネイティブ版にする。楽なのはWinetricksを用いる方法。

$ winetricks quartz

この場合、GStreamerのプラグインではなくmpg123のライブラリ(libmpg123)がl3codeca.acm.so経由で用いられるが、mpg123ライブラリ自体の他にWineのビルド時にこのライブラリを使用できるように設定されている必要もある。ディストリのパッケージとして提供されているものでは基本的に有効化されている。

フリーゲーム “Cresteaju” のMP3BGM版においてもwinegstreamer.dllではBGMがループしないが、同様にquartz.dllをネイティブ版にすることで問題を回避できる。ただし、RPGツクールXP/VXやウディタ作品のMIDI再生のためにdsound.dllをネイティブ版にしているWine環境ではうまく動かないため、cres.exeの実行時には内蔵版のdsound.dllが使用されるようにするとよい(winecfgなどで設定可)。なお、一部のRPGツクールVX Ace作品でもネイティブ版dsound.dllは不具合の原因となる。

悩ましいのがMIDI BGMの問題があるRPGツクールXP作品だが、これは5.0.x系では両方の問題を同時に回避する術がないため、ループ問題を認識しつつ我慢して使うか、4.0.x系を用意して使うかになる。

なお、アプリケーションによってはGStreamerで動かさないとうまく動かないものもあるため、ネイティブ版のquartz.dllを使う際にはWine環境を複数用意し、問題回避策として有用な場合のみの使用にとどめるのがよい。

2021/1/3追記: Winetricksのquartzとquartz_feb2010に関するメモ

Winetricksのquartzについて、ある時から64bit版DLLの追加提供のためにそれまでのDirectX再頒布可能パッケージとは異なるところからDLLを取り出すようになっており、このMIDI BGM再生のために必要なネイティブのdsound.dllとの相性が悪くなってMP3再生が動作しなくなってしまっていた。

2020年10月に従来のDirectX再頒布可能パッケージに含まれているものを使うquartz_feb2010を実装して取り込まれたので、20201206以上のバージョンでこれを指定することでRPGツクール作品のMIDI BGMの問題を回避しつつMP3再生も動作するようになる。ただしWine 5.0系ではwinegstreamerを無効にする必要がある(6.0-rc/6.0系では不要)。