ループ再生でブチッっと異音が鳴る音声ファイルがある。

Issue #459 resolved
ハルキゲニア created an issue

タイトル通りリピート及びloopstartに戻ったときに変な音がするファイルがあります。

今のところ2つだけです。

CW1.50や音楽プレイヤーXMPlay(oggのループに反応します)ウルフRPGエディター用の音楽プレイヤーで確認してますが、それらは異音は鳴りません、py固有の何かだと思います。

直接の原因とは関係無いでしょうが、SMFのcc11、oggのloopstart&lengthよりsliが優先されるのはおかしいのでcc11およびloopstart&lengthの優先度を上にして欲しいですね。

Comments (20)

  1. k4nagatsuki repo owner

    ご報告ありがとうございます。

    異音が鳴るのはどのようなファイルでしょう。可能であれば教えていただけないでしょうか。

    直接の原因とは関係無いでしょうが、SMFのcc11、oggのloopstart&lengthよりsliが優先されるのはおかしいのでcc11およびloopstart&lengthの優先度を上にして欲しいですね。

    これは意図的にそういう風にしています。シナリオ側の都合でループ位置を変更したりしたい時、音声ファイルを直接書き換えるよりも*.sliを編集する方が容易だからです。

  2. ハルキゲニア reporter

    https://1drv.ms/f/s!Arff-7TNFXnXhwKJTqMV5b2J123j

    Beyonedの方は1.50を使用していた頃に使っていたもので単純なループで確認に1.50を使うと良いでしょう。

    luteの方はloopstart lengthを使ったループです、確認にはXMplayが最適です。

    ループ情報のあるSMFやoggは作者自身が定めたループ情報であり、それが絶対的に正しいのです。

    sliの役目はループ情報の無いファイルをループさせることで、上書きする事ではありません。

    そもそもオーディオ等をしっかりとループさせるにはBPMの正確な計測などが必要不可欠であり、作者が設定したループ情報わざわざ上書きするメリットはありません。

  3. k4nagatsuki repo owner

    ありがとうございます。

    現象を確認してあれこれいじってみたのですが、今のところ何が起きているのかもよく分かっていない状況です。

    ループする・しないにかかわらず、再生末尾で存在しないはずの音がたしかに鳴っているのですが、その理由がまるで分かりません(Firefoxで鳴らした時もこの音が出てくるけどFirefoxはモジュールお化けだから本当は何が鳴らしてるのかよく分からない)。

    再生時間をほんの少し短くすると鳴らなくなるようなので、ループ処理本体で異常が発生しているわけではなさそうです。また、そのままデコードしてwavファイルにしても同じノイズが出るので、Ogg Vorbisに関する問題というわけでもないようです。

    BASS Audioと同じベンダが出しているXMPlayでは問題なく、bass.dllも最新版なので、後は使い方の問題であるはずです。しかし見当がつきません。

    今のところお手上げです。どなたか音周りのプログラミングに詳しい方はいらっしゃらないでしょうか。


    ループ情報のあるSMFやoggは作者自身が定めたループ情報であり、それが絶対的に正しいのです。

    これはいくつかの理由で間違っていると考えています。

    • CWはゲームですから、音声はフェードインされたり、ぶつ切りにされたり、途中から再生されたり、テンポを変えたり、様々な使われ方をします。用途によっては普通の再生とは異なるループ情報が必要になる場合がありえます。
    • 音声素材は形態も用途も多種多様です。ジングルのように本来はループなしの音楽ではあるがある部分のループ再生も可能というような例もあります。用途によってループ情報の変更が必要という事もありえます。
    • ループ情報は作者が書き込んだものとは限りません。フリーなリソースは、作者の手を離れて変更される場合があります。ほとんどは作者によって情報が作成されるかもしれませんが、そうでない場合もありえます。
    • 全ての音声作者が自分の埋め込んだ情報が絶対に正しく、変更してはならないと考えているという証拠はありません(その証拠を挙げるのは不可能です)。また、そう考えている作者はライセンスによってループ情報の改変を禁止する事ができます。

    そもそもオーディオ等をしっかりとループさせるにはBPMの正確な計測などが必要不可欠

    これはある程度はその通りですが、この作業が実際に音声の作者以外に行われている例もあり、音声作者以外にできないとする根拠にはなりません。

  4. ハルキゲニア reporter

    Beyonedはサンプルレートが16bit48khzとやや特殊です(原因と関係あるか分かりませんが)Luteのほうは16bit44khzで一般的です。

    あなたが曲などのリソースを材料としか見ておらず、何をしても良いと考えていることがよく分かりました。

    曲に限らずゲームで使用するリソースは材料である前に作品です。

    もともとループ情報がある曲は市販ゲームなどと比べても遜色ないように楽曲的にもオーディオ的に自然にループするようになっています。

    自分の意見は正しいと思っています、これ以上言うことはありません。

  5. k4nagatsuki repo owner

    引き続き、折を見て調べてみます。もしかしたらBASS Audioのバージョンアップなどで解決してしまう問題なのかもしれません。気長にお待ちください。

    あなたが曲などのリソースを材料としか見ておらず、何をしても良いと考えていることがよく分かりました。

    それを決めるのは作者です。作者には著作権がありますから、適切なライセンスで利用者に対して自分の意思を通す事ができます。

    「絶対的に正しい」という主張は、全ての音声素材作者の意思を決めつけています。全ての音声素材作者の意見を聞く事が不可能である以上、その主張は正しいといえませんから、そう書いたつもりです。

    例えば私が音声素地を1つ作って、ループ情報は好きなように上書きしてくださいと書いただけで、その主張は崩壊してしまいます。

  6. ハルキゲニア reporter

    エディターを使い始めて気づいたのですが、エディターで曲を再生すると異音は鳴らなくて、ゲームだと鳴るんですよ。PyとCWXeditorで音声再生の使用に違いでもあるんでしょうか?

    あと異音はなんと言うか、スタート位置に戻ったとき瞬間的に音量が大きくなってるような気がします。

  7. k4nagatsuki repo owner

    ライブラリの呼び出し方は同じはずです。ではライブラリのバージョン違いか、と思ったのですが、cwxeditorはCWPyが持っているbass.dllを使用するようにしてあるので、食い違う事はありません。

    だとすれば、Pythonはインタプリタ言語なので処理速度が劣るため、というような事でしょうか? そうなると対応はたやすくは行えないかもしれません。

  8. ハルキゲニア reporter

    処理速度が問題なら全てのファイルで同じ症状がでるのでは?

    http://senobishiten.cyber-ninja.jp/common.html おーぐぷれーやー、ウディタ用のoggのloopstart&lengthとmidiのcc111に対応したテスト用音楽プレイヤーです。参考になるでしょうか?

    シナリオ用に曲作ったんですけど、リピート時にこの症状が出るんですよね。 ファイル自体に問題があるのかなぁ?別にやり方は変えてないのですが。

  9. k4nagatsuki repo owner

    ファイルによって現象が出たり出なかったりする、そして出るファイルでは必ず出る、という事は確認できていますので、特定のファイルが持つなんらかの特徴が関わっているのは明らかですが、それがなんなのか分からないですね。

    問題のノイズは、波形を見ても存在しない音です。明らかに、ファイルではなく再生側に問題があります。

    ノイズが出るファイルでは、cwxeditorの方でもほんのかすかにノイズが乗っているような気がするのですが、@tekitoudesuさんの方が耳がいいのは間違いないので、これは私の錯覚でしょうか?

  10. ハルキゲニア reporter

    Beyonedとかの事でしょうか?アタック(音の出だし)にブチッって感じの音はこの曲に限らず元々はいっています(楽器にもよります)本来なら気にならないはずの音です。

    問題はリピート時に、その部分だけPyだと強調されて大きくなって聞こえる事と理由が分からない事ですね。う~ん

  11. k4nagatsuki repo owner

    ああ、冒頭だったんですね。道理で見つからないわけだ。

    という事は、ループが繋がる冒頭だけ音量がおかしくなっている感じでしょうか。だとすると処理遅れでは説明できないですね……。

  12. k4nagatsuki repo owner

    私の環境では、他のソフト(FOLEやfoobar2000)で鳴らした時、途中で再生を止めるとタイミングによって似たようなノイズが鳴ったり鳴らなかったりします。

    ドライバの挙動なんかも絡んでいるんでしょうか?

  13. ハルキゲニア reporter

    WSN2効果音のl_wind1とl_wind2は削除するか別の音に差し替えたほうが良いかもしれません。

    リピート時にプチプチ音が鳴って使い物になりません。(エディターや古いPyでは鳴りません)

    他の効果音も稀にプチっと音が聞こえる事がありますが許容範囲ですかね。

    ベーシックな音ですが汎用性のある波の音等と差し替えるのも良いかもしれません。

  14. k4nagatsuki repo owner

    pull request #1884

    古いバージョンでは鳴らないというのをヒントにあれこれ弄ってみたところ、たまたまノイズを発生させるスイッチに行き当たりました。再生ストリームの生成時にBASS_STREAM_DECODEBASS_MUSIC_RAMPを指定すると問題のノイズが発生するようです。音声データをデコードするようにしたらノイズが乗るというのは、ちょっとよく分からないです。BASS FXのバグかもしれません。

    とりあえずノイズは鳴らなくできたのですが、これで問題解決とはいきません。将来、パンニングや、テンポやピッチの変更といった機能を実装するとしたら、BASS FXを使う必要があり、そのためにはデコード指定が必要になります。その時までにライブラリ側の問題が直っている事を期待するか、それらの機能を諦めるしかないのかもしれません。

    さしあたって、音声を差し替える必要は無いと思います。

  15. k4nagatsuki repo owner

    さしあたって異音は解消できたと思うので優先度を下げておきます。

  16. ハルキゲニア reporter

    BGMが無い状態だと「システム・改ページ」が正しく再生されず、再生スタート位置が後ろにずれた様な感じで途中から再生されている様な音になる事があります。BGMが鳴っているとちゃんと再生されます。

    私のシナリオ「能力測定プログラム」で終了時に再生される「system10.ogg」が数値表示状態で終了するとプチッと異音が鳴ります。数値隠蔽状態だと鳴らないので、原因が解らず謎です。

    Py3α1でこの症状は出ません、α2だと起こる現象です。

  17. k4nagatsuki repo owner

    最近bass.dllを最新版に更新したのですが、α1-α2間にはbass.dllのアップデートは入っていないはずです。可能性があるとすればPython2-Python3のアップデートです。

    以下の点を確認していただけないでしょうか。

    • 最新のbass.dllで(最新のテスト版で)同じ現象が起きるのか?
    • 32-bit版と64-bit版で同じように問題が起きるのか?
  18. k4nagatsuki repo owner

    pull request #2235

    現象の再現を確認し、回避策を取りました。

    最新のbass.dllBASS_STREAM_DECODEを使用すると、この問題は発生しなくなるようです。たぶん再生と音声デコードの並列処理で問題が起きているのでしょう。

    BASS_STREAM_DECODEは過去のループ時のノイズの問題を回避するために外していたのですが、現在のバージョンでは復活させても特に問題は出ないようです。

  19. ハルキゲニア reporter

    有難うございます、異常は解消され正常に再生される様になりました。

  20. Log in to comment