待辦事項 #37271

ミキシングの高速化

啟用日期: 2017-06-14 00:38 最後更新: 2021-10-20 00:18

回報者:
負責人:
類型:
狀態:
關閉
元件:
優先權:
8
嚴重程度:
5 - 中
處理結果:
Accepted
檔案:
Vote
Score: 0
No votes
0.0% (0/0)
0.0% (0/0)

細節

現在、性能のボトルネックは、WASAPI/ASIO使用時の BASS_MIXER です。ドラムの曲データはそれほど問題になりませんが、ギター曲だと顕著に出ます。

何とか負荷低減できないものか。

Ticket History (3/7 Histories)

2017-06-14 00:39 Updated by: yyagi
  • New Ticket "ミキシングの高速化" created
2017-06-14 00:41 Updated by: yyagi
評語

https://www.3delite.hu/Object%20Pascal%20Developer%20Resources/BASSThreadedMixerLibrary.html

BASS_MIXER をマルチスレッド化するライブラリがあるようです。

サイトではASIOに出力といったことしか書かれていませんでしたが、パッケージのヘッダを見る限りでは出力を選ばない模様。

後日、試しに組み込んでみようと思います。

2018-08-04 00:12 Updated by: yyagi
  • Details Updated
  • 優先權 Update from 5 - 中 to 8
2018-08-22 01:43 Updated by: yyagi
評語

Rev. 166128a5cece38658cb750f35e542bd5c07ec06a で、TimeStretch=OFFの時に限り、ミキシング負荷を従来の半分にした。

従来は読み込むサウンド(xPolyphonicSounds)分だけテンポ変更のストリームを生成し接続していたが、これの負荷が相当大きかった模様。

(再生速度がx1.000の時はテンポ変更ストリームを通さないようにしていたつもりだったが、結局通るだけ通っていて、通した結果が破棄されていた。そのためまるで負荷軽減になっていなかった。)

2021-09-27 02:41 Updated by: yyagi
評語

Rev. 42c16e85b954490a96885f573abff135cecdfae8 でミキシング処理の並列化を行いました。CPUのコア数分だけ並列化を行います。

BASSmix 2.4.11がこの並列化処理に対応したため、その機能を使っています。 BASS.NET はこれに対応していませんでしたが、BASS.NETが定義している enum値ではなく直接この機能のAttribute値を設定することで対応しています。

これにより、FPSが10%~20%程度向上しました。(私の環境で、180fps→200~220fpsくらいになった)

なお、従来はチップ音を曲の進行に合わせて逐次ミキサーに登録したり削除したりしてミキサーに登録しているチップの数をある程度小さくしないとミキサー処理の負荷が大きすぎて出音そのものがガタガタになっていました。特にギター譜面で。

それが、今回の並列化により、このような動的なミキサーへの登録を行わずに、最初にどかっとまとめて全チップ音をミキサーに登録してしまっても問題ないレベルの負荷になりました。(CPU負荷は上がるが、従来に比べると微増といっていいレベル。)

ミキサーへの追加削除の処理は結構重かったので、そのタイミングで譜面ががたつく場合もありましたが、それをなくせます。

今はまだその設定をいじるUIを用意してはいませんが、Config.xmlには昔からその設定があるので、これまでのバージョンで一気にチップをミキサーに登録するとどうなるかは下記の項目をいじることで確認いただけます。

<bDynamicBassMixerManagement>
<val>true</val>
</bDynamicBassMixerManagement>

これをtrueからfalseにしてください。(後日CONFIGURATIONのUIで変更できるようにします)

あと、ギター/ベースの同時発音数を1に絞っていましたが、これも元のように増やしても(ドラムと同じように4にしても) 問題なさそうでした。これも後日、ドラムとは別に同時発音数を設定できるようにしようと思います。

(Edited, 2021-09-27 02:49 Updated by: yyagi)
2021-09-27 23:12 Updated by: yyagi
評語

https://osdn.net/users/yyagi/pf/DTXMania_TestBuilds/dl/DTXMania/DTXManiaGR_MultithreadedMixing.zip

試作版です。効果が気になる方はどうぞお試しください。

  • 動的なミキサー制御のon/off機能も含んでいます。CONFIGURATION/System/Sound Option/DynamicMixer で設定。
  • ギター/ベースの最大同時発音数も、ドラムスとは個別に設定変更できます。CONFIGURATION/System/Sound Option/PolyphonicSoundsGB で設定。昔(DirectSound時代)はドラム/ギター/ベースの最大発音数をすべて4にしていましたが、WASAPIやASIOでこの値に戻しても問題なくなりました。(一応、これまでの設定と合わせて、初期値はドラムが4でギターベースは2のままです)
  • ミキサーのマルチスレッド動作を解除する機能はありません。(いらないですよね)
2021-10-20 00:18 Updated by: yyagi
  • 狀態 Update from 開啟 to 關閉
  • 負責人 Update from (無) to yyagi
  • 處理結果 Update from to Accepted
評語

Release119に更新を適用済みです。チケットをクローズします。

ミキシング処理の並列化について、他の関連コミットは以下の通りです。 (DynamicMixerのon/off UIや、PolyphonicSoundsGBの追加、BASSThreadedMixerLibrary関連コードの削除など)

  • a416b0f3f3a208a16d9c135b876aaf62ccafffbf
  • b08526de322d21b804761d8d5991fc0dc6d6c192
  • 604c6e9c7afd7191ffe0f808e6427cfb3359fe94
  • 72b16a12408506f7c65983ee4f312685af398b7f
  • 9f82478dc42aa591164a7c94559a51c34603d86f

Attachment File List

No attachments

編輯

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » 登入