Skip to content

Instantly share code, notes, and snippets.

@ll0s0ll
ll0s0ll / doc.md
Last active January 2, 2023 00:55
ArduinoUNO+USBHostShield+Bluetoothドングルで、iPadにつながるインプットデバイスを作る

ArduinoUNO+USBHostShield+Bluetoothドングルで、iPadにつながるインプットデバイスを作る

概要

iPadはBluetooth経由でキーボードを接続できるようになっています。その機能を使ってArduinoからiPadへ文字を入力してみます。(Bluetooth 4.0 LEに対応した機種では、さらに多くの種類のデバイスに接続できるようになりました)

動作を収録した動画を撮りました。

Arduino_UNO_USBHostShield_Bluetooth_360.mp4

GithubのUSB_Host_Shield_2.0リポジトリよりフォークして、USB Host Library for ArduinoをBluetooth HIDに特化させるかたちで作成しています。 USB_Host_Shield_2.0については下記をご覧ください。

@ll0s0ll
ll0s0ll / doc.md
Created March 25, 2018 12:48
ALSAから出力された音声をpifmで再生する

ALSAから出力された音声をpifmで再生する

先日、Raspberry Piとpifmを使って、なんちゃってFMラジオ放送局を作りましたが、ALSAの音声をpifmで再生できたら、もっと面白いことができそうだと思い、調べてみました。

再生はできたが…

調べてみると同じようなことを考えている人がいました。

Announce: Squeezelite – a small headless squeezeplay emulator for linux (alsa only) – Page 165

Squeezeliteはネットラジオのストリーミングプログラムのようですが、質問者は、その音声をpifmで流そうと考えているようです。結果的に、ALSAの音声をpifmに流す、という方法で解決されていますので、それを参考にやってみます。

@ll0s0ll
ll0s0ll / open_jtalk_with_alsa.md
Created March 25, 2018 00:40
Open JTalkで生成した音声をALSAで鳴らす

Open JTalkで生成した音声をALSAで鳴らす

Open JTalkは、名古屋工業大学の徳田・李研究室で開発された日本語テキスト音声合成システムです。入力したテキストを解析して合成音声を生成してくれます。形態素解析エンジンのMeCab(和布蕪、めかぶ)、奈良先端大学を中心にして開発された形態素解析用辞書のnaist-jdic、隠れマルコフモデル(HMM)に基づく音声合成エンジンhts_engineが使われています。

Open JTalkは、テキストを入力すると合成音声がwavファイルで作成されます。ですので、wavファイルを作成→再生→削除する流れになります。wavファイルを作成せず、合成音声を直接再生したら、音が出るまでの時間が短くなるのではと思い、試してみました。

※Open JTalkは1.05、hts_engine APIは1.06のバージョンを対象にしています。

wavファイルが作成されるまでの流れを調べる

wavファイルを作成する部分を追っていくと、/hts_engine_API-1.06/lib/HTS_engine.cの中のHTS_Engine_save_riffでwavファイルが作成されています。wavファイルのオーディオデータはHTS_GStreamSet_get_speechを呼び出し取得しています。HTS_GStreamSet_get_speech/hts_engine_API-1.06/lib/HTS_gstream.cの中にあり、呼ばれるとgss->gspeechを返しています。つまり再生すべきデータはgss->gspeechに作成されていることがわかりました。

@ll0s0ll
ll0s0ll / install_pjsip_on_raspberry_pi.md
Created March 24, 2018 10:48
PJSIPをRaspberry Piにインストールする

PJSIPをRaspberry Piにインストールする

PJSIPは、C言語で書かれたオープンソースのマルチメディアコミュニケーションライブラリです。SIPやSDP、RTP、STUN、TURN、ICEなどのプロトコルをサポートしています。このライブラリを使うと、IP電話のようなものを簡単に作ることができます。今回はPythonを使いたいので、Python ModuleのPJSUAもインストールします。

インストール

インストール方法はBinerry, Raspberry Pi Caller and Answering Machineを参考にしました。必要な作業は記事の中ごろだけです。

svn経由でソースコードを入手します。subversionがインストールされていない場合はインストールします。

$ sudo apt-get install subversion
$ svn checkout http://svn.pjsip.org/repos/pjproject/trunk
@ll0s0ll
ll0s0ll / automated_radio_station.md
Last active March 20, 2018 11:48
TimeManagerを使って、聴きたいラジオ番組が流れてくる、自分だけのラジオを作る

TimeManagerを使って、聴きたいラジオ番組が流れてくる、自分だけのラジオを作る

何時からはこの放送局のこの番組、その後はこっちの放送局のあの番組、、、
様々なソースの聴きたい番組が、時間になると自動的に流れてくる、そんなラジオがあったらいいですよね。
TimeManagerを使って、radiko、らじるらじる、NHKラジオの聞き逃しサービスをソースに作ってみます。

聴取する開始時刻と終了時刻をコントロールする

TimeManager(tm)は、プログラムの開始時刻と終了時刻を管理するプログラムです。
このプログラムを使うと、任意のプログラムを指定時刻に実行して、終了させることができます。

@ll0s0ll
ll0s0ll / arduino_28674bytes_error.md
Last active March 20, 2018 12:05
Arduino UNOに、28,674バイト以上のスケッチが書き込めない

image

Arduino UNO(初代)で、USB Host Shield 2.0のWiiのサンプルを試そうとしたところ、

avrdude: stk500_paged_write(): (a) protocol error, expect=0x14, resp=0x0d
avrdude: stk500_cmd(): programmer is out of sync

こんなエラーが出て、書き込みができない。

ちまちまコメントアウトして原因を探ってみると、どうも、スケッチのサイズが、28,674バイト以上になると、エラーが出ることがわかった。Serial.printで表示するコメントを1文字増減させるだけで、エラーが出たり、出なかったりするので、やっぱり容量の問題っぽい。