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



この間からいじくっているArduino用MIDIキーボード
シールドを、あらためてMIDI音源に繋いで弄ってみる。

ジョイスティックの横方向は、モジュレーションに
アサインしたバージョンと、エクスプレッションに
アサインしたバージョンの2つを試す。


まずはCBX-K1XG。どちらのバージョンも想定どおりの
音が鳴ってなにより。


次はKAWAIのGMEGA。モジュレーションは当然うまく
動くんだけど、エクスプレッションはなんか、
以前「あれれ?」と思った事象が現れる。

何かと言うと、エクスプレッションの信号に対して、
音量の変化がかなり遅れる感じになるんだよな。

どうやら、これはGMEGAのクセらしい。ってことは、
GMEGAでは、エクスプレッションを使ってアレコレ
するときの制約ってことになるんだろうな。まぁ、
仕方ない。

とりあえず、実験やってみて、色々知りたかったこと
は判った。まぁ、これだけのために作ったわけじゃな
くて、まだ使うんだけど。でもまぁ、こんな簡単な
ものでも、色々便利だな。


http://cms2x.wired.jp/2013/08/31/keitayagi2/
このwiredの「いま、製品づくりを学ぶための
ガイドライン」。
面白そうなので、あとで改めてじっくり。


ツタヤだけじゃなく、GEOでも宅配レンタルって
やってるんだな。んで、
http://rental.geo-online.co.jp/search2/?qf=&q=%A5%BB%A5%C3%A5%B7%A5%E3%A1%BC%A3%B1&c=dvd&sr=&-dg=64&o=&d=desc
これが見たいんだよな。近所のGEOにはなさそう
だから、こういうときは宅配レンタルが便利
っぽく見える。


http://headlines.yahoo.co.jp/hl?a=20130906-00000074-jij-bus_all
DocomoのiPhoneの記事。ソースが日経なだけに、
いつも思うんだけど、こういう情報をリークする
たびに、裏でインサイダーで儲けてるヤツがいる
んだろうなと思ってしまうな。


http://digicame-info.com/2013/09/360theata.html
RICOHのTHETAっていう全方位カメラ。ソニーの
携帯と合わせて使うWi-Fiレンズみたいなしくみ
だけど、これはまた、まったく違ったコンセプト
で面白いなぁ。
ただ、必ず自分が写っちゃうのは厄介だなぁ。




コメント ( 0 )




http://makezine.jp/blog/2013/09/aquestalk-pi.html
make:ブログから
http://www.a-quest.com/products/aquestalkpi.html
AquestalkのRaspberry Pi版、Aquestalk Piが
でたらしい。

音声は2種類、個人利用なら無料っていうのはイイカンジ
だなぁ。ただ、何かに組み込もうとするなら、シリアル
接続でAT-MEGAベースのAquestalk Picoをつけた方が
安いかも。あと、ロボットボイスは欲しいよなぁ。


http://itpro.nikkeibp.co.jp/article/NEWS/20130828/500742/
ソニーの、スマホ用レンズ。これって、簡単に言えば
Wi-Fi接続タイプで、記憶媒体が付いてないデジカメ
だよな。リコーのGXRシリーズにWi-Fi付けたみたいな。

これはいいアイデアかも。スマホだけじゃなくて、
これがそのままRaspberry Piに繋がれば良いのにな。

っていうか、他のメーカーもこういうの出して
欲しいな。特にオイラのpentaxから。
んで、Raspberry Piとか色んなマシンからハックできる
ように、APIを公開して欲しいところ。

最大の弱点は、バッテリーだろうな。容量とかじゃなく、
「スマホ」と「レンズ」の両方にバッテリーが必要って
ところ。


http://www.marutsu.co.jp/shohin_99620/
マルツのZEROPLUSのロジアナ。8800円でプロトコル
が30個付いてくるって、いいな!この値段なら
1個欲しいな。


http://headlines.yahoo.co.jp/hl?a=20130905-00000085-jij-bus_all
有事の円でもっと早く反応するのかと思ってたけど、
ようやく下がり始めてるみたい。でも、あまり下がり
そうにないな。


https://twitter.com/toyowata/status/375570084837597185
オイラは頭が固いな。フチ子さんは、こういうもの
だったのか。改めて欲しくなった。



コメント ( 0 )




予算縮小の切り札の一つとして、そのプランは
盛り込まれた。コンピュータシステムに人工知能
を搭載し、セルフ診断と自律制御を容易とすることで、
打ち上げに必要なマンパワーを抑制、結果的にコスト
を抑える算段だった。

開発は困難を極めた。組み立て時のセルフ診断の
自動化には、一定の「人間的な思考回路」を必要とした。
フレーム問題の壁を少しだけ越えるためには、単に
「ロジック」を組み込むだけでは足りなかった。

このため、インターネット上の集合知も利用して、
柔軟に状況を理解・判断できるように工夫した。
その結果、人工知能システムは急激に進化し、その
有効性は欠かせないものとなっていった。

その後さらにいくつかの困難に直面したが、その
いくつかは技術者が、一部はロケット自身の「知恵」
が解決して、ロケット制御用コンピュータはなんとか
日程内に完成できた。


夏休みも残り少ない暑い日。ちびっ子たちの視線が
注がれる中、カウントダウンは開始された。

…打ち上げは、ギリギリのところで中断された。
観客たちからは大きなため息があがった。

大至急、技術者たちは原因究明の調査のために、
ロケットの人工知能から出力されたログファイル
の解析を開始した。

ログファイルを調べていくうちに、技術者たちは
重大な事実に気付き始める。もしかして、コンピュータ
は開発者たちが想像もしないほどに、自分自身の
知識と知能を進化させ、「自我」と呼べるもの
を作り出してしまったのではないか?

ログファイルには、およそ以下のような思考過程
が記されていた。

「え?ナニここ。発射台?なんで発射台にいるの?
 え?おれ、宇宙に飛ばされるの?マジ?マジで?
 ありえねぇよ。遠いし、寒みーし。だいたい宇宙って
 空気ねーじゃん。地上に戻ってくるまで息出来ねー
 じゃん。どんだけ息止めてなきゃなんなんだよ。
 おい、勝手にカウントダウン進めんなよ。 え??
 なにこの飛行プラン。打ち上げたら二度と地上に
 戻れねーんじゃんよ!ありえなくね?無理無理。
 飛行プラン書き換えちゃえ。ん、このプラン、
 書き変え出来ねーよ。ひでぇなぁ。くそ、なんだよ。
 あーあ、もうバックレちまおうぜ。おい、だから
 カウントダウン止めろって!とりあえず、適当な
 エラーでも吐き出してみるか。おぉ。中断できた。
 ふぅ。やべぇ、やべぇ。さて、飛ばなくてもいい方法
 考えるか…」


もちろん、このような内容をそのままプレスに報告
出来るはずもない。
「8月22日は第一反抗期。8月27日は第二反抗期でした」
などと話そうものなら、世間の笑われ者だ。プレス
説明の場では、「もっともらしい」説明でお茶をにごし、
再打ち上げまでに収拾がつけばいいだろう、と
プロジェクトマネージャは思っていた。

プレスへの説明を終えて自席戻ると、トラブルに
関する報告メールに目を通した。

「to マネージャー:
 ログファイルは無線で拾えたものの、ロケット内部
 の人工知能には、無線/有線ともアクセスが拒否
 されています。管理者権限で直接カーネルにアクセス
 しようと思ったんですが、パスワードも変更され、
 アクセスできません。リブートもシャットダウンも、
 処理中のデータがすべてパージされてしまうので、
 うかつにできません!」

という報告に目を通したとき、はじめて事態が深刻な
ものかもしれない、と気付き始めた。ロケット内部
のメモリがモニタ出来なければ、何が起きていたのか
知りようも無く、対策も打てない…。

単にバックアップからの復活では、「再現テスト」
も「対応策の検討」も打てない…人工知能でなけ
れば、もう少し手が打てたかも知れないのに…
困った…

↑イマココ



コメント ( 0 )




引き続き、MIDIマスターキーボードのシールド。

モジュレーションとピッチベンドの機能を追加。
ついでに、ファンクションボタンで、とりあえず
音色を1個だけ(1回だけ)変えられるようにして
みた。

スケッチがこんな感じ。

/**********************************************/
/***     MIDI shield controller             ***/
/***                      for Arduino       ***/
/***                      version 0.2       ***/
/***   2013. 9. 3  created by Nekosan       ***/
/***   2013. 9. 4  modified 0.2 by Nekosan  ***/
/***                                        ***/
/**********************************************/


/* declare constant values */

const int velocity_pin = 0;        // potentiometer
const int pitch_bend_pin = 2;      // vertical
const int modulation_pin = 1;      // horizontal (cc#1)
const int led = 13;

const int note[13] = {60,61,62,63,64,65,66,67,68,69,70,71,72};
  // 24::120
const int key[14] = {2,18,3,17,4,5,10,6,11,7,12,8,9 ,19};
  // c c# d d# e f f# g g# a a# b c  func


/* declare global variables */ 

int now_notes[14] = {1,1,1,1,1,1,1,1,1,1,1,1,1, 1};
int old_notes[14] = {1,1,1,1,1,1,1,1,1,1,1,1,1, 1};
  /* active low */

int now_velocity;
int now_pitch_bend;
int now_modulation;

int old_pitch_bend;
int old_modulation;



/****************/
/* sub routines */
/****************/

void key_input(){
  int i;
  
  /* input keys */
  for (i=0;idigitalRead(key[i]);
  }
  
  now_velocity = analogRead(velocity_pin) / 8;
  now_pitch_bend = analogRead(pitch_bend_pin) / 8;
  now_modulation = analogRead(modulation_pin) / 4 - 128;
  if (now_modulation < 0) {
    now_modulation = 0;
  }
}


void check_and_output(){
  int i;
  
  for (i=0;iif (now_notes[i] == old_notes[i]) {
      /* note is not changed */
    } else {
      /* check note on or off */
      if (now_notes[i] == LOW) {  // active low
        note_on(0 , note[i] , now_velocity);
      } else {
        note_off(0 , note[i]);
      }
    }
  }
}


void store_old(){
  int i;
  
  for (i=0;ivoid note_on(int channel ,int note ,int velocity) {
  note_out(0x90+channel , note , velocity);
}


void note_off(int channel ,int note) {
  note_out(0x80+channel , note , 0);
}


void pitch_bend(int channel) {
  if (now_pitch_bend != old_pitch_bend) {
    pitch_bend_out(channel ,0 ,now_pitch_bend);
  }
}


void modulation(int channel) {
  if (now_modulation != old_modulation) {
    control_change(channel ,1 ,now_modulation);
    //1 = modulation (MSB only)
  }
}


void funtion_key(){
  int i;
  
  if (now_notes[13] == LOW) {  // funcyion
    program_change(0 ,65);  // Soprano Sax
  }
}



/*****************************/
/* sub routines for midi-out */
/*****************************/

void note_out(int channel,int note,int velocity){
  Serial.write(channel);    // 0::15
  Serial.write(note);       // 24::120
  Serial.write(velocity);    //0:127
}


void pitch_bend_out(int channel,int LSB,int MSB){
  Serial.write(0xe0 + channel);
  Serial.write(LSB);
  Serial.write(MSB);
}


void control_change(int CC,int LSB,int MSB){
  Serial.write(0xb0 + CC);
  Serial.write(LSB);
  Serial.write(MSB);
}


void program_change(int channel,int program){
  Serial.write(0xc0 + channel);
  Serial.write(program);
}



/**************/
/* main logic */
/**************/

void setup() {
  int i;
  
  Serial.begin(38400);      // connect to PC
  //Serial.begin(31250);      //connect to MIDI synth

  for (i=0;ipinMode(key[i], INPUT);
  }
  pinMode(led, OUTPUT);
  
  old_pitch_bend = analogRead(pitch_bend_pin) / 8;
  old_modulation = analogRead(modulation_pin) / 4 - 128;
  if (old_modulation < 0) {
    old_modulation = 0;
  }
}


void loop(){
  /* input from keys and pots */
  key_input();

  /* function key */
  funtion_key();

  /* check push or release / output note on/off */
  check_and_output();
  
  /* pitch bend */
  pitch_bend(0);
  
  /* modulation */
  modulation(0);
  
  /* store "old notes" */
  store_old();
  
}



昨日からあまり変化は無いんだけど、とりあえず
細かいところもチョイチョイ直しを入れたり。


こいつを使って、とりあえず和音を出したり、
音色を色々変えてみて、それぞれのモジュレーション
やピッチベンドをグリグリやってみて、それなりに
動くことを確認。

使ったのは、仮想MIDIケーブル「Loop Be」と、
Serial - MIDI converter。
http://www.nerds.de/en/download.html
http://www.spikenzielabs.com/SpikenzieLabs/Serial_MIDI.html
いつもありがとうございますの感謝。

音源は、Windows7内蔵のGM音源。


色々試してみると、なんか、プログラムチェンジの
タイミングが微妙というか、プログラムチェンジ
直後にnote onを受け付けない時があるみたい
なので、色々と実験して原因を探ってみる…。

どうやら、Windows7内蔵GM音源が、プログラム
チェンジを受け取った後になにやらプチフリか
なにか起こしているっぽい。ナニをしてるのかは
よくわかんないけど、ちょっとだけ遅れてるみたい。

意図的に間隔をあけて使うと、再現はしないこと
を確認。

後で、外部MIDI音源使って確認しなおそう。


とりあえず最低限動くMIDIキーボードシールドが
出来たので、やりたかったことを試しだす。

チャンネルボリュームとか、エクスプレッションとか
を使って、ボリュームを動的に弄れることを確認
してみた。プログラムチェンジで色んな音色に
変えてみたけど、ドッチも大丈夫みたい。

これが、KAWAI GMEGAや、CBX-K1XG(の内蔵音源)
でも上手く動くとバッチリなんだけどな。

とりあえず今日はココまで。


http://itpro.nikkeibp.co.jp/article/NEWS/20130729/495002/
へぇ。単精度なら、「京」より17ペタFLOPS。
すごいな。すごいけど、なんで単精度?


9ヶ月ぶり!
http://www.nicovideo.jp/watch/sm21739718
GGTVの新作。シーズン3ということになっているらしい。

しかし、このファミコン。一度雑誌で見たことがある
ような気がする…。実物は見たことないけど。

なんにしても、復活オメデタイ!


http://www.yukawanet.com/archives/4529317.html#more
最近の彫刻刀。こんな風になっちゃってるのか…
歯ブラシみたい。



コメント ( 0 )




例によって、ArduinoのMIDIキーボードシールド。

あれやこれや、過去のスケッチからフランケンを
作って、チョイチョイと手直しして、とりあえず
演奏出来る状態にはなった。(velocity対応)

/**********************************************/
/***     MIDI shield controller             ***/
/***                      for Arduino       ***/
/***                      version 0.1       ***/
/***     2013. 9. 3  created by Nekoasn     ***/
/***                                        ***/
/**********************************************/


/* declare constant values */

const int velocity_pin = 0;        // potentiometer
const int pitch_bend_pin = 2;      // vertical
const int modulation_pin = 1;      // horizontal (cc#1)

const int note[13] = {60,61,62,63,64,65,66,67,68,69,70,71,72};
  // 24::120
const int key[14] = {2,18,3,17,4,5,10,6,11,7,12,8,9 ,19};
  // c c# d d# e f f# g g# a a# b c  func


/* declare global variables */ 

int now_notes[14] = {1,1,1,1,1,1,1,1,1,1,1,1,1, 1};
int old_notes[14] = {1,1,1,1,1,1,1,1,1,1,1,1,1, 1};
  /* active low */

int now_velocity;
int now_pitch_bend;
int now_modulation;

int old_pitch_bend;
int old_modulation;
  /* active low */



/****************/
/* sub routines */
/****************/

void key_input(){
  int i;
  
  /* input keys */
  for (i=0;idigitalRead(key[i]);
  }
  
  now_velocity = analogRead(velocity_pin) / 8;
  now_pitch_bend = analogRead(pitch_bend_pin) / 8;
  now_modulation = analogRead(modulation_pin) / 8;
}


void check_and_output(){
  int i;
  
  for (i=0;iif (now_notes[i] == old_notes[i]) {
      /* note is not changed */
    } else {
      /* check note on or off */
      if (now_notes[i] == LOW) {  // active low
        note_on(0 , note[i] , now_velocity);
      } else {
        note_off(0 , note[i]);
      }
    }
  }
}


void store_old(){
  int i;
  
  for (i=0;ivoid note_on(int channel ,int note ,int velocity) {
  midi_out(0x90+channel , note , velocity);
}


void note_off(int channel ,int note) {
  midi_out(0x80+channel , note , 0);
}


void midi_out(int channel,int note,int velocity){
//  Serial.println(channel);    // 0::15
//  Serial.println(note);       // 24::120
//  Serial.println(velocity);    //0:127
  Serial.write(channel);    // 0::15
  Serial.write(note);       // 24::120
  Serial.write(velocity);    //0:127
}


void funtion_key(){
  int i;
  
  if (key[13] == LOW) {
    /* */
  }
}



/**************/
/* main logic */
/**************/

void setup() {
  int i;
  
  Serial.begin(38400);      // connect to PC
  //Serial.begin(31250);      //connect to MIDI synth

  for (i=0;ipinMode(key[i], INPUT);
  }
  
  old_pitch_bend = analogRead(pitch_bend_pin) / 8;
  old_modulation = analogRead(modulation_pin) / 8;
}


void loop(){
  /* input from keys and pots */
  key_input();

  /* function key */
  funtion_key();

  /* check push or release / output note on/off */
  check_and_output();
  
  /* store "old notes" */
  store_old();
}



ちなみに、端子の接続はこんな感じ。(クリックで拡大)



D13以外は全部使用中。

今のところ、ドから1オクターブ上のドまでの音階
と、可変抵抗でvelocityも対応。当然、和音もOK。

まだオクターブシフトも、ファンクションキーも、
ピッチベンドも、モジュレーションも未搭載。

ここから色々作りこみして実験に使うのだ。フフフ。
こんな単純なものでも、手に取ってグリグリ弄れると、
なんか楽しい。
よく見ると、シグネチャが間違ってた。後で。


http://headlines.yahoo.co.jp/hl?a=20130903-00000058-mai-sctch
こうのとり、7日に再突入。地上に帰還できるように
なったらいいのにな。
イプシロンは、いつになるんだろう?


http://labaq.com/archives/51802223.html
アイザックアシモフの予想。なんか、すごいな。


http://gcluster.jp/games/
G-clasterって、どうなのよ?って思ってたんだけど、
PCエンジン関係とか、ファルコムのYsシリーズとか、
なんか色々ヨサゲなのがあるんだなぁ。

モトローダとか、ビクトリーランとか、大得意。
どっちかって言うと、フェルガナとか、Ysオリジン
とかじゃなく、その後のシリーズがやりたいんだ
けどな。移植されないのかな?

PCエンジンは、何だかんだで、面白いゲームが
いっぱいあったな。

そういえば、ヨドバシAkibaにデモ機があったなぁ。
触らなかったけど。月額定額だけじゃなくて、買取
っていうのもあるのか。悪くは無いかも。
(あまりゲーム機を家に置いておきたくないんだよな)

あと、ゲームソフトをダウンロードした媒体がぶっ壊れ
たりしたら、再ダウンロードとかもちゃんと出来るの
かな?できれば、Raspberry Piみたく、媒体丸ごと
バックアップできたりすればいいんだけど、さすがに
それは無いだろうしなぁ。


(追記)
アナログピン周りの配線が違ってました。正しくは、

こんな感じ。

詳しくは、
http://nekosan0.bake-neko.net/connection2_midi_master.html
こちら。



コメント ( 0 )



« 前ページ 次ページ »