最近のトラックバック

2019.06.06

伴奏リズムパターンの評価(主観ですが)を学習させてみた[2]

前の記事から、少し手直しを行いました。
学習データ・テストデータ(x)を作る際、音の鳴っている具合を数値化した(音符の始まり=3,前の音符を伸ばす=2,休符=0)のですが、
8分音符の始まりと、前の音符からのタイと「どちらが、より音が鳴ってると言えるのか」という疑問が湧き、
結局下図のように修正しました。
Gif  

例えば4分音符は8分音符の「鳴り始め+伸ばし」なので、今まで「2,3」と表していたのが「3,2」と変わります。自分にどう聴こえているかを機械に伝える正確さを高めるための変更です。一方、私の主観的評価(y)は前回と変えていません。

このように修正したデータ100曲分をランダムに「学習データ80曲」と「テストデータ20曲」に分けて前回同様scikit-learnのSVMにて機械学習を行い、修正前後で正解率を比較しました。

すると多くの場合で正解率が5~20ポイント上昇する結果となりました。

3

 

次の図は、前回の「最初の80曲と後の20曲に分けた場合」で、機械の評価予測がどう変化したかを示したものです。
この場合は正解率が60%から70%へと上昇しました。

2gif


結論としては「アタックのあるなしの方が、私の主観の中で音の鳴り具合数値が高いと(無意識に)評価していて、それが機械にも伝わった」という感じでしょうか。

2019.05.27

伴奏リズムパターンの評価(主観ですが)を学習させてみた

2月に、クジラ飛行机さんのソフト"テキスト音楽「サクラ」(https://sakuramml.com/)"で

「いつもちがう波」という曲を作りました。Randomselectという関数によって、オルガンパートのリズムが演奏ごとにランダムに変化します。
例えば 

とかいった感じになります。よい部分も悪い部分もありますね。

さて一方、この10連休を使って「Pythonで動かして学ぶ!あたらしい深層学習の教科書(石川聡彦著・翔泳社)」を、ちょうど機械学習の基本のところまで読みました。この章では機械学習のデータサンプルは自動生成されたものでしたが、

「では何かデータを自分で作ってみよう」→「そういえばあの曲で、良い(と思う)部分を学習させたらどうなるか」と思い、以下のことを試しました。

  • 「いつもちがう波」のオルガン伴奏パターンを良し悪し(主観・〇×二択)を機械学習させてみる(教師あり学習)
  • まずは「そんなことが本当にできるか」見たい。次いで私「×」機械「〇」としたもので面白いものを発見したい。
  • サンプルデータが増え、判定者が増えれば、客観的な「良い」ものに近づく可能性もある(が、まだそこまではできない)。
  • 判定対象は、曲中の0.5拍+2小節(8分音符17個分)。ちょうど真ん中14~17秒あたり。
  • 曲を100回聴いて、それぞれ上記判定対象につき「良い」「悪い」判定。独断と偏見。
  • そのうち80曲分のパターンと判定を学習させる→残り20曲分をテストデータとして判定を予測させ、自分の判定と比較する。

最初の80曲を学習データ、残りの20曲をテストデータとした結果は下図の通りです。「当たり」が12曲=正解率60%でした。

例えば図にある最初の行は、|♩ ♩ -♩ |♩ ♩ ♩ ♩ | みたいなリズムで、私は「×」を出し、機械もそれまでの学習から私が「×」を出すだろうと予測しました。一方最後の行は裏拍を使っていてなかなかよいので、私は「〇」を出し、機械もそれまでの学習から私が「〇」を出すだろうと判定しました。そのように一致したのが12曲あったという意味です。

Photo_3

ランダムに学習データとテストデータを分けても正解率はだいたい55~70%です。機械はわかってくれたのか、まあ微妙です。

あと、いろいろこまごまと、ご参考までに。

  • 判定対象のオルガンパートのリズムを「休符=0,音符の始まり=2,前の音符を伸ばす=3」とし、8分音符17個分表示させるよう、「テキスト音楽サクラ」データを修正した。
  • 下図のように音符データが表示されるので、100曲分コピーして、明細100行のcsvデータを作成(→xとする)Photo_4  Photo_5
  • 評価は「0=悪い,1=良い」として1曲ごとに横に並べ、明細1行100列のcsvを作成(→yとする)
  • Colaboratoryにて、
    Python scikit-learnでSVMを利用した。正常終了時のソースコードは以下の通り。

-----------------------------------------------------

import pandas as pd
import numpy as np
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split

list_y = pd.read_csv("20190520_aaw_y.csv").values.tolist()
list_x = pd.read_csv("20190520_aaw_x.csv").values.tolist()

yy = np.array(list_y)
y = yy[0]
x = np.array(list_x)

model = SVC()

train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]

model.fit(train_x, train_y)

pred_y = model.predict(test_x)

print("正答:")
print(test_y)
print("予測:")
print(pred_y)

--------------------------------------------------

  • →結果は以下の通り。「正答」は私の評価で、「予測」は機械が私がこう思うだろうと予想したもの。
    正答:
    [0 0 0 1 1 0 1 0 1 1 0 0 1 0 0 1 1 0 1 1]
    予測:
    [0 0 1 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 0 1]
  • yをnumpyのarrayに変換した時、何故か角カッコが2重についたので、「y = yy[0]」という変換を追加した。
  • 「TypeError: fit() missing 1 required positional argument: 'y'」というエラーの対処にかなり手間取ったが、結局原因は「model = SVC()」の最後のカッコを忘れたことであった。

    以上です。

9日後、続きを書きました。

 

2019.02.05

Tddppole (タドポール)

昨年9月から、クジラ飛行机さんのソフト"テキスト音楽「サクラ」(https://sakuramml.com/)"で曲を作り始めました。
シーケンスソフトに比べると、何しろ作りやすい。「秒単位で鳴らす」「ランダムにヨレていく」「6分音符、20分音符」とか、短期間にいろいろなことを試すことができました。
一方今年の初めから趣味でPythonを習得し始めてます。簡単なプログラムですが「サクラ」の和音がもっと打ち込みやすくなる入力支援ツールを作ってみました。
名前「Tddppole」は「Tadpole(英語でおたまじゃくし)」を少しひねったもの。もしアイコンを作るなら、ddとppを重なった二部音符で表示して、とか思っています。
使い方は簡単。
========================= RESTART: F:\Tddppole108.py =========================
- Tddppole ver1.08 for テキスト音楽「サクラ」 -
 1小節目の和音を指定してください > fa>c
 2小節目の和音を指定してください > c#fg#
 3小節目の和音を指定してください > d#ga#
 4小節目の和音を指定してください > cd#g
…という風に4小節分の和音を入力すると、
//__o===o=oooo=o=_
o5q94l16rl16rl4'fa>c'l8'<fa>c'l16'<fa>c'l16'<fa>c'l16'<fa>c'l8'<fa>c'l8'<fa>c'
l16r
//o=_oo=o===_o===o
o5q94l8'c#fg#'l16rl16'c#fg#'l8'c#fg#'l4'c#fg#'l16rl4'c#fg#'l16'c#fg#'
//o=o=o=======_o=o
o5q94l8'd#ga#'l8'd#ga#'l2'd#ga#'l16rl8'd#ga#'l16'd#ga#'
//o===_o_o=__o===o
o5q94l4'cd#g'l16rl16'cd#g'l16rl8'cd#g'l16rl16rl4'cd#g'l16'cd#g'
 
繰り返しますか?
 y : 同じ和音で再実行,x : 和音を変えて再実行,  それ以外 : 終了 >
--------
…というような、16分音符16個分にランダムに音符・休符を埋めた文字列を生成します
オクターブを跨ぐと、次の音符からはその分を調整します。
"//__o===o=oooo=o=_"とかいうのは簡易インディケータで、o:音符の頭、=:音符の伸
び、_休符です。
文字列をサクラの入力エリアに貼り付けると、和音を刻んだ音が鳴らせます。もちろんランダムなので間抜けな結果も出てきますが、何回か出力してお好みのものを選ぶなりしてみてください。

exeは3MBを超えてしまいアップロードできませんでした。残念です。
こちらは .pyファイルです。 よろしかったらどうぞ
       ↓
キーボードパートに、ここから出てきたテキストを適宜編集して作った曲(標準midiに変換)です。「下弦 The Waning Moon」
       ↓

2012.01.22

カリンバキットで作ってみた

Amazonで島村楽器が出しているカリンバキットを買って、作ってみた。メーカーは「世界民族楽器館ティンガ・ティンガ・ハウス」。最近作った曲のキーがA(イ長調)で、それに合わせて8本の鍵盤をE,G#,A,B,C#,D,E,F#に設定した。

説明書によるとまず箱を作って、それから鍵盤支持板・鍵盤・ブリッジをセットしていく順番になっているが、私は一度いろんなものをカリンバにする実験をしたかったので、上蓋部分に鍵盤を付けて音の鳴るところまで作ってしまった。ボウルとかカーポートにカリンバの板を載せるとうまく振動が伝わって面白い結果になったが、一番共鳴させたかった自転車のカゴでは振動が抑えられてしまった。実験を終えたので箱型に作り直す。

Nec_0625最初、音程の低い方から順番に鍵盤を並べて鳴らしてみると、弾いた鍵盤の隣の音もかすかに響き、2度の音程で濁ってしまう。そこで写真のとおり、一番低いEを真ん中に置き、互い違いに並べるとちょうど左側がE7のコード、右側がAのコードとなって隣の音が混ざってもまあよくなった。高い部分を両手で弾けるようになって、意外に演奏しやすい。

8音だけでどれだけできるか、いろいろ弾いている。

2011.12.24

We Like Coasting (original song,midi version)

"20111224welikecoasting.mid"をダウンロード

We Like Coasting
                                 word and music by fu_r

We like coasting, we like coasting
Mainly we ride for idling feet on pedals round and round
Keep your bike silent
to run it efficient
If you go on the smooth roadway
coast to a little higher ground

We like coasting, we like coasting
We can listen to the headwind and traffic noises at a time
With every type of frame
we'll enjoy much of this game
Always rely on brakes
then lookup front and feel it prime

listening to the headwind
and listening to the traffic noises
42 to 21 and 42 to 18
the extra work on bike of 16 kilograms
and extra flesh on bike of lighter weight
giving the climbing up and back to coasting

                    Copyright(C) 2011 fu_r All rights reserved.
---------------------------------------------------

自転車ソングを作りました。
自転車の楽しさって結局惰行でしょ。だからどんな自転車でも楽しいし、余計な音は立てないし、ブレーキは大事でしょ。 要約すればこうなります。

5年使った「サブナードスポーツ」へのはなむけとしています。42T-21T、42T-18Tというのは3速、4速のギアです。4速のところのギターのリズムは、ペダルとタイヤの回転速度比を示しています(^^;)

We_like_coasting_1r

We_like_coasting_2r

2009.09.13

プディング風味?プリン試作

EMITというサイトの「前人の植えた樹 | ハウスプリン&ママプリン」というページにて、カスタードプディングと、私の子供の頃から慣れ親しんだプリンが、違うものであることを知ったので、
ちょっと試してみる。

Dvc00145 ハウスの「プリンエル」に日東紅茶「ロイヤルミルクティー・カスタードプディング風味」を混ぜてプリンを作ったら、カスタードプディング風味になるかどうか。プリンエル1箱分+ロイヤルミルクティー2/3包程度+牛乳400cc。

結果:カスタードプディング風味という以上に、ロイヤルミルクティー風味のプリンが生成。妻は「シロップいらない」と言った。確かに甘いけど、おいしい。

2009.08.25

敷居が低くなったこと

「パパスイッチ」の「料理っていわれても…」の記事にトラックバックさせていただきます。
私も料理はどうにも苦手で、なんとしても避けたいものの一つだったのですが、あることをやってみた途端に、敷居がみるみる低くなってきました。まだ簡単なものしかできませんが、楽しみが一つ増えてとてもうれしいです。

私が試したのは、レシピの内容を自分で図に書いてみるというものです。

以前料理をやってみた時、作りながら本の文字を追っかけていくことに苦痛を感じたのがきっかけでした。
「1.フライパンを火にかけ、」…はい、火にかけた。
「みじん切りにしたナントカとナントカを入れ」 … …最初はみじん切りじゃんよー(><;)
ま、このくらいのレベルなんですが、料理本が出来上がり写真と文字だけでしか書かれていない、というのが苦手でした。じゃ、自分に分かるような図を描いてみよう、と。

  • Dvc00144_2どのタイミングで何を入れるかがわかればよい
  • 材料と分量を一緒に書いておいたら便利だった。買出しにも持っていける。
  • 調理中は目の前に置いておき、本当に分からないときだけ本を見る。

写真は近所のスーパーでもらったチラシにある「ひき肉とナスのカレー」を作ったときの図ですが、出来上がりも妻子に好評で良かったです。

2009.07.25

The Tire てな動画

5日間、「再生回数:1」をキープしていたので、ここにも乗っけてみます。

自転車からタイヤと地面を撮ってみただけです。
見てると眠くなります。

2008.12.03

例えばパノラマカーの顔をどう捉えるか。私は1階前面ガラスを目に、逆富士の行先表示を口に見立てたウルトラセブンのような顔である。0系新幹線の場合は上の運転席が目で、だんごっ鼻といわれる部分は口に見えたりする。しかしこのページを見て「ああ、こういう見方もあるのか」と思った。

そんな折、この顔と目が合ってしまった。
豊橋にデビュー間近のほっトラム
それでも人と環境にやさしい電車には変わりがない。

2008.03.18

買い換え

080316_010403080317_220842 携帯電話をSH904iに買い換えたのですが、
暗いところでカメラの画像がこんなんなってしまうのは、単にレンズの汚れでしょうかね…。

ちなみに写真左は、4年使って送話機能が壊れてしまったP900i。手軽なカメラとしてなら、まだいけそうな気もします。