[ Jpn | Eng ]

Main Menu



Recent

最近の記事

Search

サイト内検索:

Archive

Powered by
MTOS 5.2.2


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

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

ユーロラック「RedLine」



2016/05/23

Ableton Live 用コントローラ 「Yeco」

Twitter Google+ Facebook

アイルランドのYecoから発表されたタッチパネル式のAbleton Live用コントローラです。

Ableton Live 用という事なので欲しいというわけではないのだけど、このデモビデオの頭の方にあるキーボードを押した時のY座標をパラメータ化しているのがちょっと面白そうです。こういうのって今まであったかなぁ。まあタッチパネルだからできる事で、普通のキーボードのアフタータッチの代替と言ってしまえばそれまでかもしれませんが。

お値段は45ユーロ。

http://yeco.io/

Posted by g200kg : 3:14 PM : PermaLink

2016/05/22

Vivaldiなんていうブラウザができてたんだね

Twitter Google+ Facebook

そういえばOperaもPrestoの開発を止めてしまったあたりからとんと名前を聞かなくなっているのですが、Opera創業者のテッツナー氏が同社を去った後新たに作ったVivaldiというブラウザがあるそうで。4月にバージョン1.0になっていたようです。

Chromiumベースという事なのでWeb Audio API含めてレンダリングの機能的にはChromeとほぼ同じ状態のようです。何より便利と思ったのが複数のタブをまとめてグループ化できるところ。タブを開きすぎてどれが何のタブだかわからなくなりがちな人向きですね。それから一度閉じてしまったタブをゴミ箱アイコンから再度開く事ができるという点。これは他のブラウザでも付けて欲しいなあ。時々あるんですよね、間違って閉じてしまって後悔したり...。

という事でこれは結構いいかなと思ったのですが、Javascriptでプログラムを書いているとなぜかBackSpaceとかのキーボードイベントが(stopPropagation()しようがpreventDefault()しようが)システムに持って行かれてしまってフックできない。Ace Editorなんかではちゃんとハンドリングできているのでやり方があるとは思うのだけど微妙な所は結構違いがあるのかも知れないなあ。

https://vivaldi.com/


Posted by g200kg : 11:10 PM : PermaLink

2016/05/18

Interop(Apps Japan)にWeb Music Developers JPが出展します

Twitter Google+ Facebook

2016年 6月8日(水)~10日(金)の3日間、幕張メッセで国内最大級のネットワーク関連の展示会、Interop 2016が開催されますが、そこで併催される Apps Japan(アプリジャパン)のW3Cブース内にWeb Music Developers JPのコーナーを作っていただける事になりました。

Interopにご来場の方はぜひお立ち寄りください。

Interop Apps Japan

Posted by g200kg : 3:07 PM : PermaLink

2016/05/13

Chrome:Web Audio APIのオートメーションの問題

Twitter Google+ Facebook
今まで色々と Web Audio 関係のアプリを作ってきて、時々「あれ、おかしいなー」と思いつつずっと放置していた問題があったのですが一応原因らしきものにたどり着きました。症状としては Chrome で Web Audio アプリを長時間動作させるといつの間にか動作がおかしい / 止まっていたりすると言う感じになります。アプリの作りやマシンパワーで変わりますが、普通に音楽を鳴らすようなアプリだと起動してから1時間ほど経ってから症状が出たりしますのでなかなか因果関係が掴めませんでした。

これはノードの各種パラメータを設定する AudioParam を時間軸で操作する setValueAtTime() 等のオートメーションメソッドを使うと徐々に全体の動作が重くなって行くのが原因です。

このあたりのBlinkのソースを読んだ事があるという@mohayonaoさんの話によれば、使い終わったオートメーションイベントが破棄されずに毎回新規イベントの挿入場所を効率の悪い探し方をしているそうなのでそのせいでしょう。

という事でテストプログラム :
var actx=new AudioContext();
var osc=actx.createOscillator();
var gain=actx.createGain();
gain.gain.value=0;
osc.connect(gain);
gain.connect(actx.destination);
osc.start(0);

function Trigger(){
  var t=actx.currentTime;
  gain.gain.setValueAtTime(0,t+0.1);
  gain.gain.setValueAtTime(1,t+0.101);
  gain.gain.setValueAtTime(0,t+0.102);
  gain.gain.setValueAtTime(1,t+0.103);
  gain.gain.setValueAtTime(0,t+0.104);
}
setInterval(Trigger,50);
極端な例ですが毎秒100発のオートメーションを発行して Chrome DevTools でプロファイルを見てみました。 setValueAtTime()がどんどん遅くなってますね。ヒープも少しずつ増えているようなのですがオートメーションイベント自体は小さいものなので、それほど目立つヒープの肥大がないというのも発見しにくい所です。

という事でとりあえず今、これを回避するには
  1. オートメーションメソッドを使わない
  2. 使ったオートメーションを時々消してやる
  3. オートメーションを使う頻度と必要な連続稼働時間の兼ね合いで見なかった事にする
というような手法が必要になります。今までの Web Audio の実情って結構 3. だったかも知れません。1. は代わりに.valueへの直接代入で自前で制御する必要があり、せっかくの高精度時間制御が使えない事になります。2. は消すメソッドが指定時刻以降を消す cancelScheduledValues()しかないため、毎回全消しして登録済みの未実行オートメーションを再登録する必要があります。どっちも面倒ですね。

まだ不完全なものですが一応 2. の方向で多少楽になる関数を作りました。Polyfill的にするのはまた面倒なのであまり変更を必要としない簡単なHelper的なもので。まだ足りないメソッドもあります。
function Automation(ctx,param,v,t){
	this.param = param;
	this.cmdbuf = [];
	this.Cancel = function(){
		while(this.cmdbuf.length && ctx.currentTime > this.cmdbuf[0][2])
			this.cmdbuf.shift();
	};
	this.Reque = function(){
		this.param.cancelScheduledValues(0);
		for(var i = 0,l = this.cmdbuf.length; i < l; ++i){
			var buf = this.cmdbuf[i];
			switch(buf[0]){
			case 0:
				this.param.setValueAtTime(buf[1],buf[2]);
				break;
			case 1:
				this.param.linearRampToValueAtTime(buf[1],buf[2]);
				break;
			case 2:
				this.param.exponentialRampToValueAtTime(buf[1],buf[2]);
				break;
			case 3:
				this.param.setTargetAtTime(buf[1],buf[2],buf[3]);
				break;
			}
		}
	};
	this.cancelScheduledValues = function(t){
		this.param.cancelScheduledValues(t);
	};
	this.setValueAtTime = function(v,t){
		this.Cancel();
		this.cmdbuf.push([0,v,t]);
		this.Reque();
	};
	this.linearRampToValueAtTime = function(v,t){
		this.Cancel();
		this.cmdbuf.push([1,v,t]);
		this.Reque();
	};
	this.exponentialRampToValueAtTime = function(v,t){
		this.Cancel();
		this.cmdbuf.push([2,v,t]);
		this.Reque();
	};
	this.setTargetAtTime = function(v,t,c){
		this.Cancel();
		this.cmdbuf.push([3,v,t,c]);
		this.Reque();
	};
}
使い方としてはオートメーションを使いたい AudioParam に対して、
  var oscfreq = new Automation(audiocontext, osc.frequency);
のように Automation のオブジェクトを作り、そのオブジェクトに対して
  oscfreq.setValueAtTime(440,t);
という風にオートメーションメソッドを発行します。さっきのテストプログラムの場合だと次のようになります。
var actx=new AudioContext();
var osc=actx.createOscillator();
var gain=actx.createGain();
var gaingain=new Automation(actx,gain.gain);
gain.gain.value=0;
osc.connect(gain);
gain.connect(actx.destination);
osc.start(0);

function Trigger(){
  var t=actx.currentTime;
  gaingain.setValueAtTime(0,t+0.1);
  gaingain.setValueAtTime(1,t+0.101);
  gaingain.setValueAtTime(0,t+0.102);
  gaingain.setValueAtTime(1,t+0.103);
  gaingain.setValueAtTime(0,t+0.104);
}
setInterval(Trigger,50);
境界条件とかちゃんと検証してませんし多少残念感が残る応急措置ですが一応これで長時間連続稼働が可能になりました。その内誰かがもっとちゃんとしたものを作ってくれるかも知れません。
また、これそのものではないですが関連するバグレポートは既にChrominumのBugTrackerに既にあがっているようで、それが直れば一緒に解消されそうです。早く対処されると良いですね。

Posted by g200kg : 12:18 PM : PermaLink

2016/05/11

WebGL(GLSL)によるWebCamエフェクト

Twitter Google+ Facebook

パフォーマンスツール「LiveBeats」用にWebカメラの画像にかけるエフェクトを幾つかシェーダー(GLSL)で書いています。古いフィルムっぽくなる奴とか昔のTVの同期が外れる感じの奴とかがお気に入りです。

シェーダープログラムってちょっととっつきにくいけど、パズル的面白さがありますねー。何ができて何ができないのか普通にC++やらJSやらで書いている時と頭を切り替えないといけないのでリフレッシュに良いですよ。

LiveBeats自体は音を含めたパフォーマンスツールぽいものなので簡単にはちょっと扱いにくいのですが、WebCamエフェクトの部分だけを抜き出したテストプログラムもありますのでどうぞ。Chrome or Firefoxで、カメラ付きのPCじゃないと動作しません。また起動時にカメラの使用を求めるダイアログが出ますので許可してください。ちなみにエフェクト関係のGLSLのソースはhttps://github.com/g200kg/LiveBeats/のvj_camgl.jsのあたりです。周りのモジュールと繋がってしまっている部分があるので読みにくいですが。

https://g200kg.github.io/LiveBeats/camtest.html

Posted by g200kg : 10:04 AM : PermaLink

2016/05/06

「こどもの領分、おとなの差分」@アルキメデスの螺旋

Twitter Google+ Facebook

さて5月5日は高円寺・前衛派珈琲処マッチングモヲル向いの「アルキメデスの螺旋」で開かれたライブイベントに参加してきました。左がセッティング時の様子です。右が私が今回持ち込んだ機材でRedLineモジュラー + PCのLiveBeatsの組み合わせです。


やはりメインはユーロラックのモジュラーシンセですが、モジュラーシステムも皆さんそれぞれ特色があって面白いです。機材はデリケートだし荷物は多いしで移動をどうするかは共通の悩みの種だと思いますが、このあたりさすがに綺麗にまとまってる感があります。


ユーロラック以外でもototoを駆使したり、テープエコーを使ったり。この辺の小道具をどう使うかはひとつのポイントですね。


そして今回はやはりモジュラーではない(さらに言えば電子楽器でもない)もののインパクトがかなりのものです。

そのひとつがこれ、ルイージ・ルッソロが作ったという騒音楽器、「イントナルモーリ」です。当時の現物はすでに消失しており、これは図面を基に再現した(と言ってもそれも数十年前)ものらしいです。残念ながら調整の問題で完全な動作はしないようですが、内部をじっくり観察できました。左のラッパ部分に張ってある膜から弦が伸びており、右にあるハンドルを回すとギアが弦を擦って音がでる仕組みです。上部のレバーで弦の途中の駒の位置がスライドしてピッチが変わります。なんとなくハーディガーディっぽかったりクイーカっぽかったりします。

そしてもうひとつ、「おきあがり赤ちゃん」。確かにこういう人形があったなとは思うのだけど、これをライブで演奏するという発想に至るとはね。ビジュアル面のインパクトもそうですがこれ確かに良い音します。演奏スタイルは右のような感じになります。ちなみに一番右の人形は傾けたターンテーブルに乗せられていて勝手に音が出ます。

と言うことで、イベントには「電子楽器」的な副題がついてはいましたがアコースティック勢はまたちょっと違った存在感がありますね。

Posted by g200kg : 12:41 AM : PermaLink

2016/04/26

ChromeでのMovableTypeのテキストエリア折り返し修正

Twitter Google+ Facebook

3月頃にChromeが49になって以降だと思うのだけど、CSSの"white-space: pre"でのテキストの折り返しの挙動が微妙に変わったようです。まあ大した違いではないのかも知れないけど、残念ながら今使っている Movable Type だとエントリーの入力画面で明示的に改行を入れるまで文章が勝手に折り返してくれず、どんどん右にスクロールして行きます。

これが実に使いづらい...

なお、ちゃんと確認していませんがFirefoxでも同様の症状が以前から出ていたかもしれません。今までChromeでは大丈夫だったのですが、今回ChromeがFirefoxと同じになったという事かと。

MT6についてはパッチが出ているようなのですが、
http://www.sixapart.jp/movabletype/news/2016/03/11-1520.html
MT5系はサポートされないようです。MTOSも5.2.13が最終なので対象外ですね。という事で取りあえずなんとかしようと強引に修正してみました。

mt-static -> plugins -> TinyMCE -> lib -> js -> adapter.js

の163行あたりにあるadapter.$editorTextareaに対するcssの設定に変更を加えます。

        adapter.$editorTextarea = $('#' + adapter.id).css({
            width: '100%',
            background: 'white',
            'white-space': 'pre',
            resize: 'none'
        });
を次に変更:
        adapter.$editorTextarea = $('#' + adapter.id).css({
            width: '100%',
            background: 'white',
            'white-space': 'pre-wrap',
            resize: 'none'
        });

一応これでなおりました。

最小限の修正としてはこんな所かと思います。
※なお、確認していませんが、この問題を対策するための5.x向けのプラグインも存在するようです。

まあ、MTOSは今後の展開もなさそうなので将来を考えるとMT6に行くかごっそり入れ替えてWordPressに行くかという根本的な措置が必要かも知れませんが (いやー今までのエントリーのパーマリンクの事を考えるとごっそり動かすのがねー)

Posted by g200kg : 4:46 AM : PermaLink

2016/04/17

MIDI仕様書の公開

Twitter Google+ Facebook

今更という感じもあるのですが、MIDIの仕様をまとめたドキュメントが、 仕様を策定しているMMA (www.midi.org) のサイトで最近正式に一般公開されたようです。

https://www.midi.org/specifications/item/the-midi-1-0-specification


今までも断片的な情報はネット上のあちこちにあってちょっと調べれば大体の事はわかる状態ではあったのですが、 正式なドキュメントが公開されているわけではありませんでした。 最初の策定から既に30年以上経っていますけど、 誰でも仕様の原本に当たれるようになった事は喜ばしい事ですね。 去年あたりからMMAのサイトが大幅な改修が行われていて、 いつ一般公開状態になったのか良くわからないのですが...。

とはいえ、その仕様の原本自体が相当な年月をかけて修正/増築を重ねてきていますので、 なかなかわかりにくい構成になっています。

MIDI関連の規格は、
https://www.midi.org/specifications
のページに大見出しがあり、この中で、
THE MIDI 1.0 SPECIFICATION (https://www.midi.org/specifications/item/the-midi-1-0-specification)
のページの一番下のダウンロードのリンク「DOWNLOAD THE COMPLETE MIDI 1.0 DETAILED SPECIFICATION DOCUMENT」 が指すPDFが本体のドキュメントになります。 MIDI規格は本体のプロトコルの規格だけでなく、スタンダードMIDIファイルの規格やジェネラルMIDIの規格 等それぞれ独立した仕様書があるのですが、このPDFはMIDIを使って何かをしたい場合に必要そうな ドキュメントを取りあえず繋ぎ合わせたような状態になっています。 というような内容の独立した文書が単純に繋ぎ合わされています。

またそれほど一般的ではないダウンローダブルサウンド(DLS)等はこのPDFには含まれていませんが、 大見出しのページから別のリンクがあり、別途ダウンロード可能です。

Posted by g200kg : 9:56 PM : PermaLink

g200kg