Blog

  • DAM Multi Dimensional Sound の正体

    DAM Multi Dimensional Sound (以下、MDS) とは、第一興商製商用カラオケ機器 LIVE DAM WAO! (型番: DAM-XG9000; 以下、XG9) に採用される新たな演奏方式です。技術的詳細は以下の記事に譲ります。

    簡単に言えば、これまでの同社機種は搭載しているハードウェア MIDI 音源で楽曲を演奏していましたが、この機種では事前に録音した音声データをそのまま収録し再生するということです。

    「これまでにない臨場感あふれるサウンド」とは何か

    プレスリリースによれば

    従来の音源技術を見直し、新たに「DAM Multi Dimensional Sound」へと進化させました。最新のソフトウェアシンセサイザーや生演奏を組み合わせたハイブリッド演奏方式を採用することで、使用できる音源に制約がなくなり、これまでにない臨場感あふれるサウンドを実現します。

    従来のMIDI音源方式に加えて、最新のソフトウェアシンセサイザーやプロミュージシャンの生演奏を組み合わせたハイブリッド演奏方式を採用。高音質かつ重厚なサウンドが楽しめます。

    などとされています。これまでの同社機種の演奏方式よりも優れた音質になったかのような表現がされていることがわかります。そこで、実際にこれまでの機種による演奏と MDS とでは音声がどのように異なるかを検証しました。

    音声波形の比較

    わかりやすく、LIVE DAM Ai (型番: DAM-XG8000; 以下、XG8) に由来するこれまでのハードウェア MIDI 音源による出力を録音した音声 (以下、音声 A) と MDS 方式のファイルから抽出した音声 (以下、音声 B) の波形を比較します。今回注目する部分は、to the beginning – Kalafina (DAM 楽曲情報) の 56.82 秒付近、パーカッションのみが演奏される部分です。これらの波形を示します。

    音声 A の波形
    音声 B の波形

    これらを一見してわかることは、おおよその形、特に楽器の鳴り始めの部分が似ていることです。一方、位相は逆であるように見えます。ここで、両者の画像を重ね合わせ、さらに位相やスケールをできるだけ一致するように上下反転、拡大縮小した画像を示します。

    それぞれの波形が概ね一致することがわかります。

    結論

    音声 A の録音時の音量、発声タイミングやフィルタ処理の微妙な違い等を考慮すると、音声 A と音声 B はほぼ同一のものであると言えます。言い換えれば、MDS の音声にはこれまでのハードウェア MIDI 音源による出力を録音した音声も含まれているということであり、少なくとも今回検証した楽曲においては、従来の演奏方式よりも優れた音質の音声が出力されるということはないようです。

  • LIVE DAM WAO! の分析

    LIVE DAM WAO! (型番: DAM-XG9000; 以下、XG9)は、第一興商製の商用カラオケ機器です。

    LIVE DAM WAO! (右から 2 番目) 及び周辺機器; プレスリリースより

    旧機種からの主な変更点は、以下とされます。(プレスリリースより抜粋)

    • DAM Multi Dimensional Sound
    • 歌うまフィルター
    • なりきりエフェクト
    • ハモルン
    • 精密採点Ai Heart

    分析手法

    今回の分析では、システムログとソフトウェアのバイナリを入手し、これらを利用しました。なお、これらは適法に取得されたものです。

    ハードウェアアーキテクチャ

    今回分析した XG9 (シリアル番号: BA0NNNNN;以下、対象 XG9) の主なハードウェアアーキテクチャは、以下です。

    ソフトウェアアーキテクチャ

    対象 XG9 の主なソフトウェアアーキテクチャは、以下です。

    • OS: Poky Linux 11.3.0
    • カーネル: Linux 5.15.49-intel-pk-standard
    • メインプログラム名: altair

    DAM Multi Dimensional Sound

    この記事では、従来の MIDI 音源に代わるとされる DAM Multi Dimensional Sound について掘り下げます。これはプレスリリースにおいて

    従来のMIDI音源方式に加えて、最新のソフトウェアシンセサイザーやプロミュージシャンの生演奏を組み合わせたハイブリッド演奏方式を採用。高音質かつ重厚なサウンドが楽しめます。

    と説明されています。

    ヤマハ製音声入出力ボード YBD

    一世代前の機種である LIVE DAM Ai (型番: DAM-XG8000; 以下、XG8)までは、YAMAHA が開発したカラオケ機器向け音源ボード (音声入出力ボード) YBD シリーズが搭載されていました。

    Advantech 製マザーボード HVS-1010K (左) と YAMAHA 製音源ボード YBD3 (右); XG8 カタログより

    XG9 において、YBD がどうなったかをソフトウェアから考察します。XG8 と XG9 には、それぞれ SphinxManager (XG8)、SphinxManager2 (XG9) というソフトウェアが搭載されています。SphinxManager(2) は、両機種に搭載された音声入出力デバイスを制御するためのものです。XG8 の SphinxManager には、USB 接続された MIDI デバイスを制御するためのコードが含まれていました。しかし、XG9 の SphinxManager2 には、それが含まれていません。他のソフトウェアを探しても、そのような部分は見つかりませんでした。つまり、XG9 の音声入出力ボードには、MIDI 音源は搭載されていないと結論付けられます。(搭載されているが使用されないという可能性は一旦考えないものとします。)

    MTF 形式

    従来の MIDI 方式で用いられていた楽曲演奏情報ファイル OKD 形式 (関連: 同人誌, GitHub リポジトリ) の代替となる楽曲音声ファイル が MTF 形式です。MTF 形式の実体は gzip で圧縮されたアーカイブファイルであり、展開すると以下のようなファイルが現れます。

    各ファイルの内容は、以下です。

    • 9999.1000[1-4]: パーカッション, その他, ガイドメロディ,シンセサイザコーラス (OPUS)
    • 9999.10NN: バックコーラス (ADPCM)
    • *.json: メタデータ等

    他、AutoVocalEffect.mid というファイルが含まれる場合があり、新機能のなりきりエフェクトの制御で使用されるようです。なりきりエフェクトはプレスリリースで

    原曲でアーティストが使用している特殊なボイスエフェクトを再現。対象のパートのときだけ拡声器になったり、機械音声のエフェクトがかかるなど、ライブや原曲の雰囲気に近づけることができます。

    と説明されています。

    総括

    LIVE DAM WAO! は、商用カラオケ機としては珍しく MIDI 音源を搭載しないことを選択した機種です。このような機種が誕生した理由は主に

    • インターネット回線の広帯域化
    • HDD の高容量化

    であると考えます。XG9 と第一興商との間を結ぶ回線は 100 Mbps から 1 Gbps の帯域幅を持ちますし、XG9 は 12 TB の HDD を 2 台搭載しています。従来、MIDI ファイルは小さな情報量で幅広い表現力を持つ演奏情報ファイルとして利用され、演奏されるときには演奏機械で MIDI を解釈し音声を生成していました。しかし、演奏機械に転送し、保存される情報の量の制限が緩和され、このような方式を用いなくて良いと判断されたのでしょう。この判断の良し悪しの評価は行いませんが、カラオケ機器の新しい形が生まれたといえます。

  • プログラミング言語 Ruby の馴染めない点

    私は昨年、 Ruby を用いて Web サービスを開発するという業務に少しだけ従事しました。
    そこで初めて Ruby というプログラミング言語について基本的な事項を知ることになったのですが、これがどうも私にはしっくりこないものであったので、関係する事実とその感想等を述べたいと思います。

    関数呼び出しの括弧を省略する記法がある

    多くのプログラミング言語では、f という名の関数を呼び出すとき

    f()
    f(arg1)
    f(arg1, arg2)

    などとしますが、Ruby においてはリファレンスマニュアルの該当項目にある通り、括弧を省略した

    f
    f arg1
    f arg1 arg2

    のような記法が許されています。

    x = a

    などと記述されると、x に変数 a の値が代入されるのか、あるいは関数 a を呼び出した返り値が代入されるのか視覚的にわかりません。
    これは、非常に混乱する記法であるからやめるべきだと思いました。

    if 文と逆の役割をする構文がある

    リファレンスマニュアルの該当項目にある通り、if 文と逆の役割をする unless 文があります。

    unless error_detected
      p "Hello, world!" # 正常時ここに到達する
    end

    私にはこの構文の必要性が理解できません。

    if !error_detected
      p "Hello, world!" # 正常時ここに到達する
    end

    ではいけないのでしょうか。

    同義の組み込み関数が別名で複数ある

    String::size(), String::length() などがこれに該当します。
    混ぜて使うと混乱するため、どちらかだけで良いのではないでしょうか。

    &&, || の式が真偽値以外を返す

    JavaScript などにも似た仕様がありますが、リファレンスマニュアルの該当項目 には

    && 演算子について

    左辺を評価し、結果が偽であった場合はその値(つまり nil か false) を返します。左辺の評価結果が真であった場合には右辺を評価しその結果を返します。

    あるいは || 演算子について

    左辺を評価し、結果が真であった場合にはその値を返します。左辺の評価結果が偽であった場合には右辺を評価しその評価結果を返します。

    とあり

    nil && false && 1 && 0 # nil
    nil || false || 1 || 0 # 1

    のようになります。

    また、nil と false の評価は同じ偽であるのに

    nil || false = nil
    false || nil = false

    となり、これも直感的に理解すると記述を誤る可能性がある記法であるからやめるべきだと思いました。

    &&, ||, ! 演算子と and, or, not 演算子がある

    リファレンスマニュアルの該当項目 には

    and は同じ働きをする優先順位の低い演算子です。

    あるいは

    or は同じ働きをする優先順位の低い演算子です。

    などとあります。なぜ同じ役割を持つ論理演算子が異なる優先順位で複数存在しているのかが理解できません。

    not 演算子に至っては、! 演算子と全く同じです。
    明らかに混ぜて使うと混乱するため、どちらかだけで良いのではないでしょうか。

    独特な命名慣習

    自らのオブジェクトや引数に取ったオブジェクトに破壊的な影響を及ぼすなど、「呼び出しに注意を要する」関数には f! などと末尾に感嘆符を付して命名するといものの、
    「呼び出しに注意を要する」というのが具体的にどのような基準であるのか明文化されていません。

    また、真偽値を返す関数には f? などと末尾に疑問符を付して命名するそうです。これは明解ではありますが、なぜ真偽値を返す関数だけ特別扱いなのでしょうか。

    総括

    以上に述べた点は、私の主観にはしっくりこないものでした。
    そのような記法を忌避すれば良いのではないかという意見があるかと思いますが、どうも Ruby のプログラマは私が違和感を感じる記法であっても積極的に用いるようです。
    ソフトウェアの開発は必ずしも一人で行うものではないため、私一人が特定の記法を忌避するというのは難しいです。

  • Hello world!

    私は、日本の東京都で主にコンピュータエンジニアとして活動する soltia48 (ソルティアよんはち) といいます。

    これまで、個人としてブログを書いたことはありませんが、独り言をつぶやいていた Twitter のサービスの提供が不安定になってきた等のきっかけがあって、このような場を作りました。

    このブログは至ってくだけた性質のもので、基本的に筆者個人に帰属します。

    よろしくお願いします。