WSN追加案: オーディオトラックの追加・シナリオからの音量調節・ループ位置と回数の指定

Issue #269 resolved
Former user created an issue

1) 持続系の効果音と曲の同時再生などが可能になるオーディオトラックの追加

同時に再生できるBGMを増やしてほしいということです(3トラックほどあるといいかも)    持続系効果音と曲の組み合わせなど    基本的に紙芝居でテキストーベースのカードワースでは演出的に効果絶大    リソースの組み合わせて使えるようになれば演出の幅も大きく広がる

2) マスターとは別のボリューム調整

シナリオなどで音量の操作(マスターを最大音量とする)    たとえばクリックする度に足音だとか大きくなる(小さくなる)    移動する度に滝などの音が大きくなってくるとか    音量というのはとても大事なエフェクトなので距離感などの表現が可能になります    リソースによってバラバラな音圧などを加工せずに使えるようになるメリットもある

3) ループ位置及びループ回数を指定できるようにする        現状だとただの頭だしなのでイントロつき曲など使えないし作れない    効果音だと問題ないが曲を完全にループさせることが不可能(効果音可能)    ループ回数のしてがあると単発の効果音などが別の使い方が可能になる。    たとえば単発の時計の時報の音とか12時なら12回鳴らすなどの使い方が可能になる。

映像があまり動くことが無いカードワースにで音の演出はかなり効果が見込める。    特に(1)はかなり欲しい機能で(2)もかなり効果的である。    (3)は知識や技能を要するので重要度は低いがループ回数の指定は欲しいかも。        音のリソースは専門知識が技能が必要なので加工が難しく素人では手も足もでない。    なるべく加工せずに使えるよう本体の機能を充実強化が望ましい。    互換性の問題があるので実装は難しいでしょうがぜひ検討して欲しい。

Comments (14)

  1. k4nagatsuki repo owner

    ご提案ありがとうございます。

    実は1)と3)については、実装の計画まではしていないのですが、手元のメモでやりたいことに入っています。他にフェードイン・フェードアウトしながらの再生開始・終了などもメモにあります。つまるところ、これらの機能は、いざシナリオの機能の拡張を始めるという段階になった暁には、ぜひ取り組みたいと考えています。

    2)についてはまったく考えていませんでしたが、たしかに言われてみればこの機能があれば演出の幅が広がるのでとてもよさそうです。

    3)については、どのようにループ位置を指定するかをちょっと考えなくてはいけません。時間で指定するとなると、Windowsでは0.015秒単位くらいが正確に指定できる限界です。また、MIDI音声の場合はイベント単位の方が正確に指定できるかもしれません……が、おそらく時間単位の方がずっと分かりやすいでしょう。

    シナリオの機能追加になかなかとりかかれない理由については#184辺りをご覧ください。しかし、私はそろそろ機能追加を行う機は熟してきたのではないかと考えています(と言いつつ他の課題が山積でなかなかはじめられないのですが)。

  2. k4nagatsuki repo owner

    吉里吉里形式とツクールVX形式のループを実装。まだ課題があります。#270より引用。

    Wavosaurが作成するデータも調べてみたのですが、思ったより困難で手詰まりになっています。SAURというチャンクにループ情報が入っているようなのですが……どなたかBASS Audioやその他の方法を使って任意のチャンクの情報を取得する方法をご存知の方がいらっしゃったら教えていただきたいです。

  3. k4nagatsuki repo owner

    具体的な実装は以下のようになるかと思います。

    • 再生チャンネルの追加。効果音・BGMそれぞれでチャンネル番号を指定できるようにする。ライブラリがどこまで対応しているか分からないので、とりあえず最大2件ずつ(1~2)でよいか(増やすのは容易)。<Play type="Bgm" channel="2">
    • BGM・効果音再生コンテントで音量をパーセンテージで設定。デフォルト値は100。<Play type="Bgm" volume="80">
    • ループ回数を指定。0は無限ループ(BGMのデフォルト)で、効果音はデフォルトで1とする。<Play type="Bgm" loopcount="2">
    • ループ位置(開始・終了)の指定。バイト数で指定するのが妥当。未指定で従来通り。<Play type="Bgm" loopfrom="12345678" loopto="12345">
      • 上の構造は*.sli互換。吉里吉里のようにするなら<Play type="Bgm" loopstart="12345678" looplength="12345">
      • エディタで指定したループ位置は音声ファイルや*.sliにあるループ情報より優先されるようにする。

    最後の指定方式をどちらにするか決めて、しばらく寝かせて何も懸案が出ないようであれば、試験実装を行います。

  4. k4nagatsuki repo owner

    pull request #1114

    音量とループ回数の試験実装を行いました。

    実装中に見つかった問題を一つ挙げておきます。

    • 同じファイルで異なる音量・異なるループ回数で再生した時の処理。今の実装では一旦終了して新しい設定で再生を始めるようにしているが、仕様の衝突がありうる(おそらく大した衝突にはならない)
    • エフェクトブースターの音声再生機能は別に考える必要がある。例えば音量を指定するにはvolumeなどの新しい命令を付け加える必要があるが、これは仕様の衝突の危険が大いにあり、しかも衝突した場合はシナリオ作者が書き直さなくてはならないという致命的なものになりうる。
  5. k4nagatsuki repo owner
    • pull request #1126
    • pull request #1128
    • pull request #1131

    複数チャンネルの再生に対応。現在はBGM・効果音でそれぞれ2チャンネル(主・副)ずつです。対応するエディタはcwxeditorの20151012版です。

    戦闘BGMやカード使用時の効果音まで再生チャンネルを指定できるようにしても煩雑化するだけでメリットが薄そうなので、BGM・効果音再生イベントコンテントのみで設定可能にしています。

    また、上記した実装上の詳細「異なる音量や異なるループ回数で再生した時にどうするか」という点を変更しました。最初の実装では止めてから再生しなおしていましたが、それでは音量だけを変更したい場合・次の1ループで終了したい場合などに対応できないので、再生しながら設定のみを変更するようにしています。

    また、効果音は無限ループできないようにしました。BGMとの役割の違いをはっきりさせるためと、BGMはセーブ&ロードした時に再生状態が復元されるが、効果音はそうした性質を持たない(BGMへの転用ができるものではない)ためです。

  6. k4nagatsuki repo owner

    フェードイン・アウトについて。

    とりあえずBGMのみ対応したいです。次のような形式を考えています。

    <Play type="Bgm" path="a.mid" fadein="1000">
    

    fadeinの値はミリ秒とします。すなわち、この設定ではa.midが1秒かけてフェードインします。また、それ以前に流れている音声があれば同時に1秒かけてフェードアウトしていきます。

  7. k4nagatsuki repo owner

    エディタ側での設定は、とりあえず空白時間と同じく0.1秒単位にしようかと思います。

    フェードイン時間は、ループ位置などと違って多少大雑把でも問題はないでしょう。

  8. Log in to comment