ギターキット/Elm/就/...

1.エレキギターを取得しました。

 高品位なオーディオを吐くDAWシーケンサがいくらでも手に入る今、なぜ人は楽器なんて面倒なものをやるのでしょうか??????? 音楽が情動のメディアであるように、楽器も一種のメディアなのかもしれません。肉体と音の間の。 とりあえず人間には可制御な物が増えると精神に良いという経験則があります。リアタイだとなお良い。

 そんな訳で、そこそこ取り回しの良い楽器というのが手慰みでほしくなるのですが、これには様々な制約が存在します。 当然のように集合住宅に住んでいますから、生楽器はアウトです。 僕は相対音感はともかく絶対音感が極限まで壊滅的なので音程がアナログな楽器はダメです。 ほいで音域が辛いのもいやだし、コードも弾きたい。さらに左利きなので鍵盤が全体的に辛い、となるとエレキギターになります。

 というのはこじつけで、単に友達がギターもってて僕も欲しいなーと思っただけです。 このように人は思い出すついでに様々な文脈を捏造できる。

 僕は仕組厨なので自作厨をしばし合併症として発症します。 で、Googlingするとギターキットというのがあり、無塗装ボディにバラバラのパーツがセットになったやつが出てきます。 はい、君に決めた。

ammoon 未完成のDIYエレキギターキット バスウッドボディー ローズウッド指板 メイプルネック特別デザイン ヘッドストックなし

なんかHOSCOとかいうメーカーの作例は結構転がっているのですが、 こっちのメーカーまだ新しいのか全然でてこない... 販売元は深センっぽい? まぁ製造も中国でしょうね。 ちなみに決めた理由はヘッドレス/24フレット/3PUあたりです。 軽い/音域広い/音色広い、といったとこでしょうか。ミーハーですね。で、その結果。

f:id:phykm:20180509203725j:plain

 塗装は...めんどい...今度で...

 新興中華キット(?)ということで、まぁ様々な事象がありました。

 まずボディーにピックアップ3つとブリッジを固定するんですが、 ピックアップ2つとブリッジが入らないんですよね。サイズ的に。 ボディーにこう、くぼみを入れるの、なんか座くりとか呼ぶらしいですが、 座くりのエッジが甘すぎて、四角い形のダブルコイルピックが普通に入らない... シングルコイルピックもなんか妙に膨らんでいて入らない... さらにブリッジもサイズがギリギリ過ぎて入らない... これフローティングブリッジ(バネで弦張力と釣り合わせているだけで固定されていない)の一種なので、 本当は可動範囲だけの隙間があかないといけないんですが...。 まぁそういうのもあるさ、とカッターとナイフとリューターでゴリゴリして入れました。

 しかしブリッジにはもう一つトラップがあり、そのままつけるとなんと弦長が足りない... オクターブチューニングできません。しかたないので、更に座くりを広げて少し下につけました。

f:id:phykm:20180509203742j:plain
道具がないのでカッターとリューターで削ったことによる手作り感

それから、ネック先端に弦をロックするテールピースがぴったりつかない...同等品の

https://www.amazon.com/ammoon-6-string-Headless-Electric-Locking/dp/B01N6C99RU

にまさにそういうトラップによる悲劇が書かれており、とりあえず噛み合うまで削りました。

   回路ボックスのフタがネジ止め式ですが、明らかにネジ穴の位置を間違えている...

f:id:phykm:20180509203755j:plain

 これ、止めてある二箇所には最初穴が空いてなかったんですよ。空いている二箇所はよく見ると穴の向こうが虚空で、 要するにネジが刺さるための土台が無い...。まぁこの程度は別にどうということは...

いやさすがに組み立てればわかる欠陥ばっかやんけ、ちゃんとチェックして、どうぞ。

   ギター組み立てのネックは、いろいろ調べたところ、まさにネックらしいのですが、 キットについてここだけはちゃんとしてました。ボディとネックがめちゃくちゃタイトに刺さる。 ネック角度が甘いと弦が指板から落ちるなどの致命的な欠陥になるのですが、そのようなことは起きませんでした。

 演奏感ですが、ウーン、よくわかりませんね(ギターが弾けるとは言っていない)。 実際Youtubeなど探すと、安ギターと高級ギターの音色比較、みたいな動画も結構あって、 見てみると、たしかに高いやつのほうがくっきり鳴ってる気はするな…?という感じはありますが、 いかんせん楽器の特性上エフェクターとかでいろいろ変わるものだし、 それらと比べてこの素組みギターがどうかというのはよくわからない... というかそもそもエフェクターもアンプももっていないので、 現状オーディオIFでDAWを通してディストーションをかけるという遊び方になっており、単純比較が困難。 塗装したらまた音色変わるかな?

 いまのところ音域広いし、コンパクトで弾きやすいし、不満はないですね。 自分で組み立てたということで、ギターの勝手もわかり、 なんか起きてもまー作った時みたいに改造すればいいやとなる心理的障壁のなさもよい。 エレキギター、もうとにかくただのアナログ回路なんですよね... 要するにアナログ回路わかっていれば無限に改造できるという...

 エレキギター自作勢というのも特に海外などに一定数存在するようで、 Amazon.comとかだと普通にもっといろんなメーカーがバラパーツを売ってたりします。 弦張力に耐えるられる程度にボディとネックをつなげて、 ナットの調整範囲内で弦をまっすぐつければ何でもギターになる。 あとはピックアップだけギター用のやつを買って、出力はアナログ信号処理、という流れなので、 いい感じにアマチュアにも届く技術水準といえます。

   いずれ改造にも手を付けたい。

2.Elmに入門しました。

 以前HasteとかいうHaskellによるAltJS?を触ったのですが、またHaskellっぽいJS?をちょっと前に知りました。 正確にはJSではないのですが...

home

はじめに · プログラミング言語Elmの薄い本

まんまHaskellやんけ。

 いや、ところどころ違うのですが(後述)、一般構文は殆どHaskellとかOCamlのそれですね。REPLすらある。 最大の特徴は、これは汎用プログラミング言語ではなくてDSLで、 The Elm Architectureに従ってWebページを記述するのに特化している点でしょう。 プログラムのエントリポイントの型がそもそも独自のものに決められていて、 それが要求するフィールドを定義する、というスタイルのようです。 コンパイルするとページをまるごと吐くので、HTML/JS/CSSの一石三鳥(ほんとか??????????)

   このThe Elm Architechtureというのがなかなか洗練されており、かなり抽象度の高いことができます。 Hasteは単にJSがHaskellで書けるだけだったので、ページ要素の操作はまんまIOで、 コールバック登録もIOとかで、要するにMVCみたいなことをやろうとすれば全部自分でやる必要があるのですが、 Elmの場合はそのへんも抽象化されており、コールバックの「登録」みたいな操作はしません。定義はしますが...

とりあえずこんなん書いてみました。

http://www.asahi-net.or.jp/~fu5k-mths/elm/elm_block/index.html

入門してみた所感としてThe Elm Architectureの「直観」を描いてみたいと思います。

f:id:phykm:20180509222522p:plain

無理。

なんか紐図( https://arxiv.org/abs/1401.7220 とか)っぽいものができる気がしたが気のせいだったぞ!!!!!!!!

文で書きます。基本的には代数的データ型を駆使して、MsgとModelという型を定義し(これは本当になんでもよい)

init:(Model,Cmd Msg)
update:Msg->Model->(Model,Cmd Msg)
subscription:Model->Sub Msg
view:Model->Html Msg

を定義すれば一丁あがりというものです。

型を適当に解釈できれば、この仕様のイメージがつかめます。

Modelは定義するWebページの内部状態、

Msgは内部のメッセージングです。

Cmd aはメッセージaに基づくコマンド、

Sub aはメッセージaを吐くかもしれないリスナー、Html aも同様にaを吐くかもしれない文書です。

このとき、 定義するフィールドはそれぞれ、 init:初期状態と初期化処理 update:Msgに応じた状態更新と副作用 subscription:Modelに応じたリスナー view:Modelの見え方 と解釈できます。

 Msgはクリックやキーボード、時間経過など、Webページが識別してほしいシグナルを直和などを使って全て書き下し、 ModelはWebページが把握しておいてほしい全ての情報を直積やリスト化などで書き下すことで定義すればよいです。 状態遷移などで把握すべき情報が変わる時はそこを直和にする。オートマトンっぽい。

 Msgがどこかから吐かれるたびに、updateが呼ばれます。updateは起きたことに基づいて状態を更新して、 ついでにCmd Msgで何か仕事をできます。状態は常にviewで表示されます。

上のコードは

github.com

にあります。ていうかゲームプログラム難しすぎるのでは?????????????????

 状態としてReady、または Game (ボール状態とブロック、終了フラグ)、 メッセージとしてクリックとマウス移動を取っています。 描画に用いているCollageというパッケージはCanvasベースらしいので、できること/性能もそれに準じたものと思われます。 あんまり複雑なのをやるとつらそう。ただWebGLのパッケージも存在するっぽい。

Elmの開発環境(?)は結構整っているように思えます。とりあえず公式から処理系をインストールし、

サンプル

examples

をみながらやりたいことを考え、

Elm Packages

で必要なパッケージを調べます。必要なパッケージがわかったら、 elm-pachage install を必要なだけ打って、インポートし、書きます。

 どうも開発ディリクトリに非標準パッケージを直接DLしてくる(elm-stuffというディリクトリができる)っぽいので cabal hellみたいなことは起きにくい? ページ自体はちょっと重め。

 REPLもあるのでこれにロードして関数をチェックすることもできます。 できたページを確認するのにコンパイルしてもいいですが、elm-reactorとかいうドチャクソ便利なものがあり、 これを起動するとローカルサーバーが立ち上がって.elmファイルを直接ブラウザから見れるようになります。ソースファイルを選択すると、 ファイル生成なしに、サーバーがコンパイル後のページを返そうとします。

 エラーがあった場合にはエラー文もブラウザで見えます。地味にコマンドラインよりも見やすいので助かりがあります。 ブラウザをリロードすれば再コンパイルします。

Haskellと微妙に違う、といいましたが、気になった点としては以下です。

  • Cmd Subのような->みたいなカインドはあるが、型クラスはない。
  • ::と:が逆。
  • リスト型は[a]じゃなくてList a
  • 型定義が基本typeかtype aliasだけでスッキリしている。もちろん前者にコンストラクタが要る。
  • 実感は無いが、正格評価らしい?
  • トップレベルのパターンマッチができない(?)。case of で頑張る。

最後のは表現が正しいのかわかりませんが、要は

sum::List Int->Int
sum [] = 0
sum (x:xs) = x + (sum xs)

じゃなくて

sum ls = case ls of
    []     -> 0
    (x:xs)-> x + (sum xs)

としろということです。

感触は結構いいのですが、これ本気でCSSデザインやろうとしたらどうなるのか... 一石三鳥だが要するに三鳥分定義を書かなきゃいけない点は変わらず... あと言語の方向性からして厳しいとは思いますが、他JSやCSSライブラリと連携取れるんだろうか...

なんか来月に日本語の解説書が出るっぽい。

基礎からわかる Elm

当然のごとく予約しました。

3.就をやっている。

就をやっている。助け...

4.論をやらなくていいのか

やばい。