「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



https://twitter.com/kenfujimoto/status/1086559137595416576

MIDI2.0、何が変わるんだろうねぇ?
従来のMIDIを拡張して、互換性があるものみたいなん
だけどねぇ。
速度はやっぱアレだもんな。31500bpsって、遅すぎ
だもんな。

でも、Arduinoとかでちょいちょいと作れてしまう簡単
なプロトコルなのはよかったんだよな。




https://www.youtube.com/watch?v=_p1_ui4-LKU

そうそう、こないだ見つけてすごかったんだよな。この
動画。「雪に負けない!! 新幹線」

何気にじっくり見入ってしまった。貯雪、消雪なんて方法
が使い分けられているなんて、しらなかった。
あと、雪落としの作業があるとか。





https://twitter.com/aroerina2/status/1086132636223889409

うん。多分そうなんだろうな。
がんばって、Arduinoかmbedコアのオシロのシールドを
作ろうと思ってるんだけど、色々難しいところがあって
のびのびになってる…。




https://twitter.com/HacksterPro/status/1086352888438423552

この、Giant Boardっていうシングルボードコンピュータ。
Linux動く。いいなこれ。すごい興味深々。
ちゃんと製品化されることを期待してまっていよう。

メモリ小さいし、クロックも低いけど、消費電力は
その分すごく小さいんだろう。きっと。
Atmel(Microchip)のSAMA5D2 Arm Cortex-A5が使われて
いるみたい。




https://twitter.com/Hacksterio/status/1086375299414151170

ハイパーオリンピック。




https://www.youtube.com/watch?v=P1VzD_zAAsU&t=17m5s

うえざ書店。すごかったな。またおばあさん出てきたと
思ったら、歳が判明した。

それにしても、芥川龍之介は、わけわからないお話を
書くんだなぁ。


https://www.youtube.com/watch?v=PU6BxSb6d5U

めがねのさやっち。
ニコニコ、コメント速い。「んちゃ」とか色々書かれてる。




なかなかに時間が取れないな。

それにしても、OpenCV使わずにPythonでカメラ繋ぎたい
と思ってたんだけど、いいライブラリが見当たらないな。

まぁ、色々調べてみたら、Android+Kotlinも、OpenCVが
使えるようになってるみたいだし、そっち方向でもいい
のかもしれん。

あとは、画像認識部分をどうするかかなぁ。四角を抽出
したいんだけど、OpenCVでそんな都合のいいライブラリ
なんぞあるのか…



コメント ( 0 )




http://publicrhythm.com/23835
http://www.qetic.jp/technology/volcafm-pickup/190098/

こんなの登場してたのか。しらなかった。
KORG volca fm。


MIDI入力もありの、つまみがたくさん付いていての、
FM音源をグリグリいじりながら鳴らしーの、しかも
小型で結構安め。

6オペで3和音。3和音なのか…微妙に少ない気がするなぁ。
たくさん鳴らしたいときは、こいつをずらっと横に
並べて…なのかな。

それにしても、こういう、つまみたくさん付いてる
FMシンセ、作りたい作りたいって思ってて、なにげに
メーカーにつくられちまったなぁ。

それにしても、このFM音源チップって、YAMAHAのを
使ってたりするの?使ってないよねぇ?オリジナルの
チップを現代に開発しなおしたの?
それなりに台数出ないと、このシンセ専用のASICには
しにくいんじゃないのかな?FPGA?





https://twitter.com/Daisuke_JA1UMW/status/757627874908119042

あぁ、しらなかった。FCZ研究所って、名前が変わって
キャリブレーションって名前になっていたのか。






https://ja.wikipedia.org/wiki/Dalvik%E4%BB%AE%E6%83%B3%E3%83%9E%E3%82%B7%E3%83%B3
https://ja.wikipedia.org/wiki/Android_Runtime

しらなかった。AndroidのJavaのVMって、Dalvik VMと
ばかり思っていたけど、5.0以降は「Android Runtime」
(ART)ってのに変わっていたのか。
ネイティブコードへのコンパイルが、実行のつど毎回なのか、
それとも1回だけなのかっていう違いがあるみたい。へぇ。







http://www.afpbb.com/articles/-/3095353

ニワトリのにおいは、蚊を寄せ付けないらしい。へぇ。
ニワトリの何が蚊を遠ざけるんだろう?ほかの鳥だと
だめなのかな?

それにしても、
 「ニワトリをベッドの上につるすと眠りにくい」
ってのが面白かった。






https://twitter.com/dorayaki_hime/status/757551343208923136

いやになっちゃうあの人。






Linux Mint18の環境に、少しずつRuby on Railsの環境
を構築中。とりあえず、最低限の環境はできたみたい。
普通のubuntu用の手順でいける。



あと、こないだみたいな、ちょっとした短いプログラム
書いて、グラフィック画面とかも表示したいって場合の
ために、やっぱgtk+とPythonで簡単に…ってできそうな
環境もつくっておきたいよな、と思って、idle/idle3を
インストールするも、またしてもgtk周りでいろいろ
バージョン間のゴタゴタでめげる。

よく考えてみたら、まえもgtkとgladeとPythonの
バージョン周りのゴタゴタで、ちょっと丸投げして
放置になったんだったな。

んで、その後、wxPythonに触れて、これなら、Python3、
wxglade組み合わせて、なんかイイカンジに使えたって
記憶が。すくなくともwxPythonをPython3で使うのは、
結構悪くなかったよなぁ…。

というわけで、またちょっと情報収集中。


コメント ( 0 )




メシのついでにちょっと足を延ばして、ハードオフ。


お目当てのモノは無かったものの、掘り出し物発見。
YamahaのUX16が、きれいな状態で。



UX16って、ドライバの対応はWindows7までだったか、
Windows8も対応してたのか、記憶が定かじゃないん
だけど、まぁ、Windows7は対応してたはずだし、
UbuntuとかDebianなら、普通に使えるだろうと。

とりあえず採掘しておいた。



帰って来てから、設定と動作確認だけしておく。

まずはUbuntu。挿すだけで認識するはず。…挿した。
…無事、認識された。lsusbで普通に表示される。

aconnectguiとtimidity++をインストール。さらに
バーチャルMIDIキーボードをインストール。

aconnectguiを使って、バーチャルキーボードを
timidity++に繋いで、弾いたらPCから音が出ること
を確認しておいてから、acconectguiで出力先をUX16
に変更。

演奏すると、緑のLEDがちゃんと光る。ok、ok。
ひとまずUbuntu機では普通に使えそう。



次、Windows7の64ビット機。

ドライバをダウンロードして、USBに接続。ドライバ
インストーラを実行。どうやら普通に使える状態
になったっぽい。

いくつかインストールしてある仮想キーボードソフト
を起動。音源内蔵MIDIキーボードをUX16に接続して、
画面上で弾いてみる。

キーボード側のスピーカから音が出る。ok。

逆に、MIDIキーボードからUX16経由で入力して、
Windows内蔵音源に繋いでみる。キーボードを
弾くと、PCから音が出る。

ok、ok。バッチリみたい。いい買い物したっぽいな。




Raspberry PiでもMIDI弄るときに使いたいし、繋いで
テストしてみようかなぁと思ったんだけど、キーボード
仕舞っちゃったし、色々と手間かかりそうなので、また
今度にしよう。



Pig Noseのちっちゃいアンプもあったんだけど、
お値段的に手が出ないな。見た目は凄く好きなん
だけどな。
http://www.soundhouse.co.jp/shop/ProductDetail.asp?Item=582^7-100r^^



そういえば、この間見つけて確保しておいた
Wonder Swan。500円+税。



家に残してあるとばかり思っていた、Wonder Swam用
のグンペイが見当たらない。

昔、魚探用にと思って中古で買って、結局Gameboy
の魚探だけ使って、Wonder Swanはグンペイ専用機
だったんだよな。その後m本体だけ手放して、
グンペイは残しておいたと思ってたんだけどな。
時々、グンペイやりたくなるんだよな。

というわけで、またもや放置。




そういえば、Beatnic武田さんのつぶやき。

https://twitter.com/mmtakeda55/status/488613060420988929

アナログシンセビルダーズサミットのお知らせが
あった。行ってみたいんだよなぁ。




http://www.digitalgrapher.com/2014/05/androidnfcdimple.html

NFC通信で接続する追加ボタンのシール。これいいな。




http://earth.nullschool.net/jp/#current/wind/surface/level/orthographic
地球。これすごいな。
左下の「地球」って文字をクリックすると、時間とか
表示する内容(風とか雲とか温度とか)を切り替え
できたり。へぇ。




アレコレ、思った通りには進まんなぁ。ひとつだけ、
後に回して、ほかのところに集中しようかな。



コメント ( 0 )




H2A 23号機、打ち上げ成功だったらしい。
http://www.nicovideo.jp/watch/sm22984611

http://www.satnavi.jaxa.jp/gpmdpr_special/
それにしても、GPMのサイト。JAXA公式とは
にわかに信じがたいような印象。

これで、竜巻とかの予報もある程度正確に
出来るようになるといいなぁ。



http://www.nicovideo.jp/watch/sm22986241
ゲーグラTV。通産250回記念。オメデタイ!
そして、アリガタイ!カンシャカンシャ。

毎回楽しみなので、末永く続いて欲しい。



なんだか、
http://www.huffingtonpost.jp/2014/02/28/bitcoin_n_4872346.html?utm_hp_ref=japan
このニュースで持ちきりな感があるけど、

http://www.h5.dion.ne.jp/~ginza/newpage3581.htm
既視感。

まぁ、それはともかく、揮発メモリだったのかな。



http://ideahack.me/article/960
こんな方法があったとは!目ウロコ。



引き続いてMIDIのプログラム。

ふと、ArduinoのMIDIライブラリページを見に行って
みると、ここ1年でかなりバージョンアップが重ね
られて、全16CHマルチ入力とか、ソフトウェア
シリアル含めたマルチインスタンス対応とか、
ものすごく進化してることに気付いた。


んで、ここ数日作ってたMIDI入力のプログラムを、
早速このMIDIライブラリを使って書き換えてみる。

…if文の嵐で大変な状態だった代物が、case文に
置き換わって、すっかり見やすい、解りやすい
ものになってしまった。なんだったんだ7days


というわけで、失敗作(と言っても一応ちゃんと
動く)のプログラムを晒してみる。

/***************************************/
/***      MIDI master keyboard       ***/
/***         serial in (D0)          ***/
/***             |                   ***/
/***         this sketch             ***/
/***             |                   ***/
/***     software serial out (D3)    ***/
/***           eVY1 shield           ***/
/***************************************/

#include <SoftwareSerial.h>
//#include <string.h>

#define rxPin 4  // not in use
#define txPin 3  // software midi out
#define led 13

SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);

const char words[][7] =
  {"t M","a","4 a","a","w a","N","a","o"};

int ignore_bytes;
int last_status;
int data_seq;


void set_words(int pt) {
  mySerial.write((uint8_t)0xF0);
  mySerial.write((uint8_t)0x43);
  mySerial.write((uint8_t)0x79);
  mySerial.write((uint8_t)0x09);
  mySerial.write((uint8_t)0x00);
  mySerial.write((uint8_t)0x50);
  mySerial.write((uint8_t)0x10);
  for (int i=0; i<7; i++) {
    uint8_t c = words[pt][i];
    if (c == 0) {
      break;
    }
    mySerial.write(c);
  }
  mySerial.write((uint8_t)0x00);
  mySerial.write((uint8_t)0xF7);
}


void setup() 
{
  Serial.begin(31250);  // serial-in from MIDI-keyboard
  while(!Serial){
  }
  mySerial.begin(31250);  // soft-serial-out to eVY1
  delay(5000);   // wait NSX-1 to start up
  pinMode(led, OUTPUT);
  ignore_bytes = 0;
  last_status = 0;
  data_seq = 0;
}

void loop() 
{
  int in_data;
  
  if (Serial.available() > 0) {
    in_data = Serial.read();
    if (data_seq == 0) {
      // if in sequence of status byte
      digitalWrite(led,HIGH);
      if ((in_data >= 0xF6) && (in_data <= 0xFF)) {
        // interrupting data (system message)
        mySerial.write(in_data);
      } else {
        // status or data
        if (in_data < 0x80) {
          // running status (data byte)
          data_seq = 1;
          if ( (last_status == 0x90) || (last_status == 0x80) ) {
            // check normal note-on or change-word
            if ((in_data >= 48) && (in_data <= 55)) {
              // change word
              set_words(in_data - 48);  // changing a word
              data_seq++;
              ignore_bytes = 1;
            } else {
              //mySerial.write(last_status);  // not needed
              mySerial.write(in_data);
              data_seq++;
            }
          } else {
            // normal 2nd data
            mySerial.write(in_data);
            data_seq++;
          }
        } else {
          // normal "status data"
          data_seq++;
          last_status = in_data;
          if ((in_data != 0x80) && (in_data != 0x90)) {
            mySerial.write(in_data);
          } else {
            // hold outputting
          }
        }
      }
    } else {
      // if in sequence of data byte
      if ((in_data >= 0xF6) && (in_data <= 0xFF)) {
        // interrupting data (system message)
        mySerial.write(in_data);
      } else {
        // data byte
        if ( ((last_status == 0x90) || (last_status == 0x80)) && (data_seq == 1) ) {
          // check normal note-on or change-word
          if ((in_data >= 48) && (in_data <= 55)) {
            // change word
            set_words(in_data - 48);  // changing a word
            data_seq++;
            ignore_bytes = 1;
          } else {
            mySerial.write(last_status);
            mySerial.write(in_data);
            data_seq++;
          }
        } else {
          // normal data
          if (ignore_bytes == 0) {
            // normal "note on" data
            mySerial.write(in_data);
            data_seq++;
          } else {
            // no output 3rd byte when "changing a word"
            ignore_bytes--;
            data_seq++;
          }
        }
      }
    }
    if ( (data_seq == 3) || ( (data_seq == 2) && (last_status >= 0xC0) && (last_status <= 0xDF) ) ) {
      // end of a message
      data_seq = 0;
      // leave last_status (for running status)
    }
    digitalWrite(led,LOW);
  }
}


文字通り、if文の嵐。

もがいたあとがところどころに散らばって見える
かと。システムメッセージの割り込みとか、
Running Statusとか、1バイト入力ごとの流れの
中で処理すると、ホント面倒。

やっぱ、先人が用意してくれたアリガタイものは
存分に使わせていただくのが正解だな。



コメント ( 0 )




アレコレ困っていたMIDIのプログラムが、ようやく
まともに動くように。

机上デバッグとか限られたツールだけだと、テストの
パターンを全然消化できないので、シリアル通信の
速度を変えたり、ソフトウェアシリアルの部分を
USARTに置き換えたりして、
http://www.vector.co.jp/soft/win95/hardware/se337098.html
いつものこのツールで、一気に色んなパターンを
流し込み。


とりあえず、ロジックのバグっぽいことはわかった。
しかも、例によってお恥ずかしい、if文の条件内で、
「=」と「==」を間違えてたりとか。全然学習能力が
ないな。

まぁ、動くようになって何より。あとちょっと、
アレコレ調整がいるかな。


http://waranote.livedoor.biz/archives/37322406.html
大根おろしのカピバラとアルパカ。スバラシイ。


https://www.youtube.com/watch?v=YNEXzvnD7mI
簡単に描ける3D。いい。
これ、ちょこっとアレンジしたら、3D表示の
UIとかに応用できないかな…センサーとか絡めて。




コメント ( 0 )



« 前ページ