48ヶ月点検(スーパーカブ110プロ/JA07)

スーパーカブ110プロ(JA07)の4年目の定期点検。春頃から、以前と音が変わったかなーと思ったまま乗り続けていたところ、それがチェーンにけっこうなダメージを与えていたらしいとのこと。今年は調整で何とかしてもらい、来年の点検時にはスプロケット込みで交換の可能性が出てきました。ぐむむむ。

これまでの走行距離はだいたい8000 km。来年の今頃は10,000 kmくらいか。1万キロでチェーン交換なんて聞いたことないよー(自業自得)

本日の給油

給油日 オドメーター (km) 給油量 (L) 単価 (円/L) 燃費 (km/L) 距離単価 (円/km)
2016-02-13 6714.7 2.96 108.78 49.26 2.21
2016-04-03 6847.3 2.57 108.95 51.60 2.11
2016-04-10 7025.7 3.42 111.99 52.16 2.15
2016-05-18 7113.8 1.68 108.93 52.44 2.08
2016-06-01 7286.3 3.28 114.94 52.59 2.19
2016-06-15 7464.2 2.65 118.11 67.13 1.76
2016-07-24 7579.7 2.54 107.87 45.47 2.37
2016-09-09 7740.9 2.87 127.87 56.17 2.28

急にガソリン価格が上がったなー。

MaxのGenExprを使ってみた

先日Pure Dataのexternを書きました。

これを、Maxでも動かせるようにしようと思って、Max SDKのドキュメントを読み始めました。ただMaxにはgen~もありますしJavaも使えるので、まずはgen~で試してみようと思い立ってから1時間強……同じものが書けてしまいました。

f:id:amarui:20160908131040p:plain

キモはcodeboxの中でGenExprを使うところにあります。codebox中では複数行のGenExprが書け、しかも条件分岐や繰り返しなどの制御構文を使うことができます。僕のプログラムではforループが使えることが必須だったので、助かりました。

続きを読む

今後10年の言語(翻訳)

もともとはClojureのことが読みたくてBruce A. Tateの「Seven Languages in Seven Weeks訳書)」を買ったのですが、読んでいくとErlangが気になりはじめました(ほぼ同時期に発掘して読んだMatz氏のブログ記事もErlangに言及していたので)。その後、2013年ごろにベータ版が公開されたDave Thomasの「Programming Elixir訳書)」でElixirを知りました。

とうとうElixir本の日本語訳が出版されることになりました。Elixir本の日本語訳*1の出版を勝手に祝して、以下のようなブログ記事の日本語訳をしてみました。

*1:現時点の日本語Elixir本は原著1.2版の翻訳です。もう原著は1.2は廃盤になっていて、1.3版のベータ版が公開になっています。

続きを読む

PureDataのexternalを作ってみた(後編)

はじめに

先日つくった正弦波を生成するsingen~を拡張して、もう少し複雑なexternにしていきます。正弦波の生成ができたので、それらを複数重ねて音作りをする加算合成シンセにしてみましょう。

とは言ってもいきなり難しいものは無理なので、下図のように基音の周波数倍音の数スペクトルのスロープ(傾き)の3つをコントロールできるものにします。一般的な加算合成法ではそれぞれの正弦波を独立してコントロールできるようにするのですが、今日のところは整数倍の成分の合成だけを考えます。つまり各倍音の周波数は基音の周波数によって決まり、独立したコントロールはできません。

これを数式で書くと以下のようになります。音合成の教科書などには必ずと言っていいほど載っている式で、スペクトルの傾きを0にするとすべての成分音のレベルが等しくなります。また、スペクトルの傾きを1にすると鋸歯波になります。(-1)k-1はなくてもいいのですが、時刻ゼロのときに振幅ゼロの鋸歯波の波形が得られるので入れています。

以下が完成したexternを使用しているイメージ。複数(multiple)の正弦波(sin)を生成(generate)するのでmulsingen~と命名しました。出力のあたりがごちゃごちゃしていますが、Pd-extendedのoutput~のようなことをしているだけです。

続きを読む

PureDataのexternalを作ってみた(前編)

はじめに

MacPureDataのオーディオexternal objectを作ってみたメモ。日本語で書かれた情報が少なかったので、「無いよりはマシ」程度で書き残しておきます。いろいろと間違いがあると思います。指摘していただければ幸いです。

まず参考にしたのはPd-externals-HOWTOです。この文書では4つのexternを説明してくれます。

  1. bangが来たらhelloを表示するもの。内部に状態を保存しない、とても単純なオブジェクトの例。
  2. 内部に数を保存するカウンターの例。bangがやってきたら、1を加算して返す。と同時に新しい(1が加算された)数を保存しておく。
  3. カウンターの機能を拡張して、下限・上限の設定、加算する数の変更、カウンター数値を下限値にリセット、などを可能にする例。可変個数のメッセージが来た時の対応や、インレットを増やす方法などを説明。
  4. オーディオ信号の加工をする例。2つのオーディオ信号が入ってきて、それらのミックスバランスを変化させられるextern。(筆者は「pan~」と呼んでるけど「mixer~」のほうが良かったと思う)

今回はこれらとは少し違う、「osc~」のような「周波数の数値入力に対して正弦波をオーディオ信号として出力するオブジェクト」を作ってみます。正弦波(sin波)を生成(generate)するので、名前は「singen~」とします。最終的にはこんな感じで使いたい。

続きを読む

Pure DataのexternalをMacでビルドするシェルスクリプト

MacでPure Dataの拡張オブジェクト(external object)をビルドする方法はいくつかあり、下記のMakefileを使うものなどが便利だったりします。(永野さん提案の、Xcodeを使う方法もあります)

参考:Pure Data の拡張オブジェクトを作る gcc on Mac OS X 版 - ruby trunk changes

ただ、Makefileを作るほどでもないんだよなー、というときもあります(ない?) 僕は上記ページを参考にした次のようなシェルスクリプトを使っています。

#!/bin/sh
cc -g -DMACOSX -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
   -Wno-unused -Wno-parentheses -Wno-switch -I. \
   -o $1.pd_darwin_o -c $1.c
cc -bundle -undefined suppress -flat_namespace -lm \
   -o $1.pd_darwin $1.pd_darwin_o
rm $1.pd_darwin_o

これをmakepdext.shのようなファイルに保存しておき、例えばpd-externals-HOWTOhelloworld.cがあったとして、

$ ./makepdext.sh helloworld

とするとhelloworld.pd_darwinができあがります。やってることは永野さんのMakefileと同じですが、ちょろっとコンパイルしたいだけの時にどうぞ。