Sound Level Meter

image101230_01

波形のパワーレベルを16区分に分けて、サウンドのレベルメーターを作成する例です。1つの波形からいくつかの条件を設定して条件によって制御を変える方法にも応用することができます。

image101230_02

このサンプルではサウンドのパワーレベルを取り込み、0~255の整数に抽象化した波形に対して、0~255を16区分したレンジに該当する/しないを判断する仕組みを作成しました。

image101230_03

まず、入力されたサウンド波形に対して、Analyze CHOPでRMS Powerを算出します。Analyzeされた波形はMath CHOPで0~255のレンジに変換、四捨五入(Round)で整数値化されます。

image101230_04

Expression CHOPをレベルの区分ごとに設定します。Expression CHOPではさまざまな関数制御を行うことができますが、今回はif文を使用します。該当したレンジ内に入力がある場合、そのオペレータからの出力が0から1に変わります。入力は整数値で区分はかぶらないように設定されているため、16個のExpression CHOPは常にどこか1つだけが1に、それ以外は0になるように挙動します。16個のif文の結果はMerge CHOPで1つに統合されます。

image101230_05

まとめたられたチャンネルはFan CHOPによって、どの区分が該当したのか、検出されます。Fan CHOPのFan Inオペレーションは、複数のチャンネルが存在する入力から結果が1のチャンネルのインデックスを出力します。例えば、今回の場合、0~15のインデックスを持つ16チャンネルの入力で、サウンドのパワーレベルが最低(0~15)の場合、出力されるインデックスが0になります。サウンドのパワーレベルが最大(239~255)の場合は15になります。検出されたインデックスに対して、Math CHOPで1加算したもの(サウンドのパワーレベルに対応して、1~16の整数値で変化するチャンネルアニメーション)がExportされています。

image101230_06

今回はCopy SOPでボックスをコピーする数にチャンネルをExportしています。サウンドのパワーレベルが最低(Export値:1)の場合はBoxジオメトリが1個、サウンドのパワーレベルが最大(Export値:16)の場合はBoxジオメトリが16個コピーされます。Translate Yパラメータで移動値が追加されているので、サウンドのパワーの変化に対応して、ボックスが上下に増加、減少したように変化します。

Download Touch File

Sound Level Meter」への1件のフィードバック

  1. 初めまして。
    最近touchに興味を持っていろいろやってみているのですが、
    普通にプログラムを組むのとどうも勝手が違い
    「○○したい」をなかなか結果に持って行けず苦労しております。。。
    日本語の解説も少ない中nakakuboさんの解説は非常に助かっております。
    作成されたサンプルファイルも是非参考にしたいのですが、、
    再アップはご予定はありませんでしょうか。。。。

    それと、、、これはここでお伺いすることではないとは思うのですが、
    よくプロジェクションマッピングなどの表現にある、
    ボックスなどの縁の沿って線が流れるような表現をやりたくて
    方法を探しているのですが、よい方法が見つかりません。。。
    もしそういったもののヒントや解説したドキュメントをご存じでは
    有りませんでしょうか。。。

コメントは停止中です。