わしろのめも

たいした話はしません

matplotlib.widgets.Sliderを使ってみる

はじめに

日本語の記事があまり見当たらなかったので書きます.自分用メモも兼ねてます.

動作環境

Python 3.6.1 :: Anaconda 4.4.0 (matplotlib 2.0.2)

Sliderオブジェクトについて

Sliderオブジェクトはmatplotlib.widgets内のクラスで,マウス操作で値が変わるスライダを配置できます.IFFT後の波形を見ながらフィルタのしきい値を決めたいときなんかに便利です(たぶん).
また,matplotlib.widgetsには他にもラジオボタンAPIなどが用意されています.

実装

公式のサンプルコードとは別の例として,ギターの音を録音したwavファイルの波形をクリッピングしてみます.

# -*- coding: utf-8 -*-

from scipy.io.wavfile import read
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider

inputfilename = './smoke.wav'

samplingrate, wavedata = read(inputfilename)
wavedata = wavedata[:, 0] #モノラルにする

# グラフ描画位置などの設定
fig, ax = plt.subplots()
plt.subplots_adjust(left=0.1, bottom=0.15)

graph, = plt.plot(wavedata)

# Sliderの位置設定
ax_thre = plt.axes([0.1, 0.01, 0.8, 0.03])
# Sliderオブジェクトのインスタンスの作成
threshold_slider = Slider(ax_thre, 'Dist', 0, wavedata.max(),
        valinit=wavedata.max())

def threshold_update(slider_val):
    wavedata_updated = wavedata.clip(-(slider_val), slider_val)
    # グラフの値のアップデートと再描画
    graph.set_ydata(wavedata_updated)
    fig.canvas.draw_idle()

# Slider値変更時の処理の呼び出し
threshold_slider.on_changed(threshold_update)

plt.show()

plt.plot()はそのままだとリストを返してしまうため,graphのあとにカンマをつけて先頭の要素(Line2Dオブジェクト)を受け取るようにしています.
Sliderクラスに渡している第一引数はAxes,第二引数はラベル,第三・第四引数はインスタンスが持つ値の最小値と最大値,キーワード引数initvalで指定しているのは初期値です.
threshold_slider.on_changed(func)メソッドでSliderのインスタンスthreshold_sliderの値が変化したときのイベントハンドラを指定します.イベントハンドラはSliderインスタンスの現在の値をただひとつの引数として持ちます.
また,今回は使用していませんが,Slider_instance.valの形でイベントハンドラの外からでも値を保持しているインスタンスの属性にアクセスできます.

出力

f:id:beybr6:20170707232922g:plain

PythonでWAVEファイルのヘッダ情報の読み取り

環境

Python 3.6.0

WAVEファイルの構造について

パラメータ サイズ[byte] 内容
riff_chunk_id 4 ‘RIFF’
riff_chunk_size 4 size + 36
riff_form_type 4 ‘WAVE’
fmt_chunk_id 4 ‘fmt ‘
fmt_chunk_size 4 16
fmt_wave_format_type 2 PCM: 1
fmt_channel 2 モノラル:1, ステレオ:2
fmt_samples_per_sec 4 サンプリングレート
fmt_bytes_per_sec 4
fmt_block_size 2
fmt_bits_per_sample 2 量子化精度
data_chunk_id 4 ‘data’
data_chunk_size 4 size + 36
data_data size 音データ

WAVファイルの基本的な構造はこのようになっており,これ全体でRIFFチャンクと呼ばれる.サブチャンクとしてfmtチャンクとdataチャンクが存在し,それぞれの持つパラメータには対応する名前をつけてある.
block_sizeはwavファイルとして記録した音の最小単位のバイト数を表し,8bitモノラルなら1,1bitステレオなら2,2bitモノラルなら2…となる.bytes_per_secは1秒間の音の記録に必要なデータ量で,block_sizeとsamples_per_secを乗じたもの.
なお,各チャンク及びサブチャンクのchunk_idとriff_form_typeがビッグエンディアンで,それ以外はリトルエンディアンである.

コード

import sys
from pprint import pprint

filename = sys.argv[1]

wavfile = open(filename, 'rb')

wav_header = {}

wav_header['riff_chunk_id'] = wavfile.read(4).decode('ascii')
wav_header['riff_chunk_size'] = int.from_bytes(wavfile.read(4), 'little')
wav_header['riff_form_type'] = wavfile.read(4).decode('ascii')
wav_header['fmt_chunk_id'] = wavfile.read(4).decode('ascii')
wav_header['fmt_chunk_size'] = int.from_bytes(wavfile.read(4), 'little')
wav_header['fmt_wave_format_type'] = int.from_bytes(wavfile.read(2), 'little')
wav_header['fmt_channel'] = int.from_bytes(wavfile.read(2), 'little')
wav_header['fmt_samples_per_sec'] = int.from_bytes(wavfile.read(4), 'little')
wav_header['fmt_bytes_per_sec'] = int.from_bytes(wavfile.read(4), 'little')
wav_header['fmt_block_size'] = int.from_bytes(wavfile.read(2), 'little')
wav_header['fmt_bits_per_sample'] = int.from_bytes(wavfile.read(2), 'little')
wav_header['data_chunk_id'] = wavfile.read(4).decode('ascii')
wav_header['data_chunk_size'] = int.from_bytes(wavfile.read(4), 'little')

pprint(wav_header)

出力

{'data_chunk_id': 'data',
 'data_chunk_size': 1755180,
 'fmt_bits_per_sample': 16,
 'fmt_block_size': 4,
 'fmt_bytes_per_sec': 176400,
 'fmt_channel': 2,
 'fmt_chunk_id': 'fmt ',
 'fmt_chunk_size': 16,
 'fmt_samples_per_sec': 44100,
 'fmt_wave_format_type': 1,
 'riff_chunk_id': 'RIFF',
 'riff_chunk_size': 1755216,
 'riff_form_type': 'WAVE'}

おしまい

参考

東京事変とかいう最強のバンドについて

はじめに

この記事は,ロックバンド Advent Calendar 2016 - Adventarの13日めの記事です.昨日はrokuzeudonさんによるMO'SOME TONEBENDER の Ride into HEAVEN がとにかく良いから - LOGzeudonでした.
モーサムは「You are Rock'n Roll」でガレージ系のイメージが強いです.でも今日はちょっと趣向の違う,東京事変というバンドの紹介をします.

まずは聴け

www.youtube.com

www.youtube.com

www.youtube.com

どうですか?全人類に自分の好きな音楽を押し付けるみたいなことをするのは好きではないので,「合わないなあ」と思った方は遠慮無くブラウザバックしちゃってください.

バンドとメンバーについて

東京事変はJ-POP歌手である椎名林檎が中心となり2003年に結成され,2012年の閏日に人気の絶頂の中解散しました.
そもそもなぜこのバンドが生まれたかというと,Wikipediaには

2003年当時、引退を考えるほど音楽活動の継続にモチベーションを見出せなかった椎名林檎が、「メンバーたちのために書き下ろすつもりで曲を書けば意欲が湧くのではないか」と考えて結成
東京事変 - Wikipedia

とあります.他の多くのバンドと違うところは,既にそれなり以上の音楽活動の実績がある人間をメンバーとして引き入れているところです.RPG風に言うと,勇者が生まれの村の幼馴染たちとではなく,キャリアや実力が認められている戦士や魔法使いたちと共に魔王討伐に向かった感じです.
そんなこんなで東京事変を語る上でメンバーについての話は欠かせないので,それぞれ紹介していきます.

  • 椎名林檎 (ボーカル)
    言わずと知れたJ-POP界の女王的な存在(?)で東京事変の大黒柱です.バンドの多くの曲の作詞作曲をしました.解散後も精力的に活動しており,NHKにワールドカップのテーマ曲を提供したり,リオオリンピックの閉会式にも登場したり,めっちゃすごい人です.

  • 晝海幹音 (ギター)
    東京事変の初代ギタリストで,「ヒラマミキオ」と読みます.東京事変メンバーとしてのデビュー前からソロ活動を行っており,1stシングル「群青日和」のB面「顔」の作曲なども行いました.独特のジャキジャキと深く歪んだ音作りが特徴です.「教育」後に脱退しました.

  • 浮雲 (ギター)
    東京事変の二代目ギタリストです.浮雲という名前は東京事変での活動時にのみ使用しており,現在は長岡亮介名義で3ピースバンド「ペトロールズ」のギターボーカルとして活動しています.また他のアーティストのレコーディングにも数多く参加しており,星野源の「SUN」やドラマ逃げ恥で話題の「恋」のギターはこの人が弾いていたり.椎名林檎のシングル「長く短い祭り」でデュエットを歌ったりしています.カントリーというジャンルが出身のギタリストで,非常に独特な味のあるフレーズが多いです.

  • H是都M (キーボード)
    初代キーボーディストで,「エイチ ゼット エム」と読みます.2015年の解散までヒイズミマサユ機名義でジャズバンド「PE'Z」に所属,現在進行形で「H ZETTRIO」にも所属しており,幅広い活動を行っています.1stシングル「群青日和」の作曲を行い,その他の曲でもロックとジャズを足して2で割ったようなハチャメチャにカッコいいフレーズを弾いています.群青日和は間違いなく東京事変で最も有名な曲ですが,この人の良さを知るにはむしろ他の曲のほうがいいです.晝海幹音と同じく,「教育」後に脱退しました.

  • 伊澤一葉 (キーボード・ギター)
    二代目キーボーディストです.たまにギターも担当します.H是都Mよりはポップス色の強い落ち着いたフレーズが多いイメージです.現在も「the HIATUS」でELLEGARDENの細美武士などと活動したり,大橋トリオ土岐麻子など,ぼくが好きなアーティストとのコラボが多く,すき.はじめに挙げた「キラーチューン」という曲は伊澤さんの作曲になります.

  • 亀田誠治 (ベース)
    東京事変結成前からも音楽プロデューサーとして活動しており,非常に多くのアーティストに楽曲提供を行っているめっちゃすごい人です.メンバー変更前後でバンド全体の雰囲気が大きく変わったのにもかかわらず,それに合わせて音楽お化けみたいなメンバーを支え続けました.この人も音楽お化けなんですけど.

  • 刄田綴色 (ドラム)
    「はたとしき」と読みます.オープンハンドの変態ドラマーさんですが,椎名林檎フジファブリックのサポートも経験しています.現在はSchool Food Punishmentの元ベースである山崎英明などと「scope」として活動しています.「喧嘩上等」のMVで演舞をしてるのはこの人です.

ざっとこんな感じです.椎名林檎のワンマンバンドと思われがちですが,おかげで全然そんなことはなく,むしろ東京事変後の椎名林檎のソロ活動にも大きく影響を与えました.単純に商業的な話だけではなく,そういった点でも大成功したバンドなのでしょう.

アルバム紹介

東京事変が活動期間中に出したフルスタジオアルバムは合計5枚と少なめなので,全部紹介します.加入してる人は今すぐ音楽配信サービスを開きましょう!

  • 1stアルバム「教育」

晝海幹音とH是都Mが参加した唯一のアルバムなだけあり,他のアルバムとは趣向が異なっています.椎名林檎のデビューアルバム「無罪モラトリアム」に似た,退廃的で少し暗めの雰囲気があります.東京事変の代名詞的な曲「群青日和」や,椎名林檎の「りんごのうた」のセルフカバーである「林檎の唄」も収録されています.
「御祭騒ぎ」や「現実を嗤う」は初期メンバー各人の味が強く出ており,ぼくの好きな曲です.
オススメ度: ★★★★☆

  • 2ndアルバム「大人」

メンバー交代後初のアルバムですが,「スーパースター」「透明人間」は旧メンバー所属時点で曲が完成しており,ライブDVD「Dynamite Out」では旧メンバーによるバージョンを聴くことができます.「秘密」「雪国」などは前作を受け継いだような暗さがありますが,ボサノバのナンバー「化粧直し」やジャズチックな「黄昏泣き」のような曲も収録されており,2ndにして早くもバンドの手広い音楽性が感じられる一枚になっています.
「透明人間」での,浮雲の独特すぎるのに主張が激しくないギターと伊澤一葉の美しいピアノラインとの調和は必聴です.
オススメ度: ★★★☆☆

  • 3rdアルバム「娯楽」

本アルバムでは椎名林檎は作詞のみで作曲には携わっておらず,全て浮雲伊澤一葉亀田誠治の3人による曲となっています.
落ち着いたポップス調の「ランプ」から始まり,似た雰囲気の「メトロ」で終わる、全体でポップス色が強い「かわいい」アルバムです.上でも挙げた代表曲「キラーチューン」や,椎名林檎浮雲伊澤一葉の3人がボーカルを担当する隠れた人気曲である「某都民」などが収録されています.
オススメ度: ★★★☆☆(3.5)

  • 4thアルバム「スポーツ」

明るくキャッチーなポップス風の曲が多く,ベストアルバムのない東京事変の入門としては非常にオススメの一枚です.
「キラーチューン」と並ぶ代表曲の「能動的三分間」「閃光少女」に加え,ぼくが東京事変で最も好きな曲の一つである「FAIR」なども収録されています。またアルバム全体の流れが非常によく,ライブのセットリストのようにメリハリがついています.
「能動的三分間」はそのタイトルの通り再生時間がちょうど3:00なのでラーメンタイマーとして使えますが(そんな感じの歌詞もある),私はカップ麺は硬めが好きなので残念ながら活用できていません.ちなみにライブではバックスクリーンで3分のカウントダウンが行われる演出がありました.
オススメ度: ★★★★★

  • 5thアルバム「大発見」

ミニアルバム「color bars」やシングルB面集「深夜枠」などを除けば最後にリリースされたアルバムになります.
「新しい文明開化」「空が鳴っている」など、伊澤一葉がキーボードではなくギターを弾くロックナンバーが多めになっていますが,「教育」の曲のようなダウナーな雰囲気はありません.「恐るべき大人達」のファンキーなギターがハチャメチャに良かったりはしますが,東京事変の良さがちょっと薄れている感じはあります.「これ!」といった曲はなく,アルバム自体のコンセプトもボヤッとしているイメージです.
決して駄作ではありませんが,他の方の感想も気になるところです.
オススメ度: ★★☆☆☆

その他の作品

B面集「深夜枠」は良作品だと思います(アルバムがいいというかシングルB面がいい).「心」「恋は幻」など、他のアルバムには入っていない東京事変らしい良さがある曲が多いので、各曲要チェックです.
ライブでは毎回異なるアレンジで椎名林檎の「丸の内サディスティック」が演奏されており,映像作品「珍プレー好プレー」に収録された「幕の内サディスティック」と題された特別編集版が,公式でYouTubeにアップロードされています.

youtube.com

ぼくにとっての東京事変

ぼくが東京事変に出会ったのは今から3年ほど前,クラスメイトに影響されてのことでした.それまでは特に意識しなくても勝手にテレビから流れてくるような,流行りの売れっ子バンドによる曲くらいしか聴いていなかったのですが,東京事変の広い音楽性に触発され,邦楽/洋楽やジャンルを問わずに色々な音楽を能動的に聴くようになりました.
それとぼく自身ほんの少しですがギターを嗜んでいます.楽器を始めると聴く曲のコード進行や音作り,タイム感や演奏に使われている技法などにも意識が向くようになり、音楽の楽しみ方が広がります.そういう意味でこの東京事変というバンドには,メンバーが各々の音楽活動で積み上げてきたものによる無限の奥深さがあり,どのアルバムのどの曲もメンバーの厚いキャリアの上に成り立っています.そのためか初めはピンとこなかったアルバムでも改めて聴くと「えなにこれヤバいじゃん」ってなることがしばしばあり、これからどんな音楽と出会おうとも,自分の中では一つの形で音楽の正解にたどり着いたバンドとして在り続けると思います.

あと,ぼくが東京事変のファンになったのは解散後ですが,現在でも椎名林檎のライブに浮雲やH是都Mが参加したりしているので,近いうちに見に行けたらなーと思っています.

おわりに

記事のテーマに東京事変を選んだ理由は2つあります.1つはもちろん好きなものの話をしたかったというもので,もう1つはぼくと同じように,幅広い音楽性を持った東京事変を通じてみなさんがもっと色んな音楽を聴くようになってくれたらという思いがあったためです.
さすがにメタラーにジャズを押し付けるみたいなことをする気はありませんが,例えば自分が好きなバンドに影響を与えた音楽を聴くなんていうのは面白いと思います.今聴いてるバンドにも新しい発見があるかも知れません.

というわけで今回はここまでです.次はfeatherplainさんによるTalking Headsとかのお話です.知らないバンドなので楽しみです!

参考

東京事変 | トップページ
東京事変 - Wikipedia

【AfterShokz】ゲーム用に骨伝導ヘッドホンを購入した話【AS400】

はじめに

私はSplatoonというゲームが好きです.ご存じの方も多いと思いますが,任天堂WiiUの人気ソフトとなったTPSです.非常に楽しい反面,他のFPSやTPSと比較してもゲームスピードがかなり速く,目まぐるしく戦況が変化するため,遊んでいてかなりの体力を消耗します.
今までは通常のヘッドホンで音を聴きながらプレイすることが多かったのですが,ヘッドホンによる圧迫感もSplatoonでの体力の消耗の要因になっていると考え,より装着感の軽い骨伝導ヘッドホンを購入しました.もちろん単純な骨伝導への興味も購入の大きな理由の一つです.

骨伝導ヘッドホンについて

骨伝導は,端的に言うと頭蓋骨に音として振動を与える技術です.鼓膜がその頭蓋骨の振動を拾うため,外耳を通さなくても音が聞こえます.骨伝導ヘッドホンは耳を塞がずにこめかみ辺りに小さなスピーカをあてる形になるため,カナル型イヤホンや密閉型ヘッドホンと違って外の音も同時に聞こえます.
そのような特徴から,ランニングやサイクリング・運転中など「音楽と環境音を同時に聞きたい」というシチュエーションで使われることが多いようです.実際Amazon骨伝導ヘッドホンを見ていても,運動中での使用を想定した商品がほとんどでした.今回私が購入したAfterShokz AS400も例に漏れていません.

そんな理由から煩わしいコードが存在しないBluetoothで音声伝送が行われる商品が多かったのですが,今回はゲームでの使用になるため,Bluetoothの遅延が気になりました.それに対してAS400は遅延を気にしなくて良い有線であり,なおかつ比較的安価(5500円程度)であったため,購入に踏み切りました.

無線骨伝導ヘッドホン 有線骨伝導ヘッドホン
価格 5000~15000円程度 5000~6000円程度
商品バリエーション 多い 少ない
遅延 ある ない

無線にも有線と同じ価格帯の商品がいくつかありましたが,レビューが微妙なものが多かったです.

購入

家に近い倉庫から出荷されたのか,早朝にAmazonで購入してその日の夜には届きました.

外箱はこんな感じ.


イカしたハードケースもついています.この辺はやはりスポーツ仕様ですね.


ケースの中身.充電用microUSBケーブルも付属しています.説明書は日本語にも対応.


モノ.


モノ.

感想

1週間ほど使ってみた感じですが,ざっと思ったことを挙げてみます.

  • 装着感は非常に軽く自然
  • メガネとの併用は一応可能
  • 音質は正直微妙で高音質原理主義者には少し厳しいかも?
  • サラウンド感が薄い
  • 音漏れは案外大丈夫
  • 電源/音量コントローラのせいで有線なのに充電式なのが不便
  • コードが貧弱そうで断線が怖い
  • 顔が大きい人は使いにくそう?

こんなところですが,もう少し詳しく話していきます.

装着感・メガネとの併用

耳に耳掛けが2つ乗る形になるので多少の不便と違和感はありますが,ヘッドホン自体が非常に軽いためメガネと同時に装着することは可能です.特に耳が痛くなったりもしません.

音質・サラウンド・音漏れ

音質は決して良いとは言えないため,特に理由がなければ普通のヘッドホンでいいかなといった感じです.私は音楽鑑賞のために買ったわけではないので十分でした.
サラウンド感の薄さについて,私はSplatoonプレイ中に効果音を聴いて相手のおおまかな位置を特定することがままあるため,これはちょっと難点でした.気合いを入れてプレイするときには普通のヘッドホンを使うことにしています.
音漏れがあると,通話しながらゲームをする際に相手の声が自分のマイクに入って反響することがあるのですが,これは大丈夫でした.マイクのしきい値を設定できないSkypeでも反響はなかったので,普通の音量で使う文には問題ないでしょう.

その他使用感

AS400もスポーツ用であるため,音楽プレイヤーを操作しなくても音量などを調節できるようにコードにコントローラがついています.これのせいでUSBからの充電が必要です.これが結構面倒で,長時間Splatoonをしても疲れにくいように購入したのにもかかわらず,長時間プレイしていると充電が切れてしまいます.思い切ってコントローラ部を切り落とすことも視野に入れています.
それとコードがなんかヘロヘロなんですよね.特に外箱の商品写真にも写っていますが,ヘッドバンドとケーブルの接続部分がかなり貧弱そうで不安です.

総評・おわりに

先にも言ったような「音楽と環境音を同時に聞きたい」方には骨伝導ヘッドホンは非常にオススメです.むしろこれ以上ない選択肢なのではないでしょうか.
一方で私のようにゲームのために使うことを考えると,正直イヤホンでいいじゃんといったところです.イヤホンのような閉塞感はありませんが,特に骨伝導を選ぶ必要はなさそうです.無理やりメリットを挙げれば,電話や呼び鈴に気づきやすくなるとかですかね.ただ個人的に骨伝導そのものが楽しいので,今後も使っていく予定ではあります.

Arduinoを用いてLEDの指数関数的な輝度の変化を観察してみる

はじめに

視覚・聴覚などの人間の感覚は線形ではなく対数的にはたらいていると言われています.例えば聴覚の場合,小さい音とすごく小さい音の音量の違いはわかりやすいのに対し,大きい音とすごく大きい音の違いはわかりにくいといった具合です.
そこで今回はそういった人間の特性を踏まえ,Arduino UNOを用いてLEDの輝度を線形的に変化させたときと指数関数的に変化させたときを比較してみます.
ここで輝度を指数関数的に変化させる理由としては,単純に人間の感覚が対数的なので,その逆関数である指数関数的な変化を与えれば見え方としては線形っぽくなるはずだよねという話です.

やってみる

書いたArduinoのコードを載せます.家に転がってた12Ωの抵抗を電流制限抵抗として適当につなぎました.出力には3番ピンを用いています.

線形変化させてみる

int ledPin = 3;
int signFlag = 0; // 0: positive, 1: negative

void setup() {
}

void loop() {
    if (signFlag == 0) {
        positiveWrite();
    } else { 
        negativeWrite();
    }   
}

void positiveWrite() {
    for (int i = 0; i < 256; i++) {
        analogWrite(ledPin, i); 
        delay(4);
    }   

    signFlag = 1;
}

void negativeWrite() {
    for (int i = 255; i >= 0; i--) {
        analogWrite(ledPin, i); 
        delay(4);
    }   

    signFlag = 0;
}

signFlagはLEDを明るくしていくか暗くしていくかを判定するためのフラグで,値に応じてpositiveWrite(), negativeWrite()が呼び出されます.あとはもうそのままです.

指数関数的に変化させてみる

#include <math.h>

#define k (255 / (exp(10) - 1))

int ledPin = 3;
int signFlag = 0; // 0: positive, 1: negative

void setup() {
}

void loop() {
    if (signFlag == 0) {
        positiveWrite();
    } else { 
        negativeWrite();
    }   
}

void positiveWrite() {
    for (float i = 0; i < 10; i = i + 0.1) {
        analogWrite(ledPin, k * (exp(i) - 1));
        delay(10);
    }

    signFlag = 1;
}

void negativeWrite() {
    for (float i = 10 ; i >= 0; i = i - 0.1) {
        analogWrite(ledPin, k * (exp(i) - 1));
        delay(10);
    }   

    signFlag = 0;
}

主なところで先ほどから変わったのはpositiveWrite(), negativeWrite()関数内のanalogWrite()による出力値です.要するに,

k(e^i-1)

という数式に対して,iを0から10まで0.1ずつ変化させています.1を引いているのはiがゼロのときに出力をゼロにするためで,kは出力の最大値を255とするための定数です.

見てみる

肝心の光り具合の観察です.まずは線形変化させたときがこちらになります.

www.youtube.com

次に指数関数的に変化させたときがこちらになります.

www.youtube.com

おわりに

感覚的なものなので主観的なところはありますが,指数関数的に変化させた時のほうが綺麗に明るさが変わったように見えたのではないのでしょうか.このように明るさがスムーズに変化するLEDが組み込まれた製品を目にしたら,「おっこだわってんな」なんて思ってもいいかもしれません.

『コンピューターで「脳」がつくれるか』のレビュー

はじめに

かずー (@kazoo04) | Twitter の著書が出版されたのでAmazonで買いました.発売日に書店行っても置いてなかったんですよね.

汎用人工知能について,脳科学と計算機科学の両面からアプローチした一冊ですが,専門性は低く「読み物」としての側面が強いです.

本として一冊,トイレットペーパーとして一冊の計二冊購入しました. f:id:beybr6:20161002144557j:plain

おわりに

お尻を拭くには少し紙が硬すぎました.更に水洗トイレに直接流せないため,お尻を拭いたあとゴミ箱に捨てる形となってしまいます.
購入の際には本として読むことを前提にするべきであるということをここに記しておきます.

VimでProcessingを動かす

はじめに

Processingの標準IDEが使いづらいし重くて嫌いなのでVimで動かせるようにしました.OSはLinux Mint 18です.

vim-processingの導入

私はNeoBundleでVimプラグイン管理をしているので,その前提で進めていきます.deinとか使ってる方は適宜読み替えてください.

vim-processingというプラグインが提供されていますのでありがたく使わせていただきましょう.実行やシンタックスハイライトが可能になります.
以下のように~/.vimrcに追加してから:NeoBundleInstallします.

NeoBundle 'sophacles/vim-processing'

次に,Processing IDEをダウンロードします.公式HPから適当に選んでください(Processing.org).

/optに解凍して生成されたフォルダを移動します.今回私がダウンロードしたのは最新版(2016/08/11当時)のバージョン3.1.2です.

/binにprocessing-javaシンボリックリンクを作成します.

$ sudo ln -s /opt/processing3.1.2/processing-java /bin/processing-java

これで環境の設定は完了となります.

(2017/6/19追記)
新環境にて上記の設定しなおすと,:makeを叩いた際に以下のようなエラーを吐かれたので対処しました.

java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory

lddでjavaコマンドの依存関係を調べます.

$ which java
/usr/bin/java
$ ldd /usr/bin/java
    linux-vdso.so.1 =>  (0x00007fff22ba1000)
    libjli.so => not found
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3c8c0c6000)
    /lib64/ld-linux-x86-64.so.2 (0x0000560c3ef59000)

はい.libjli.soがnot foundとのことです.少しインターネットさんの知恵をお借りしたところ,インストール済みのJREなどからlibjli.soを引っ張ってこればいいようです.
JRE内のlibjli.soからシンボリックリンクを貼ります.

$ sudo find / -name libjli.so
find: ‘/run/user/1000/gvfs’: Permission denied
/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/jli/libjli.so
/home/wasyro/android-studio/jre/jre/lib/amd64/jli/libjli.so
/home/wasyro/android-studio/jre/lib/amd64/jli/libjli.so
$ sudo ln -s /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/jli/libjli.so /usr/lib
$ ldd /usr/bin/java
    linux-vdso.so.1 =>  (0x00007ffc6cb54000)
    libjli.so => /usr/lib/libjli.so (0x00007f8e22704000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8e2233b000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f8e22120000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8e21f1c000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f8e21cff000)
    /lib64/ld-linux-x86-64.so.2 (0x000055db08af3000)

依存関係が解消されました.これで動くはず…

Error: missing `server' JVM at `/opt/processing-3.3.4/java/lib/amd64/server/libjvm.so'.
Please install or use the JRE or JDK that contains these missing components.

怒られました.ただこれも先ほどと同様の手順でlibjvm.soを引っ張れば良さそうです.

$ sudo find / -name libjvm.so
find: ‘/run/user/1000/gvfs’: Permission denied
/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so
/home/wasyro/android-studio/jre/jre/lib/amd64/server/libjvm.so
sudo ln -s /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so /opt/processing-3.3.4/java/lib/amd64/server/

今度は動きました.
(2017/6/19追記ここまで)

使ってみる

作業フォルダ内に 作業フォルダ名.pde となるようにメインルーチンを作成します.test/test.pdeみたいな感じですね.
というわけで以下のような感じでtest.pdeを書いてみました.

void setup(){
  size(640, 400);
  background(255);
}

void draw(){
  ellipse(width/2, height/2, 200, 200);
}

F5キーまたは:makeコマンドで実行します.
f:id:beybr6:20160924214304p:plain
実行画面はこんな感じになります.毎回Could not parse -1 –displayの警告が出るのですがちゃんと動きます.怒られる原因がイマイチわからないので詳しいおじさん教えてください.
ウィンドウを閉じて何らかのキーを押すとエディタに戻ります.
シリアル通信を使う場合は管理者権限付きでVimを起動しましょう.

さいごに

ファッキンProcessing IDE