みなさんこんにちは。


先月から、新しくなったF・ビートルズ研究会(F-BEAKEN)が始まりました。
なんと今まで不在だったリンゴ(ドラムス)のポジションに新人が入ってくれました。
ありがとうございます。

その新メンバーは、なんと、YouTubeの動画を見て応募してくれました。
そして私たちがオーディションを開催し、厳正に厳正を重ねて慎重に選考した結果、
是非ともうちのドラマーとして入社して頂きたいと思いましたので採用になりました。


そんなこともあり、ホームページのプロフィールページも更新しました。
こんな感じになっています。↓

$F-BEAKEN(F・ビートルズ研究会)のブログ


このプロフィール写真は先月にスタジオに入った時のものです。
壁の色が自然を愛すF-BEAKENっぽくていい感じ。

皆さんはもうお気づきかと思いますが、新メンバーがもう一人います。新しいポールです。
彼はオーディションを行わずに入会が決定しました。いわゆるコネですが、実力は確かです。

もちろん昔のメンバーのプロフィールも残してあります。彼らがいてこそのF-BEAKENですから。

そしてライブの計画も動き始めています。
早ければ夏に行いたいと考えていて、今方針を検討中です。

先月のスタジオでは、新曲5曲と既にカバーした3曲で8曲を演奏しました。

今までドラムがいなかったところから、バンド編成になり、これからが楽しみです。


F-BEAKEN--Copy band of The Beatles--








『GO FOR IT -コードで世界は変えられる-』ソフトウェアスペシャリスト認定コンテスト 

というのをソニーの新卒採用のホームページでみつけたので少しやってみました。(就活生なので)
※私は情報系の学科や、プログラムを専攻して学んだわけではないので
 正確に合っているかどうかはわかりません。所々ミスがあるかもしれません。


コンテストや問題の内容について、詳しくはこちら
http://www.sony.co.jp/SonyInfo/Jobs/newgrads/sus/go_for_it.html?fm=jobs130002

このソフトウェアはオープンソースソフトウェアです。
OSDに準拠したライセンス(GPLライセンス)である。


ソフトウェアのダウンロードはこちらから(Windows)
ソフトウェアのダウンロードはこちらから(MacOSX)
詳しい実行方法は下記に記載

問題(i)
 まず、旋律の特徴とは何かを考えました。

 問題文の例に載っている3つの楽譜を見て、AとCの共通点を探すと、次の音への変位の量が同じであるということに気がつきました。

そこでひとまず、譜面を設問の通りに読み取る機能をつくりました。(下記ソースコード参照)
そして、五線譜上ではよくわからない音階の移り変わりを視覚化してみました。(半音の変位を1とし、全音の変位を2とする)
注:プログラムの都合上 音の高低が反転しています

F-BEAKEN(F・ビートルズ研究会)のブログ-a
楽譜Aの音階の移り変わり (プログラムを実行したらAボタンを押す


次に、音階の変位を取り出します。
次の音符の音までにどれくらいの高低差があるのかを表します。(半音を1とする。従って全音は2。画面上のラインは半音ずつの目盛りです。)

この変位は絶対値で求めます。(詳しい求め方はソースコード参照)


そして、その楽譜で変位した分の音階の数を全て足し合わせます。 ➡ これを特徴量1とします。

画像中下の黒い部分に "tokuchou ryou wa = 24" と書いてありますが、これが楽譜Aの特徴量1です。


次に楽譜Bの音階の推移を同時に表示させて比較します。

 F-BEAKEN(F・ビートルズ研究会)のブログ-ab
楽譜Aと楽譜Bの音階の推移の移り変わり 下部の黒いところにはBの特徴量も算出

鏡写しのようで、よく似ていますが、特徴量は違います。Aが24でBが26です。

次にAとCを同時に表示させます。

F-BEAKEN(F・ビートルズ研究会)のブログ-ac
楽譜Aと楽譜Cを同時に表示

これは完全に鏡写しとなっています。
そして特徴量もAもCも24で一致しています。

したがって、設問の仕様書どおりのコードが書けました。

音階の変位というものは五線譜上では視覚的に把握できませんが、
このように音階ごとに推移を表示する事によって視覚的に旋律の変位をとらえる事ができました。



(ii)E,D,Fの楽譜の中からBと同じ特徴量を持つものを見つける

同様に、BとE,D,Fを表示して視覚的にみて、特徴量も比べます。

F-BEAKEN(F・ビートルズ研究会)のブログ-bdef
B、D、E、Fの音階の移り変わり

視覚的にみても答えは解りません。(ソフトウェアを実行すればどれがどの楽譜かわかると思います。時間がなくてラベルの機能は付けられませんでした。)
算出した特徴量でみてみると、

B : 26

D: 26
E: 26
F : 22

となっていて、私の考えた特徴量で考えると答えはDとEです。


ここで、特徴量がこれだけの定義であることに疑問を感じたので、新しい基準として特徴量2を作ってみました。

音符が移り変わる時に変位する高低差を考慮するだけでなく、その時の音符の長さによってその度合いを示すというものです。

例えば、音符がミからソに変位した場合、特徴量1では3の変位があったことを示します。(ミ ➡ ファ ➡ ファ# ➡ ソ)
特徴量2では、これに音符の長さを考慮し、その長さによって特徴量の比重を変えるというものです。

ここでは、音符の時間的な長さに特徴量が影響されるようにします。
そうすることで、例えば、四分音符でミからソに変位するのと、八分音符でミからソに変位するのでは特徴量に違いが生じます。
(詳しい仕様はソースコードを見てください)

これを特徴量2として、"shurui wo kouryo sita tokuchou ryou wa = " で図中の黒い画面に示してあります。

結果は、
B: 6.5
D: 3.875
E: 3.6875
F: 5.5
となり。

この方式で行くとBと近いのはFです。

この特徴量2によって、音程の移り変わりだけでなく音符の長さを考慮した楽譜の特徴を調べる事ができました。
AやCにもこれを適用してみると以下のようになります。

A: 6.0
B: 6.5
C: 6.25
D: 3.875
E: 3.6875
F: 5.5

特徴量2でもAとCは設問どおり近い値になっています。


(iii)作曲ソフトについては現在作成中




以下ソースコード

◆直接アプリケーションをダウンロードする場合
Windowsの方は下記のアドレスから直接ソフトウェアをダウンロードする事ができます。

ソフトウェアをダウンロード

zipファイルを解凍してフォルダ内のexeを実行して下さい。
演算結果は同じフォルダ内にresults.txtとして出力されます。


◆Processingを使う場合
Processingを使用していますので、Processingがインストールされている事と
ControlP5というProcessing向けのライブラリを使用していますので、インストールしてから使用してください。(グラフィックインターフェースのライブラリです)

Processing  http://processing.org/
ControlP5  http://www.sojamo.de/libraries/controlP5/


まず、Processingをhttp://processing.org/download/からインストールして頂き、ControlP5というライブラリをダウンロードして、ProcessingフォルダのProcessing 1.5.1> modes > java > librariesの中にControlP5フォルダを入れてください。

その後Processingを起動し、下記のソースコードをスケッチに貼付けて実行して下さい。
両方英語のサイトですが、何かご質問の際はメールまたはコメントでお願いします。




ここから下 ソース
------------------------------------------------------
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓


//sony go for it
// Shunsuke 2012/02/11

import controlP5.*;

ControlP5 controlP5;

int takasa,kosu;

float shurui,omomi2,omomi2_sum,omomi,omomi_sum,kekka;
String name;

int iro = 40;

boolean start;

String A ="-3:4:,-2:4:,-1:4:,0:4:b,-1:4:,-2:4:,-3:4:,:4:,-1:4:,0:4:b,1:4:,2:4:,1:4:,0:4:b,-1:4:,:4:";
String B ="3:4:,2:4:,1:4:,0:4:b,1:4:,2:4:,3:4:,:4:,1:4:,0:4:b,-1:4:,-2:4:,-1:4:,0:4:b,1:4:,:4:";
String C ="3:4:,2:4:,1:4:,0:4:,1:4:,2:4:,3:4:,:4:,1:8:,0:4.:,-1:4:,-2:4:,:8:,-1:4.:,0:8:,1:8:";
String D ="-6:8:,-6:8:,-6:8:,-4:8:,-2:8:,-2:8:,-2:8:,:8:,-5:8:,-5:8:,-5:8:,-3:8:,-2:8:,-2:8:,-2:8:,:8:,:8:,-2:8:,-2:8:,-1:8:b,-1:8:,-1:8:,-1:8:,-1:8:b,-2:4:,0:4:,1:4:,:4:";
String E ="-6:8.:,-7:16:,-6:8:,-5:8:,-4:8:,-4:8:,-4:4:,-3:8.:,-4:16:,-5:8:,-6:8:,-5:4:,:4:,-3:8:,-5:4:,-5:8:,-4:8:,-4:8:,-3:8:,-3:8:,-4:8:,-4:8:,-5:8:,-5:8:,-6:4:,:4:";
String F ="-6:2:,-5:4:,-6:8:,-5:8:,-4:4:,-2:4:,-4:4:,:4:,-5:4:,-5:4:,-6:4:,-5:4:,-4:2.:,:4:";
String G ="-2:8.:,-1:16:,-2:8.:,-1:16:,-2:4:,-4:4:,-4:8.:,-3:16:,-4:8.:,-3:16:,-4:4:,-6:4:,-4:8:,:8:,-6:8.:,-5:16:,-4:8:,:8:,-6:8.:,-5:16:,-4:8.:,-4:16:,-2:8.:,-2:16:,-5:8.:,-4:16:,-5:4:";

String[] kobetsu = new String[100];
float[] nagasa = new float[100];
float[] omomi2_hako = new float[100];

String gakuhu = A;

String[] results = new String[15];

int ichi;
int kigou;
int kazu; // 音符の数を記憶
int a = 0;

void setup()
{

size(600,500);
background(100,100,100);

for(int i = 0; i < 20 ; i++){


line(0,20 + 20 * i,600,20 + 20 * i);

}

controlP5 = new ControlP5(this);
controlP5.addButton("A",0,210,450,20,19);
controlP5.addButton("B",0,240,450,20,19);
controlP5.addButton("C",0,270,450,20,19);
controlP5.addButton("D",0,300,450,20,19);
controlP5.addButton("E",0,330,450,20,19);
controlP5.addButton("F",0,360,450,20,19);
controlP5.addButton("G",0,390,450,20,19);

controlP5.addButton("compose",0,440,450,20,19);
}

void draw(){
int takasa =0;
float shurui = 0,omomi2 = 0,omomi2_sum = 0,omomi = 0,omomi_sum = 0;


if(start){

//譜面の読み込み

String[] list = split(gakuhu, ','); //separate to list[]

kazu = list.length;

float[] melody = new float[kazu];
float[] nagasa = new float[kazu];//kobetsu no nagasa data
//onntei
for(int i = 0 ; i < kazu ; i++){

String[] kobetsu = new String[kazu]; //kobetsu data

//////////////////////////////////////

kobetsu = split(list[i],':');

//////////////////////////////////////
if(kobetsu[0].equals("")){ // 休符を後で見分けるために1000を代入
ichi = 1000;
}else
{
ichi = Integer.parseInt(kobetsu[0]);
}
///////////////////////////////////////
if(kobetsu[2].equals("")){ //s,x,b,d の認識
kigou = 0;
}

if(kobetsu[2].equals("s")){
kigou = 1;
}

if(kobetsu[2].equals("x")){
kigou = 2;
}
if(kobetsu[2].equals("b")){
kigou = -1;
}
if(kobetsu[2].equals("d")){
kigou = -2;
}

/////////////////

if(ichi < 4 && ichi > 0){
takasa = 12 + ichi*2 - 1 + kigou;
}
if(ichi < 8 && ichi > 3){
takasa = 12 + ichi*2 - 2 + kigou;
}
if(ichi < 0 && ichi > -4){
takasa = 12 + ichi*2 + kigou;
}
if(ichi < -3 && ichi > -7){
takasa = 12 + ichi*2 + 1 + kigou;
}

if(ichi == 1000){
takasa = 999;
}
if(ichi == 0){
takasa = 12 + ichi + kigou;
}




//音符の長さを変換
if(kobetsu[1].equals("1")){
shurui = 1;
}
if(kobetsu[1].equals("2")){
shurui = (float)1.00/2.00;
}
if(kobetsu[1].equals("4")){
shurui = (float)1.00/4.00;
}
if(kobetsu[1].equals("8")){
shurui = (float)1.00/8.00;
}
if(kobetsu[1].equals("16")){
shurui = (float)1.00/16.00;
}
if(kobetsu[1].equals("32")){
shurui = (float)1.00/32.00;
}
if(kobetsu[1].equals("1.")){
shurui = (float)3.00/2.00;
}
if(kobetsu[1].equals("2.")){
shurui = (float)3.00/4.00;
}
if(kobetsu[1].equals("4.")){
shurui = (float)3.00/8.00;
}

if(kobetsu[1].equals("8.")){
shurui = (float)3.00/16.00;
}

if(kobetsu[1].equals("16.")){
shurui = (float)3.00/32.00;
}
if(kobetsu[1].equals("32.")){
shurui = (float)3.00/64.00;
}


if(takasa < 900){
melody[a]=takasa;// 音程の移り変わりを代入していく
nagasa[a]= shurui;
a++;
kosu = a;
}
}


//変位の量を計算(特徴量1)

float[] omomi2_hako = new float[a-1];

for(int i =0 ; i < a -1 ; i++){

omomi = abs(melody[i+1] - melody[i]);

omomi_sum = omomi_sum + omomi;
}

//変位の量を計算(特徴量2)

for(int i = 0; i < a -1 ; i++){

omomi2 = (float)abs((melody[i+1] - melody[i]) * nagasa[i]);

omomi2_hako[i] = omomi2;

omomi2_sum = omomi2_sum + omomi2;
}
kekka = omomi2_sum;

for(int i = 0; i < 20 ; i++){

line(0,20 + 20 * i,600,20 + 20 * i);

}
//視覚化

noFill();

smooth();
strokeWeight(2.0);
stroke(iro,iro / 30, 150);
beginShape();
for(int i = 0 ; i < a - 1 ; i++){
vertex(20 + i*20, 20 + melody[i] * 20);
}
endShape();

a = 0;

iro = iro +40;

println(" tokuchou ryou wa = " + omomi_sum);
println("shurui wo kouryo sita tokuchou ryou wa = " + kekka);

results = splice(results, "-------------------------------------------------------------", 0);
results = splice(results, "shurui wo kouryo sita tokuchou ryou wa = " + kekka, 0);
results = splice(results, " tokuchou ryou wa = " + omomi_sum, 0);
results = splice(results, "gakuhu : " + name, 0);

saveStrings("results" + ".txt",results);

start = false;
}
}


public void A(int theValue) {
println("calcurating A: "+theValue);
gakuhu = A;
name = "A";
start = true;
}

public void B(int theValue) {
println("calcurating B: "+theValue);
gakuhu = B;
name = "B";
start = true;
}

public void C(int theValue) {
println("calcurating C: "+theValue);
gakuhu = C;
name = "C";
start = true;

}

public void D(int theValue) {
println("calcurating D: "+theValue);
gakuhu = D;
name = "D";
start = true;
}

public void E(int theValue) {
println("calcurating E: "+theValue);

gakuhu = E;
name = "E";
start = true;
}

public void F(int theValue) {
println("calcurating F: "+theValue);
gakuhu = F;
name = "F";
start = true;

}

public void G(int theValue) {
println("calcurating G: "+theValue);

gakuhu = G;

name = "G";

start = true;

}

public void compose(int theValue) {
println("calcurating A"+theValue);

String[] compose = new String[100];

}




----------------------------------------------------
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
ここまでソースコード





実際に出力された特徴量1と特徴量2の値

gakuhu : G
tokuchou ryou wa = 51.0
shurui wo kouryo sita tokuchou ryou wa = 7.25
-------------------------------------------------------------
gakuhu : F
tokuchou ryou wa = 22.0
shurui wo kouryo sita tokuchou ryou wa = 5.5
-------------------------------------------------------------
gakuhu : E
tokuchou ryou wa = 26.0
shurui wo kouryo sita tokuchou ryou wa = 3.6875
-------------------------------------------------------------
gakuhu : D
tokuchou ryou wa = 26.0
shurui wo kouryo sita tokuchou ryou wa = 3.875
-------------------------------------------------------------
gakuhu : C
tokuchou ryou wa = 24.0
shurui wo kouryo sita tokuchou ryou wa = 6.25
-------------------------------------------------------------
gakuhu : B
tokuchou ryou wa = 26.0
shurui wo kouryo sita tokuchou ryou wa = 6.5
-------------------------------------------------------------
gakuhu : A
tokuchou ryou wa = 24.0
shurui wo kouryo sita tokuchou ryou wa = 6.0
-------------------------------------------------------------





以下ライセンスの説明



Copyright (C) 2012 Shunsuke

This programis free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/

ビートルズのポスターを買っちゃいましたー(´・ω・`)

photo:01




ただ画像を回転出来ない汗

iPhoneって便利



iPhoneからの投稿