正確なメトロノーム #max7

揺れの少ない正確なメトロノームをつくりたい〜

スクリーンショット 2016-08-22 1.24.24

Maxの標準のmetroは精度が悪いと言われております。計測したわけでは無いですが16部音符で再生すると結構気になるくらいグルーヴ感があるようです。より正確なメトロノームを生成するにはMSPを使うのが良いとの事で以前某楽器メーカーの方に教わった方法を実装してみました。

サンプル


----------begin_max5_patcher----------
746.3ocyWkjaaCCEcs7oPfqcBDE0XAZuHEEAzRzNL0hxkjx0NAw.EdSW0yPG
1UfbAJxsQ.sWiJRY033JWKKGolMhfeyg26y2ev2Lv.LJcAQ.Leg4qMMLtYfg
g1jxfwl4FfD7hnoXgdY.F48oitBLr7mjjERsYbrPhkYBSI9sjz4Dd0JXYIoY
xoDod61arNCKitjxlbAmDIKudD7bqglNt5AnkqZv19bKy2rYOkGib4LR4F.f
gl.JqX6UqfFqwRA9Nyaq6mx185ExkS0mB.nLb6fApOCOMWvzTbbBQHLg0yc3
g3NJHTM3a2.pWGmgN0RZ3SBokoSlTr81wLGXflSNUe+C7mg43DhjvufvviJw
m09X89drgnNj3GRvqD6wb5bxQq3gtVORxGdZRd+NTxGkljPJt2c8B+7tu8qu
9i7O7870eIe8GyWeW95Oku9970etd2g09cG1taoQJCEPnsbFiSYxw3Hx1OsJ
aB50Za5c9WdE2NTZPtNFGs5nIJzBo4XXP4ye02Zk1+Oyi4wN53cHzWQm.cNr
.2VlIyo+imO4r2kTt0Iu8r6eN+pWtxz57VxWaWzCx2+MgEzIL7zZoMJr+E3m
oXsaaossNosG5zncP+SaR7DxpV1V1l7wNNGl0ivrIpxT5wZ4t+y01Tf1gcYa
JHu9ODe1kXQJeUqxkuwo3qE79gmlf2oCE7ixjxz1xOjMZOO50KsqsJcXG9xh
kRdFs5BTyzlGyIuKivhVdz7N.ssX2psUrZSS25yALkx18Ocpgox9icDhzLdT
EJpZ027AjFSDRJCKoEO+OrHuGslKowwD11QrwTgJHVSEqZeQdRgie+AGmF.m
cvbWhGTSvipVXegml.Gm9CNdOyvieSjOg8GdBZh+oGwSXSvS+Et2nnqdCMp+
AyggSayMWV4.Oa1bBWr4L0PonX4Uo5Rh9C0Sorxo5dK.bxbZ05czVv7hBhxh
pgY7xBTK7JaNAjjFS3rhZsp5XCT27sC9MfZHW6C
-----------end_max5_patcher-----------

HSL to RGB 変換 JS オブジェクト #max7

JSオブジェクト用コード

function rgbToHsl(r, g, b){

	r /= 255, g /= 255, b /= 255;

	var max = Math.max(r, g, b), min = Math.min(r, g, b);

	var h, s, l = (max + min) / 2;

if(max == min){
h = s = 0; // achromatic
}else{
var d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
switch(max){
case r: h = (g - b) / d + (g < b ? 6 : 0); break;
case g: h = (b - r) / d + 2; break;
case b: h = (r - g) / d + 4; break;
}
h /= 6;
}
outlet(0, h, s, l);
}

function hslToRgb(h, s, l){
var r, g, b;

if(s == 0){
r = g = b = l; // achromatic
}else{
function hue2rgb(p, q, t){
if(t < 0) t += 1; if(t > 1) t -= 1;
if(t < 1/6) return p + (q - p) * 6 * t;
if(t < 1/2) return q;
if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
return p;
}

var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
var p = 2 * l - q;
r = hue2rgb(p, q, h + 1/3);
g = hue2rgb(p, q, h);
b = hue2rgb(p, q, h - 1/3);
}
r = Math.round(r*255);
g = Math.round(g*255);
b = Math.round(b*255);
outlet(0,r, g, b);
}

引用元

RGB to HSL conversion


RaspberryPi openFrameworksでBoost Libraryを使う

#include <boost/algorithm/string.hpp>
using namespace boost;

int main() {

string str("192.168.0.1 192.168.0.2");
list<string> list_string;

split(list_string,str,is_space());

for(auto list : list_string){
ofLog() << list;
}

}

#includeでヘッダ読み込むだけで使えました。functionなど一部std名前空間と名前がかぶっているようなので注意する。


秋月で売ってるESP-WROOM-02 DIPへ、FTDI USBシリアル変換アダプターで書き込むぞい

FullSizeRender 3

秋月電子通商Wi-Fiモジュール ESP-WROOM-02 DIPへSwitch ScienceのFTDI USBシリアル変換アダプターで書き込むためのブレッドボードメモ。

  • 書き込んだプログラムを走らせる場合、IO0とGNDを繋げているジャンパーピンを取り外す。
  • FIDI USBシリアル変換アダプタの電圧を3.3vにしておく。(ジャンパーピンで電圧を変更できる。)
  • 抵抗10KΩ

ofPath::getOutline() and ofPolyline::getBoundingBox() でofRectが返って来ない問題 #openFrameworks

capture

ofPath::getBoundingBox();

ofxSvgの各パスをgetBoundingBox()でゲットしようとしたのが、値が返って来ない問題がありました。この問題の解決策としては、アウトラインを取るのに線の太さが設定し、またofPathのWindingModeも適したものを選択しておく必要があります。

サンプルコード


ofPath path; //パスを追加してください。
path.setStrokeWidth(1.0); //太さがないとアウトラインは取れない
path.setPolyWindingMode(OF_POLY_WINDING_ODD); //適した
auto polyLine = path.getOutline()[0]; //とりあえず0番目のアウトライン
auto rect = polyLine.getBoudingBox();

参考

Get ofPath bounding box


ofImage画像をofPath描画でマスクする #openFrameworks

ofImageへのマスク処理

alpha

0.9.0~ できるようになったというofImageへのマスク処理 setAlphaMask (参考:画像を形を指定してマスクする)を試してみました。

サンプルコード


ofPath path;
ofImage img;
ofFbo fbo;

void ofApp::setup(){

ofHideCursor();

//set path
for(auto i = 0 ; i < 100 ; i++){
ofSetColor(255);
const auto pos = ofPoint(ofRandom(float(ofGetWidth())),float(ofRandom(ofGetHeight())));
path.lineTo(pos);
}

//set fbo
fbo.allocate(ofGetWidth(),ofGetHeight(),GL_RGBA /*GL_LUMINANCE*/);
fbo.begin();
path.draw();
fbo.end();

//set img
//dataフォルダに好きな画像を入れてください。
if(!img.load("mirrorboy.jpg")){
ofLog() << "image is not loaded." ;
};

img.setAnchorPercent(0.5,0.5);
img.getTexture().setAlphaMask(fbo.getTexture());
}

void ofApp::draw(){

 ofBackgroundGradient(ofColor::yellow,ofColor::gray);

 ofSetColor(255);
 img.draw(ofGetWidth()/2,ofGetHeight()/2);

}

C++14 ラムダ関数で再帰呼び出しサンプル

引数なし


std::function<void()> func = [&](){

fun();

}

func();

引数あり


std::function<void(class&)> func = [&func](auto& obj){

func(obj);

}

class obj;

func(obj);

オブジェクトを参照渡ししつつ、再帰呼び出しするラムダ関数のサンプル。openFrameworks 0.9以上だとC++14対応なので動く。


IntensityShuttleViewer 0.2.2 公開しました #max7

IntensityShuttleViewerとは?

MacでBlackmagic Design社 IntensityShuttle for ThunderboltのPreviewを簡単にできるアプリです。今回、久しぶりにバージョンアップをしました。詳しくは、以前の記事をご覧ください。

変更点

スクリーンショット 2016-03-12 16.13.24

  • 内部処理を見直し軽量化
  • GUIの変更
  • Max6 → Max7で書き換え
  • OS 10.11.3 対応

ダウンロード

こちらからどうぞ