Memo: Maven

Filed under: analog3,技術情報 — Gan @ 7:00 PM


How to install Maven on Windows

Maven is a Java application, so we are just fine with expanding product zip package and setting environment variables M2_HOME and JAVA_HOME and set PATH.

Creating a Maven Project

Maven in 5 Minutes

Maven in 5 seconds… dothis:

mvn archetype:generate -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false


Stub Synth Module for MOM Development

Filed under: analog3,技術情報 — Gan @ 5:54 PM

MOM (Master Of Modules) manages synthesizer modules to make them work as a single musical instrument.  The main responsibilities of MOM are

  • Control patching.
  • Control parameters.
  • Organize voices.
  • (possibly) Organize modules such as device ID management.

Designing and implementing MOM and synth module data model is yet another challenge out of building CAN network.  Basically, the inter-module communication depends on CAN physical layer, but it’s a pain to dragging such a dependency during the MOM development.  I’m sure the CAN network would be quite unstable at first and I don’t want to stop and troubleshoot CAN while I’m working on MOM.

So, in order to remove dependency on CAN network, I’ll build the initial version of MOM based on TCP/IP with dummy (stub) synth modules that are purely software oriented and talk TCP/IP.  Once the MOM design is fixed, I can replace the TCP/IP driver by CAN driver later.  It will not ruin the module data model.

MCP2515 CAN Controller

Filed under: analog3,技術情報 — Gan @ 5:23 PM

As I mentioned in the previous article, I’ll use MCP2515 CAN controller for inter-module communication (initially, at least) for the Analog3 Project.

Datasheet of this device is available at the product page.

MCP2515 consists of CAN protocol engine, data buffers,  controller, and SPI interface as illustrated in the picture below.


a3_networkYou need to attach a processor to make this device functional.  In early phase of the project, I’m thinking of using a Raspberry Pi as the Master Of Modules (mom) and Arduino’s for dummy synthesizer modules.  Arduino is not a realistic solution for Analog3 both in terms of cost and performance.  So, I’m thinking of implementing a common synthesizer module driver based on PSoC or CAN enabled AVR.  MCP2551 is CAN transceiver.

It may take a while to get used to MCP2515.  Here are several links that are useful for getting started:

MCP2515 Linux Device Driver (probably for Raspberry Pi)

Arduino Example Sketch

AVR Example Code (C)


Changing the Strategy for Analog3

Filed under: analog3,技術情報 — Gan @ 10:58 AM

I’ve been trying for a year to make my own serial interface protocol to exchange data among synth modules.  Though it showed some progress, I kind of giving up this approach.  The problem is complexity of serial interface controller.  A controller for multi-master serial interface is complex.  Implementing using a generic device is more costly in many sense than I expected.  I started with Arduino.  This was the easiest approach but channel was too slow.  I could only achieve 50kbps.  Then I tried implementing it into AVR using assembler language.  It went 100kbps but it was about the limit.  The most serious problem with MPU was that the processing is always on single thread.  Some data processing has to be done in parallel during data reception, but it was pretty inefficient to run such concurrent tasks on 8-bit simple processor.  Overhead for such multi-tasking killed the speed.  Then, I moved onto PSoC.  It achieves bit rate 400kbps easily and it might go higher if it’s tuned well.  However, the logic to handle collision is so complex that I eventually am suffered from lack of resources in PSoC.

So at this point, it seems more practical to use a ready-made implementation of an existing protocol, which is CAN.

The reason I didn’t go for CAN at first was speed.  I wanted to use the interface even for synching oscillators.  I was not sure if 44bit-at-shortest message from at 1 Mbps is short enough for that usage.  (I’m not sure yet.  It’s about 22kHz rate if you keep repeating shortest CAN message at the highest rate.  That’s pretty close to audio frequency.  If an oscillator keeps sending such messages, the communication channel would be pretty much occupied.)  So probably I need to give up some usage of the common data bus.  I will go with following approach:

  • Use cheap CAN controller and transceiver: MCP2515 and MCP2551.
  • MCP2515 is controlled by SPI.  Most processors can use it.
  • I’ll use Raspberry Pi for the master synth controller module.
  • Synth modules can be based on PSoC or AVR.  These two are ones I am familiar with.
  • I’ll give up some features such as oscillator sync network.


Raspberry Pi Setup Memo

Filed under: 技術情報 — Gan @ 5:39 AM

Search engine helps, but I’m so lazy that I don’t like to do the same search repeatedly.

Wireless LAN setup:

Use application “Wifi Configuration” from GUI menu.

Common WIFI dongle problem of falling of network:

Power management feature is enabled in default for device 8192cu.  Having following file resolves the issue:

pi@raspberrypi ~ $ cat /etc/modprobe.d/8192cu.conf
# prevent power down of wireless when idle
options 8192cu rtw_power_mgnt=0 rtw_enusbss=0


CAP/CTRL swap:


Set static address to wifi interface:

Edit /etc/network/interfaces.  If the setup for wlan looks like following,

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

modify as follows:

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet static
address your-address
netmask your-netmask
gateway your-gateway

 Install Inconsolata font:

Set timezone:

% sudo dpkg-reconfigure tzdata

Raspberry Pi B+ Pinout

Picture in Pi4J Project:

Raspberry Pi I2C clock-stretching problem

Filed under: 技術情報 — Gan @ 5:37 AM

The I2C slave that I’m developing has been failing intermittently.  I finally noticed this was a known bug in Raspberry Pi that mishandles clock stretching.

I2C slave may delay response by holding SCL low.  However, when the slave does it, the I2C master in Raspberry Pi gives very short clock for the first bit of the next byte.  The symptom can be seen as following picture.


More detail explanation can be read in this link:

In order to workaround this, I set data rate in I2C slave module higher.  The communication rate is 400 kbps, but I set the data rate 1000 kbps.  It worked for me.  Here is the setup of I2C slave module.




Eagle 5 と Eagle 6 を混在して使う (Windows)

Filed under: 技術情報 — Gan @ 5:29 AM

Analog2.0 を含め、今までのプロジェクトは CadSoft Eagle を使って回路図・基板レイアウトの設計をしています。最新のバージョンは 6.5 あたりですが、ライセンスの関係でいまだに  ver. 5 を使っています。バージョン6での大きな変更点として、データファイルの形式がバイナリからXMLに変わったことがあります。データがテキストですと、バージョン管理ソフトとの相性がよく、今まで苦しんでいた履歴管理がぐっと楽になる可能性が高いです。ですが、古いプロジェクトは「データファイルを変更せずに」参照できないといけません。なので、Eagle 5 と Eagle 6 の混在環境を作ってみることにしました。今まで混在環境を長く維持できたことないんですが、どうなることやら




Filed under: Analog2.0,技術情報 — Gan @ 5:44 PM

DSC00098_2ここしばらくノイズの音源に使うトランジスタについて、廃止品になってしまった 2SC3311 の後継として使うものを探していました。

色々と比較した結果、BC547 というトランジスタを使うことにしました。理由は以下のような感じ

  • これが一番大事、ノイズ音源として性格が良いこと
  • 発生するノイズレベルが2SC3311 に比較的近く、回路変更なくそのまま差し替えて使えそう
  • 一般的に広く使われているトランジスタで、セカンドソースもあり入手が比較的容易。
  • 廃止品になる気配が今のところない。




BC547 のデモ音:

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.



Filed under: 技術情報 — Gan @ 11:25 PM



  • 「良い」と判断されたら1点とする。
  • 「良い」と判断されなかったら0点とする。
  • 平均点をスコアとする。

このようにすると、「良い」と判断されたときの偏差は (1 – score) そうでないときには (0 – score) とできるので、ここから分散が

((1 – score)^2 x (勝ち数) + (0 – score)^2 x (負け数)) / 総比較数


一般的な信頼区間の計算方法は以下のとおりです(95% 信頼区間の場合)

信頼区間 = 1.96 x 標準偏差 / sqrt(総比較数)




やはり聴いた印象どおり、2N5087 と 2N5210 以外ははっきりした差がないようです。




Filed under: 技術情報 — Gan @ 11:09 PM

前回の試験で 2N3904 を入れ忘れたので、それを加えて再試験をしました。結果はこちら

$ round2_result.txt
data/1_2SC828.wav        6       {'win': 20, 'lose': 8}
data/3_BC547 F.wav       -3      {'win': 11, 'lose': 17}
data/5_2SC3311.wav       3       {'win': 17, 'lose': 11}
data/6_MPSA18.wav        -1      {'win': 13, 'lose': 15}
data/7_2N4401.wav        3       {'win': 17, 'lose': 11}
data/8_2N5087.wav        -11     {'win': 3, 'lose': 25}
data/9_KSD5041.wav       0       {'win': 14, 'lose': 14}
data/A_2N3904.wav        3       {'win': 17, 'lose': 11}

前回圧倒的に悪かった 2N5210 は除外しました。BC547 はフェアチャイルド製とオンセミコンダクタ製のものでサンプルをとったのですが、それほど違いがないようなので今回はフェアチャイルド製だけを使いました。

今回は 2N5087 が際立って悪くなりました。試験中に「変な音」のサンプルが一つ混じっていることに気付いたのですがどうもそれがこのトランジスタだったようです。


スコアの傾向が前回とやや違うことを考えると、2N5087 以外のスコアに本当に差があるのかどうかよくわかりません。それを言うには統計的に有意な差があるかどうかの計算をする必要があります。

あとで答え合わせ的に 2SC828 を基準にトランジスタの種類を見ながらききくらべてみました。いくつか特徴的なものの印象です。

  • 2SC3311 は 2SC828 とそっくりです。私にはききわけがつきません。
  • 2N3904 は2SC828 より少し重い感じ
  • BC547 は 2SC828 より明るい音に感じます。少しばたばたレベルが動く感じがしますがそれが良いか悪いか決められず、このトランジスタは試験のたびにスコアが一番動いていました。
  • KSD5041 は、ノイズレベルが他のトランジスタよりかなり高く、また聴いた印象も他とやや違いました。レベルのばたつきが非常に少なく(波形を分析しても同様のデータが見られます)、聴いた感じは低音から高音までびっちり詰まっている印象。これを楽器に使ったらどうなんだろう、という点がよくわかりません。スコアもいつも平均的でした。測定目的ならこのトランジスタが一番向いていると思います。



« Newer PostsOlder Posts »

Powered by WordPress