Blog2Viewer

以前、Movable Typeで運用していたブログの内容を表示させるために作成したページです。
intel hexファイルのマージ
PIC32MXのプログラムを開発中、2つのintel hexファイル(bootloaderとfirmware本体)を1度に書き込みたいと思ったのだが、pic32progではできない。objcopyあたりでmergeできるか調べるが,無理そう。hexファイルのmergeならpythonで自分で書いても簡単そうなので書き始めるが、念のため python + intel hexで検索したら、ライブラリ、その名もintelhexがあった。ドキュメントによるとmerge機能まである。サンプルを見ながらプログラムを書き、あっさり動作。凄いね。世の中は。

[python]
import sys
from intelhex import IntelHex

usage = "%s hex_infile1 hex_infile2 hex_outfile" % sys.argv[0]
if len(sys.argv) != 4:
print(usage)
sys.exit(1)

infile1, infile2,outfile = sys.argv[1:]

ih1 = IntelHex(infile1)
ih2 = IntelHex(infile2)
ih1.merge(ih2, overlap='ignore')
ih1.write_hex_file(outfile)
[/python]

ドキュメントによると、ライブラリにhexmerge.pyというユーティリティが付属し、ライブラリと一緒にインストールされるとあったが、わたしの環境では見付らない。これが使えれば、プログラムを書く必要すら無い。
ESP32_MP3_Decorderを動かしてみた。
ESP32のI2Sで音声出力の実験をしているが、なかなかうまくいかない。サンプルプログラムを元にプログラミング・ガイドを見ながらDACに音声を出力させようとしているのだが、うまくいかない。部分的にちゃんと波形は出力されているのだが、うまくつながらない。周期も変。

資料も少ないし、動いたという例も無いと思っていたところESP32_MP3_Decoderの存在を知る。試してみると、いろいろ問題は、ありながら、断続的に音が出た。MP3のデコードも自前でやっているらしい。





問題点は、こんな感じ


  • Buffer underflow 多発
  • Exception発生で再起動
  • DA2側は、ノイズだけ。
  • 最近の更新でi2s_set_clk(i2s.c:173行あたり)がbits_per_sampleが16未満だとエラーを返すようになったがDAを使うと8bitになる


断続的にでも音が出たことで希望が見えてきた。DACへの出力しか試していないがI2S出力にすれば、ちゃんと聞こえるのかもしれない。

ちなみに回路は、こんな感じ。



あと、動画に写っているスピーカーは、USB電源のアナログ接続スピーカー。家の近くの量販店で、1,280円と書いてあったが、何故か200円で買えてしまった。

ちゃんと、音が出せるよう実験を続けていきたい。I2Sへの出力も試してみたい。
ESP32のI2S+DAC出力成功
ESP32_MP3_Decoderのプログラムを調べ、遂にはESP32のI2S+DACから、音声を出力することができた。嬉しい。

Tw_Mhageさんの記事:ESP32でBluetoothイヤホンを作ってみた - Qiitaに刺激を受け、ESP-IDF添付のサンプルプログラムを改造し、Bluetooth Speakerのデモプログラムを作成、公開している。Bluetoothの中身に疎いので、最初苦戦したが、iPhoneに接続し音が出せるようになった。回路は、ものすごく簡単なので、ESP32のモジュールを持っている人には、一度試してもらいたい。



音楽の再生には何bit必要?
ESP32のDACに音を出力する場合、8bitというのはどんなもんなんだろう。 bit数が足りないために音声が、まともに聞こえないというのでは困るなぁと思い、実験してみた。

pythonのwavライブラリを使うとwavファイルの操作ができる。これを使って、wavファイルのデータを指定したbit数まで落とすプログラムを作成した。処理に結構時間が、かかるので10秒だけ出力する。

結果、私のPCの再生環境では8bitと12bitの聞き分けができないことが判明。8bitからbit数を落として行ってもホワイトノイズが増えていくだけで、あまり問題無く聞ける。1bitだとノイズがかなり大きいが、それでも曲は判別可能。予想外の結果だった。

変換した結果を以下に示す。元の曲は魔王魂さんのフリー歌もの素材「桜日和」。

1bitの音源:(音量注意)
[audio wav="http://www.narimatsu.net/blog/wp-content/uploads/2017/05/sakura_biyori_b1.wav"][/audio]

2bit:
[audio wav="http://www.narimatsu.net/blog/wp-content/uploads/2017/05/sakura_biyori_b2.wav"][/audio]

3bit:
[audio wav="http://www.narimatsu.net/blog/wp-content/uploads/2017/05/sakura_biyori_b3.wav"][/audio]

4bit:
[audio wav="http://www.narimatsu.net/blog/wp-content/uploads/2017/05/sakura_biyori_b4.wav"][/audio]

5bit:
[audio wav="http://www.narimatsu.net/blog/wp-content/uploads/2017/05/sakura_biyori_b5.wav"][/audio]

6bit:
[audio wav="http://www.narimatsu.net/blog/wp-content/uploads/2017/05/sakura_biyori_b6.wav"][/audio]

8bit:
[audio wav="http://www.narimatsu.net/blog/wp-content/uploads/2017/05/sakura_biyori_b8.wav"][/audio]

12bit:
[audio wav="http://www.narimatsu.net/blog/wp-content/uploads/2017/05/sakura_biyori_b12.wav"]

変換プログラムは、こんな感じ
[python]
#!/usr/bin/python3
import sys,wave,struct
usage = "Usage:%s input.wav output.wav n" % sys.argv[0]
if len(sys.argv) != 4 :
print(usage)
sys.exit(1)
in_file, out_file, bits_str = sys.argv[1:]

w = wave.open(in_file)
dst = wave.open(out_file,'wb')
bits_count = int(bits_str)

mask = 0
for i in range(bits_count):
mask |= 0x8000 >> i

framerate = w.getframerate()
dst.setnchannels(2)
dst.setsampwidth(2)
dst.setframerate(framerate)

n = min(w.getnframes(), framerate * 10)
data = w.readframes(n)

for i in range(n):
v0,v1 = struct.unpack_from('HH',data,i*4)
dst.writeframes(struct.pack('HH', v0 & mask, v1 & mask))
dst.close()
w.close()
[/python]
ゼルダ その後
ゼルダの伝説が楽しくて、GWはハイラルの大地を駆け巡っていた。祠を全部攻略した後、ガノン討伐をがんが得ていたのだが、ネットで調べても最後の1個がわからず、119個でゲームクリアとなった。マスターソードとハイラルの盾を早期に手に入れれば、もっと楽にゲームを進められるのではないかというアイデアが気になり、すぐに2回目を開始してしまった。

試した結果、ハイラルの盾は割と早く手に入るが、マスターソードはハート13個の壁が大きく、それなりにゲームを進め、祠を開けないと手に入らなかった。その後、ゲームを楽に進めるに、4紳獣も解放、塔も全てクリアし地図をすべて開けたところで、すこし面倒になり、やっとゼルダから解放された感じ。

まぁでも、ハイラルの大地を駆け巡り、服のレベル上げなどするのは楽しいので、ちょいちょいやってしまいそうだ。

あと、ゼルダの伝説に対する希望

  • 塔をクリアしなとも、自分が通過した周辺の地図は表示して欲しい
  • ゲームをやり込み、長くゲームで遊ぼうとすると、ゼルダ姫をハイラル城で待たせることになり、心苦しい。ゼルダ姫が解放された状態でやりこめるようになると、さらに嬉しいのではなかろうか。
ネット番組を見るようになった
ニュース女子問題をきっかけに、ネット番組をよく見るようになった。

今、コンスタントに見ているのは、以下の3つ。



ニュース女子は、前にも書いたが、番組のフォーマットが見やすいし、面白い。

虎ノ門ニュースは月金の朝8時からの2時間番組で、結構長いので、最初は月曜日の青山繁晴氏だけ見ていたのだが、他の曜日も見ると、こちらも結構情報量が多い。他では得られない情報がいろいろ得られる。ということで、ちょっとづつ見る時間が長くなっているところ。

報道特注(右)は、Youtubeにお勧めされて偶然見たのだが、ネットで人気の足立康史議員の話も面白いし、首になったTBSワシントン支局長 山口敬之の話もすごい。今回の北朝鮮危機に関する想定される事態の情報は、この人の話が別次元で詳細かつリアル。いまだに他で同様の話を聞かない。

あと、ゲーム実況の動画は、あいかわらず見ている。PUBGも最近見始めて面白いが、自分でやる気は起きない。
エアコン購入
パソコン部屋用にエアコンを購入した。続きの部屋にエアコンはあるのだが、パソコン部屋の方に熱源が多く、どうしても暑くなってしまうのでエアコンの導入を考えていた。昨年購入するつもりだったのだが、時期を逃し、取付工事繁忙期に入ってしまい、購入を止めてしまったのだが、やっぱり暑かったので、今年は繁忙期に入る前に購入することにした。

物は価格.comで最安値帯のものから,三菱電機 霧ヶ峰 MSZ-GV2216-Wを選択。工事費込みで 9万円弱。配電盤までの電気工事や屋根置き金具も含まれているので、標準的な価格だと思う。

最安値のエアコンなので、あまり期待していなかったが、使用説明書を見ると目新しい機能がいくつかある。
列挙する。

  • ピークカット(電流)ボタン
  • 体感切入ボタン


ピークカットは、通常、最大消費電流15Aのところを11Aに制限する機能。あまりガンガン動いて欲しくない、と思うこともよくあるので、ちょうど良い気がする。

体感..というのは、風向・風速をコントロールして、体感温度はそのままに節電運転を行う機能だそうだ。効果の有無はやってみないとわからない。


シン・ゴジラ
今頃、GEOでシン・ゴジラのBlueRayを借り見た。面白かった。充分リアルに感じられ、没入できた。

貸出期間が1週間だったので、2回見てみたが、2回目も新鮮な感覚でみることができた、というか1回では見切れない、聞き取り切れない。ということで、1度見た方も、もう一度見てみると、また面白いと思う。