RSS Twitter Facebook
DTM / シンセサイザー / VST / WebMusic 関係の技術情報を発信しています

Products : ユーロラックモジュラー「RedLine」販売中

ユーロラック・モジュラーシンセサイザー「RedLine」を販売開始しました!

ユーロラック「RedLine」



2017/08/13 (2017年08月 のアーカイブ)

MIDI=>DMX変換:Webアプリから照明を制御する

Twitter Google+ Facebook
ステージ用の照明機材はDMXという規格に対応したものが多く、専用の制御卓からコントロールできたりするのですが、これをWebアプリからやりたいな、と言う事でちょっと試してみました。

なお同様の試みは@toyoshimさんなんかも既にがっつりと基板から作っているので特に目新しいというものでもないのですが、工作が面倒だったので、ありものの組み合わせでなんとかしようという戦略です。

参考 : とよしま語録:照明機材を身近に

DMX?

DMXというのは電気的にはただのEIA485のシリアル通信で、これを使って512チャンネルに対して8ビット、0-255の値を順次送信するという非常に単純なプロトコルです。

各照明機材にはINとOUTの2つのDMXコネクタがありますので、制御卓等のマスターから順次デイジーチェーン接続してゆきます。各照明機材は例えば色の制御や光の方向の制御等、自分が使いたいだけの複数のチャンネルを使用して制御信号を受け取りますが、1本のケーブル上の機材がそれぞれどのチャンネルを使うかはユーザーの責任で各照明を設定する事になります。



MIDI=>DMX

PCをマスターにするためのDMXのインターフェイスですが、単なるUSBシリアル=>DMXへのインターフェース製品ならかなり出回っているようで、ネイティブアプリから使うならこれでも良いのですが、Webアプリから簡単に動かすには Web MIDI APIが使える MIDI => DMX の変換が欲しい所です。

という事で今回は Arduino で一度USB-MIDIを受けてDMXに変換するという方法で行きます。MIDI側は@morecat_labさんのmocoLUFAを入れてArduinoをUSB-MIDIデバイス化し、DMX側はTinkerKitからArduino用のDMXマスターシールドというのが販売されていますのでそのまま使用します。

MIDIからDMXに変換するには、MIDIのどのメッセージに対応させるかを決める必要があります。制御を自分で書くならどういう割り当てでも構わないのですが、今回は単純にコントロールチェンジのコントロール番号と値をDMXのチャンネルと値に割り当て、MIDIのコントロールチェンジの値は7ビットなので1ビットシフトして8ビットの値として使用します。これだと制御が微妙に粗くなるしコントロール番号の範囲も0~119でDMXの512チャンネル全てを制御できませんので、もう少し細工をしても良いのですが、まあ取りあえず単純に。

必要なもの(ハードウェア):
Arduino UNO R3これで MIDI メッセージから DMX への変換処理を行います。
DMX Master Shield TinkerKit の DMXインターフェイスシールドです
DMX対応照明機器 Amazon等で探すと数千円の非常に安価なものからあります。
ただし安いものはトラブルも多いようですのでそこは自己責任で
DMXケーブル DMX機器を接続するケーブルは規格上ではXLR 5ピンコネクタを使う事になっているのですが、どういうわけか現在出回っているDMX機器にはXLR 3ピンコネクタを使ったものが多くあります。
DMX Master Shieldは5ピンですので必要に応じて 5ピン-3ピン変換等が必要になります
MIDIコントローラ今回はスライダータイプのコントローラでDMXの各チャンネルを設定する感じにしましたが、これはWebApp次第です。


必要なもの(ソフトウェア):
Arduino IDEArduinoの開発環境です https://www.arduino.cc/en/main/software
DMXMaster LibraryDMX Master用ライブラリです https://github.com/TinkerKit/DmxMaster
mocoLUFAArduinoをUSB-MIDIデバイス化するライブラリです。これはArduinoのメインCPUではなくUSBシリアル部のコントローラの16u2に書き込む手順が必要でちょっと面倒ですが、ここのdualMOCOを使えば、Arduino本体のプログラムとUSB-MIDIでのテストを適宜切り替えながら進められます。
https://github.com/kuwatay/mocolufa

mocoLUFAの書き込みについてはこの辺りが参考になると思います。http://qiita.com/tadfmac/items/9136f47ae1eea99a4ef7
また、mocoLUFAの書き込みに際しては、https://dfu-programmer.github.io/やWindowsならhttp://www.atmel.com/ja/jp/tools/FLIP.aspxが必要になります
Arduino MIDI LibraryArduinoのメインCPU側の標準的なMIDIライブラリで、mocoLUFAでもこれを使用します http://playground.arduino.cc/Main/MIDILibrary


という事で全景はこんな感じになります。


構成を図にするとこうです。


Arduinoのスケッチはシンプルに、MIDIから受け取ったControlChangeの値を2倍してそのままDMXライブラリに渡すだけ。
#include <MIDI.h>
#include <DmxMaster.h>

MIDI_CREATE_DEFAULT_INSTANCE();

void setup() {
  MIDI.begin();
  MIDI.turnThruOff();
}

void loop() {
  if(MIDI.read()){
    int type = MIDI.getType();
    int d1=MIDI.getData1();
    int d2=MIDI.getData2()*2;
    if(type==midi::ControlChange && d1<120){
      DmxMaster.write(d1,d2);
    }
  }
}


また今回使ったWebAppはここにあります。 http://www.g200kg.com/demo/dmx/

できました

動作テスト中です
今回はWebAppで中継してMIDIコントローラから制御しましたが、Arduinoは普通にMIDIデバイスとして見えているので、例えばDAWでコントロールチェンジを送るようなシーケンスを組んでおけば、曲と連動して照明を動かすなんて事もできますね。


Posted by g200kg : 3:04 AM : PermaLink

2017/08/07 (2017年08月 のアーカイブ)

Maker Faire Tokyo 2017

Twitter Google+ Facebook

8月5日~6日に東京ビッグサイトでDIY系のビッグイベント、メイカーフェアが開催されました。ごく一部ですがMUSIC関係のエリアだけざっと回ってきました。

日時 : 2017年8月5日(土) 12:00〜19:00、6日(日) 10:00〜18:00
会場 : 東京ビッグサイト(東7・8ホール)

せんとれさんのブース。純粋なユーロラックシンセモジュールという形で出展しているのは少数派かも。
WOSKさん。ハンドスピナーでスクラッチプレイができるガジェット。時流に乗った新ネタの仕込みに抜かりはないようです。
これもWOSKさんで物理的なメトロノームからマスタークロックを出力するデバイス。DAWをメトロノームに同期させたりできます。これは面白い。
結構以前から謎楽器界では知名度があったSlapStickが日本上陸。「ヌードル」とも呼ばれるもので細長い鉄板を指で叩いてスラップベースっぽい音が出ます。会場での販売もしていたのですが心が揺れている間にSOLD OUTになってしまいました。
SlapStickオンステージ。ワウ系のエフェクトと相性が良いようです。かっけー。
パラレルキャスター。ギターなのだけど各弦のピックアップが独立していていわゆる「パラ出し」なので、弦毎に違うエフェクトを掛けたりできます。シールドが6本刺さっている見た目がなかなかファニー。取り回しが大変そうだけど。
@tadfmacさんの缶叩き機。今回は缶の数がいつもの2倍らしい。子供をひきよせる効果が高いのだよなこれ。
以前ネットでちらっと見た事があったのだけど実物を見る事ができました。個人が趣味でLSIを作るのはさすがにまだハードルが高いのだけど、複数の人が作りたいものを持ち寄って相乗りした1チップに収めるというアグレッシブな試みです。
そしてこれが試作されたチップを載せた基板。2umルールで、DSP処理とかではなくアナログ処理のエフェクトとの事です。
これはDigiLogさんのOCTAというシンセですが、基板を複数重ねて厚みを持った筐体を作っているという例。これは予想外。これなら複雑な立体構造も作れそうです。
GVSヘッドフォン。耳の後ろに電極を付けて電流を流すと、三半規管を刺激してフラフラした感覚が得られるらしいです。へー。
ヘッドフォンにこのGVSを仕込みVRシステムと連動させると没入感がヤバい事になるという試み。そういえばGoogleの偉い人が2030年代には仮想空間へのフルダイブが可能になるとか言ってたな、とかふと思いだしたり。
高エネルギー技術研究室さんのテスラコイルによる演奏。いいよね、テスラコイル。放電の生音はジージーいってる感じなのでピックアップで拾ってエフェクトかけたりしたくなる。
一方その頃ステージでは、米本さんとBBBの二人、「実ズ」のSYSTEM Yを使ったノイズ系ライブ。SYSTEM Yのブースは出していないのでステージのみの参加との事。

いやーメイカーフェアは会場が広くて暑いので体力削られる感じがあります。

MUSICエリアだけじゃなくて他にも面白そうなものはあるのだけど、とても全部は回りきれません。まあMUSICエリアに関してはシンセ系各種イベントなんかでお見掛けする人も多いのである意味世間は狭い。

Posted by g200kg : 3:13 AM : PermaLink

2017/07/20 (2017年07月 のアーカイブ)

黒板をひっかく音はシンセ的に合成できるのか?

Twitter Google+ Facebook

誰でも経験があると思うのだけど、黒板をひっかく音を聴いた時の背中がぞわぞわする感覚、何なんでしょうね?

一説には、とある種類の猿が危険を知らせる時の叫び声に近く、人間のDNAに刻まれた太古の記憶なんていう話もあるみたいですが、実際の所どういうメカニズムで起こっているのかは良くわかっていないようです。

2.5kHz-4.0kHz付近で起こるという分析もあるようですが、その辺の周波数の音はどこにでもありふれたものですし、単なる周波数成分的な要因ではないという事なんでしょうね。ただ、2.5kHz-4.0kHzというと人間の外耳道で共振によるピークが起きやすい周波数ではあり、ざっくり外耳道をl = 25mm~30mmとすると λ/4 共振の周波数は 340/(l*4) = 3.4kHz-2.8kHz くらいにピークが発生しますので思った以上に大きく聴こえる音ではあります。

不思議な事にあの音をサンプリングして持続音として再生してもいまいちあのぞわぞわ感が出ないんですよね。というか、録音して再生しているという状況を認識している時点であのぞわぞわ効果はかなり薄れている気がします。どういう事でしょうか? 音響的なレベルよりももう少し上のレイヤーで避けなくてはならない何かだと脳が認識しているという事でしょうか。

どうもランダムな感じで断続するというのが要因の1つではないかという気がします。それが猿の叫び声っぽいのかどうかは良くわかりませんが。という事で、敢えてあれっぽい音をアルゴリズミックに合成しようとしたのが下のリンクです。個人差もあると思いますが「ちょっとぞわっとする感じがするかな」という程度の出来で、まだ何かが足りないような気もします。

感じ方は個人差もあると思いますので苦手な人は気を付けてください。

黒板をひっかく音っぽい奴


Posted by g200kg : 2:30 PM : PermaLink

2017/07/17 (2017年07月 のアーカイブ)

WebAudio APIでの過大振幅信号処理の闇

Twitter Google+ Facebook
とある WebAudio を使ったアプリで思うような音が出ない現象があり、少し調べた所信号がレベルオーバーした時の挙動がブラウザによって違うのが原因のようです。

WebAudio API では通常、音声信号を -1.0 ~ +1.0 の範囲の値で扱います。これは単なる数値データですのでオーディオグラフの処理の途中段階ではどのような値になっても良いのですが、最終的に AudioContext の destination に接続する際には -1.0~+1.0 が 0dBFS つまりフルスイングの信号となります。

問題はこの範囲外のデータを生成してしまった時にその値がどう扱われるかなのですが、WebAudio API のスペックでは今の所規定されておらず実装依存になっています。実際にはクリップしてしまったり強制的に振幅を調整するなど、ブラウザや OS によって処理の仕方がバラバラで場合によってはまずい事になる可能性があります。

ざっとまとめたのが次の表です。

OS Browser Description
Windows Chrome 長い時定数でコンプレッションがかかり振幅が強制的に調整される
Firefox 短い時定数でコンプレッションがかかり振幅が強制的に調整される
Edge destinationに接続された時点で信号が -1.0 ~ +1.0 の範囲にクリップされる
Mac(内蔵スピーカー) Chrome そのままMacの音量調整を通して出力可能な範囲で出力される
Firefox そのままMacの音量調整を通して出力可能な範囲で出力される
Safari destinationに接続された時点で信号が -1.0 ~ +1.0 の範囲にクリップされる
Mac(USB-I/F) Chrome destinationに接続された時点で信号が -1.0 ~ +1.0 の範囲にクリップされる
Firefox destinationに接続された時点で信号が -1.0 ~ +1.0 の範囲にクリップされる
Safari destinationに接続された時点で信号が -1.0 ~ +1.0 の範囲にクリップされる

Edge と Safari の処理が素直と言えば素直なのですが、WebAudio API の処理グラフから destination に出力される時点で信号が範囲を超えているとハードクリップされ、歪みが発生します。アプリとしてはこの Edge、Safari で歪みが発生しないようにオーディオグラフ内で適切に信号の振幅を管理するのが本来の姿だと思います。

Mac での Chrome、Firefox の場合は、内蔵スピーカーか USB 接続オーディオI/Fかによって挙動が異なるようです。USB 接続のオーディオI/Fの場合は Safari や Windows の Edge 同様に destination に接続された出力が -1.0~+1.0 の範囲にクリッピングされ、それ以上の振幅の信号は歪みが発生します。しかしどういうわけか内蔵スピーカーを選択している場合はクリッピングされず、信号の振幅が大きくてもそれに合わせて Mac のボリュームを下げていると歪みが発生しません。もちろんこの状態で Mac のボリュームを上げていくと歪みが発生しますが、これはアナログ回路的な出力振幅の限界のようです。

Windows の Chrome および Firefox の場合はまた少し違った挙動があります。出力信号が範囲を超えている場合は自動的にコンプレッションがかかり、ピークがクリップしないように自動的に調整されるようです。Windows でだけ起こる現象のため、OS 側のカーネルミキサー等が関わっているのかも知れませんが、Chrome と Firefox では過大信号がなくなった後の復帰時間、いわゆるコンプレッサーのリリースタイムが明らかに異なるので、どこでこの処理が行われているのかは良くわかりません。

と言う事で、とにかく気を付けないといけないのは、Windows で Chrome / Firefox を使っている場合、また Mac で内蔵スピーカーを使っている場合には、信号の振幅が -1.0 ~ +1.0 を超えていても歪まないので気が付かない可能性があるという事です。いい感じに鳴っていると思ってもブラウザや再生環境が変わるとバリバリに歪んでいるという事が起こるかも知れません。

割とやりがちなのが下の図のように複数のオシレータを並列に繋いでしまった時のピークの最大値をちゃんと考えていない、とかですね。そもそもオシレータの出力は -1.0~+1.0 のフルスイング信号で、並列接続した場合には単純に加算されますので、ワーストケースではピークが重なるとオシレータの数だけ出力ピークが上昇します。

なお、ポリフォニックシンセのような同時発音数が多い音を扱う場合は全てのサウンドソースのピークが重なるようなワーストケースを考えると1音あたりの音量が取れなくなってしまいますのである程度のヘッドルームを作りつつワーストケースではソフトサチュレーションさせたり、ゲーム系の音処理のような場合には明示的に DynamicsCompressor を使ってピークを抑えたりするのが一般的かと思います。

Posted by g200kg : 3:51 AM : PermaLink

2017/07/13 (2017年07月 のアーカイブ)

RedLine SUSHI

Twitter Google+ Facebook

DSP搭載のユーロラックモジュール「RedLine SUSHI」を高円寺の前衛派珈琲処マッチングモヲル様で取り扱い開始しました。

  • Glitch Oscillator
  • Osc+Lpf
  • Vocoder
  • Chrus/Flanger+Delay
の4種類の顔を持つマルチファンクションモジュールです。デモ機もありますので是非どうぞ。

仕様詳細はこちら


Posted by g200kg : 3:47 AM : PermaLink

2017/07/05 (2017年07月 のアーカイブ)

たかがピンヘッダー...

Twitter Google+ Facebook

同じ2.54mmピッチのものなら何を使っても変わらんだろ...と思いきや
入らねえ...

やっちまったなぁ。

ちなみに2.54mmピッチピンヘッダーのコンタクト部分は0.64mm角で規格化されていて同じようなピンヘッダーに見えますが、基板側に出ている足の部分はメーカーによって微妙に違いがあります。

ヒロセのボックスヘッダーは基板側に出ている部分は0.5mm角なので対角0.707mm、基板の推奨穴径はφ0.8。
秋月なんかでよく売ってるヘッダーだと基板側も0.64mm角のままで対角0.905mm、推奨穴径はφ1.02。
JSTなんかは精度に自信があるのか0.64mm角ですが推奨穴径はφ0.9だったりします。

推奨サイズだと余裕を見て結構ゆるゆるなので、差し込んだだけでは固定されずに裏返すと落ちてくるのですが、ギリギリの所を狙うと差し込んだだけで結構かっちりはまって作業性がとても良いので狙いすぎたというのもあるんですが、こんな事で余計な仕事が増える。

Posted by g200kg : 12:22 AM : PermaLink

2017/06/29 (2017年06月 のアーカイブ)

NPD NGD NBD NAD NSD NDD

Twitter Google+ Facebook

最近ギターエフェクター系の海外コミュニティなんかを覗くようになったのですが、NPDとかNGDとか言う謎の略語が頻出していて何のことやらわからなかったのですが、ようやく判明しました。

「New Pedal Day」、「New Guitar Day」、なるほど!!

この N*D という言い回しには幾つか種類があるのですがすべて「New *** Day」の略で「新しい楽器を手に入れたぜ!!」という報告で使われるようです。

そう言えばTwitterでは新しい楽器(楽器以外の場合もある)を手に入れた時には「New Gear!!」というのが流行りだったと思うのですが、ギターコミュニティにはギターコミュニティの文化があるのかなあ、とかw

NPD ... New Pedal Day 「新しいペダル(エフェクター)を手に入れたぜ!」頻出する
NGD ... New Guitar Day「新しいギターを手に入れたぜ!」頻出する
NBD ... New Bass Day 「新しいベースを手に入れたぜ!」ギター程ではないけど時々見る
NAD ... New Amp Day 「新しいアンプを手に入れたぜ!」時々見る
NSD ... New Synth Day 「新しいシンセを手に入れたぜ!」あまり使われない
NDD ... New Drum Day 「新しいドラムを手に入れたぜ!」あまり使われない

なお、NSD NDD については使われないことはないのですが多分あまり通じないと思います。大抵「NSD(New Synth Day)」みたいに注釈付きだったりします(それでようやくあーそういう事か、と理解したのですが)。


Posted by g200kg : 12:15 PM : PermaLink

2017/06/26 (2017年06月 のアーカイブ)

やたら変数の多い連立一次不等式を解きたい

Twitter Google+ Facebook

「太郎君は、1000円持ってりんごを3個とみかんを2個買ってきました。
りんごとみかんを3個ずつ買いたかったのですが1000円では足りませんでした。
みかん6個なら1000円で買えたのに。」

こんな奴。ただし、変数が200個ほどある。こういうのが得意なのはMathematicaだっけ? とか思いつつ取りあえず使えそうなMaximaとかWolframAlphaなんかを試しつつ、ちょっと求めてるものとは違うので、手作業で地道に進めていい感じに収束してきたかと思った所で解が存在しなくなるという致命的な間違いに気づいた。どうやらどこかで計算間違いをしてエラーが混入してそれが伝播したらしく、日曜日の半分くらいを費やしたデータがゴミクズと化した。

これはやはり人間が手作業でやるべき事ではなかった...と更に半日ほど反省しつつ、この問題を解くためだけのプログラムを書く。一般的に使えるように実装すると大変な事になるのはわかっているので、式の形式を固定して

x + 2*y + 3*z ... > 0

みたいな奴だけ。左辺は 数値 * 変数の積算、不等号は > または < のどちらかで右辺は定数。これをバカバカと逐次で入れていって変数の取り得る値を収束させるという感じのもの。



何でこんな事を、と言うとマルチエフェクターの各エフェクトのDSP消費量の見積もりなのだけどな。相当脱線している。
「OrangeLimとSweetDriveを入れたらもうShimmerReverbはDSPがフル状態で入んないや」
とか
「SeeetDriveをGreatMuffに変えたら入るな」
みたいな事態が頻発するので、それぞれの正確なDSP消費状況を把握しようとしてこのざまです。


多分真面目に実装すれば、何か使い道があるソフトになるかも知れないけど、とりあえずいいや。
http://www.g200kg.com/demo/inequalitysolver/

Posted by g200kg : 9:23 PM : PermaLink

2017/06/21 (2017年06月 のアーカイブ)

ZOOM パッチエディタが MSシリーズ3機種に対応

Twitter Google+ Facebook

思いのほか手こずったのだけど、ZOOM MS用のパッチエディタが MS-60Bにも対応し、これで MS-50G / MS-60B / MS-70CDR の3機種対応になりました。

MS-50G と MS-70CDR は実はデータの形式がほとんど同じで多分も 60B も似たようなものだろうと思っていたのですが、50G と 70CDR は同時使用エフェクト数が6なのに対して 60B は4、これに起因してデータフォーマットが少し違います。

詳細はここに書いてあります : https://github.com/g200kg/zoom-ms-utility/blob/master/midimessage.md

なぜわざわざ変えたのかはいまいちわかりません。エフェクト数が4なのはDSP能力とかに違いがあるのか? とも思ったがそうでもなく、他の機種にも入っている同じエフェクトを処理できる数で比較しても同じようです。ベース用だから4つもあれば良いだろ、的な?

後少し気になる所は
* 古いバージョンのファームでもちゃんと動くか未検証、本体をアップデートすると戻せないのだよ
* オートセーブ周りの挙動が本体とリンクしない。このあたりの状態が取れるかはまだ不明
* 新しいエフェクトは重い奴が多くて「DSPフル」になりやすいのでこのあたりを定量的に表示できんかな

Zoom MS-50G / MS-60B / MS-70CDR Patch Editor

Posted by g200kg : 11:16 PM : PermaLink

2017/06/15 (2017年06月 のアーカイブ)

ZOOM MS-50G/70CDR パッチエディタ

Twitter Google+ Facebook

ちょっと何やってんだかという気もしなくはないのですが、ZOOM用パッチエディタが、ついにMS-50GだけじゃなくてMS-70CDRにも対応しました。
最新版にファームをアップデートすると両者のエフェクトにかなりの重複が出てきますので、どちらにも入っているエフェクトに関しては、パッチをファイルに落としてから他方に読み込めば、両者の間でパッチを交換する事も可能です。

後はどこかにMS-60Bは落ちてないかな...

https://g200kg.github.io/zoom-ms-utility/

Posted by g200kg : 4:29 PM : PermaLink

2017/06/14 (2017年06月 のアーカイブ)

WebAudioAPI初心者向けハンズオン#2

Twitter Google+ Facebook

先週日曜日 6月11日にWebAudioAPI初心者向けハンズオン#2が開催されました。昨年11月に開催された第一回と同じくプログラムを打ち込んで音を出しつつちょっとした加工をするあたりまでの内容をテキストに従って進める形式です。

Web Audio API 初心者向けハンズオン #2

主催はWebAudio.tokyoとかWebMusicDevelopersJPとかxsoundsjsとかWebAudioAPI関係でごにょごにょやってる人たちが適当に集まった感じです。会場は渋谷ヒカリエ17Fのイケてるオフィスをレバレジーズ様が提供してくださっています。

という事で私もメンター兼デモ担当をやってきましたが、当日のデモを録画してくれていましたので貼っておきます。WebAudio API、Web Speech Synthesis API、WebGL + Shader program、WebMIDI APIでエフェクターを制御という思いつくものをごった煮にして使っています。このプログラムは、いつも増築したりしながらドキュメントがまるで整備されていないので役に立たないかも知れませんが一応GitHub上に置いてあります。

https://github.com/g200kg/LiveBeats

なおテキストは@ryoyakawaiさんがまとめたものが公開されていますので、ハンズオンに参加できなくても、初めてWebAudio APIを触ってみるにはちょうど良い教材になると思います。

https://webmusicdevelopers.appspot.com/codelabs/webaudio/index.html

Posted by g200kg : 3:30 PM : PermaLink

g200kg