>> Blog Top

TeensyでWAVファイルプレイヤーを作る

Publish 2019.12.31


Teensyというボードを触る機会がありまして、これはドラムにも使えそうだなと思ったのでwavファイルプレイヤーを作ってみました。

阿部寛のホームページを彷彿させる簡素なホームページですが最近出た4.0の性能は凄いらしいです。差があり過ぎてあまりピンときません。

https://forum.pjrc.com/coremark_barchart.png 

そしてTeensyには非常に強力なTeensy Audio Libraryというライブラリがあります。
全ての機能を試した訳ではないですが、かなり凝ったものまで作れるようです。

例えばこんなものまで。

 今回はこのTeensyを使ってwav音源を再生するトリガーを作ってみました。

 使用したのはTeensy3.2です。audio用途で使うようにシールドも販売されていますので、そちらも使います。
Teensy オーディオアダプタボード - スイッチサイエンス

シールドを使用して、かつブレッドボードにも挿したいので足長のピンソケットを半田付けしました。

シールドには普通のヘッダーピンを取り付けます。

これにシールドを乗っけます。シールドを下にしちゃうとブレッドボードで使えないので注意です。

若干使いづらいですが回路は辛うじて組めます。
といっても、今回がピエゾ繋ぐだけですが。

ここで、注意点が。
詳しくは以下のページに書いてありますが、このオーディオシールドを使うとTeensyで使えるピンがかなり減ります。

https://www.pjrc.com/store/teensy3_audio.html

https://www.pjrc.com/store/teensy3_audio_pins.jpg

※上の画像はTeensy3.x 用

Teensy 3.2 Pinout

https://www.pjrc.com/teensy/card7a_rev1.png

上のpinout図からわかるようにTeensyでは14から23番ピンがアナログピンとなってて、多く感じますが、シールドを使うと14,15,18,19,22,23が使えません。(一部共有なので使えるピンもあるかも)

という訳で実際に空いているピンは、16,17,20,21の4つになります。
たくさんピエゾを繋ぐ場合はマルチプレクサ必須ですね。

今回はテストなので一つのアナログピンしか使いませんのでピンの問題は置いておきましょう。


Teensyの開発環境なんですがadafruitのボードなどと違って別途ソフトが必要となります。Teensyduinoというソフトを介してボードに書き込みますがarduinoIDEを使うのでそこまで大きな違いはありません。公式の手順に従えば普通にインストールできます。

※Macの場合はCatalinaはまだベータ版のようです。

追記) Ver 1.49以降は対応しています。

Teensyduino - Add-on for Arduino IDE to use Teensy USB development board

さて、前置きが長くなりましたが作っていきます。
まず、Audioの機能が豊富すぎるのでこの動画をみます。

長いですが、これを見れば大体の機能は掴めます。日本語の情報はあまりないので期待しない方が良さそうです。

上のチュートリアル映像にもありましたがTeensyはAudio System Design Toolというちょっと特殊なツール提供してます。
node-REDっぽいビジュアルブログミング的な感じで、オーディオ環境を構築できます。

今回は以下のように組みました。

初見だと意味わからないかもしれませんが、至って単純です。

左に16個ある”playSdWav”というのはWavプレイヤーです。なぜ16個もあるのかというと、同時に鳴らせる音はこのplaySdWavの数と同じになるからです。例えば連打したときに前の音を再生させたまま次の音をならしたい場合にplaySdWavが1つだと前の音を停止して次の音を再生させることになってしまいます。という訳でとりあえずちょっと多いかもしれませんがとりあえず16個用意してます。

真ん中にあるmixerは名前の通りミキサーです。一つのミキサーにつき4chなので全て繋げるには図のように10個必要になります。

一番右にある"i2s"ってのがシールドについているオーディオ出力端子になりますので、これにミキサーから繋げます。

その下にあるsgtl5000ってのはシールドに載っているチップのことです。図では何にも繋がってませんがシールドを使うおまじないとして必要です。

こんな感じで仮想?のオーディオ環境をパッチをつないで構築していきます。便利。
これらはそのままコードとして書き出せるので定数として、コードの冒頭に貼り付ければOKです。

ピエゾをセンシングしてベロシティに合わせて音源が変わるようなコードを書いてみました。毎度のことながらピエゾのセンシングには自作ライブラリを使っています。

playSdWavはisPlaying()で再生しているかどうかを取得できるので、ピエゾに反応があった場合にinPlaying()がfalseとなっているplaySdWavで音源を再生するようにしています。

実際に鳴らしてみた映像はこちら。

わかりづらいですが、一応ベロシティに対応してます。反応速度はすごく速いんですが音源のチョイスが悪かったのかあまりダイナミクスを表現できていない。まぁ使ったwavファイルは5つのみなので。

使用した音源ですが、DrumGizmoというオープンソースのVSTプラグインがあるのですが、そこで公開されているDRS DrumsによるDRS Kitという音源を使いました。
ライセンスはCC-BY 4.0です。ありがたい。

使ったファイルはこちらにあげてます。

映像では普通に動いてますが、たまに反応が悪くなったり、最悪とてつもない音を出してクラッシュしちゃうのでまだ使い物にはなりません。何度も心臓が止まりそうになりました。連打するとクラッシュしがちです。原因は今のところ不明...ピエゾ一つでこれなんで先行きは怪しいです。Teensy4.0にしたら解決したりするのだろうか。

  

次回はTeensyでシンセドラムを作ってみます。


>> Blog Top