SVX日記
2004-08-26(Thu) シリアル通信……停止中
こーゆー日記で、毎日チョコチョコと作業報告なんぞを書いていると、いわゆる「工作作業日報」や「プログラミング実況中継」みたいな感じになってくる。まぁ、それが励みになることもあって、毎日の作業のゲインはかなりアップするのだが、なにがツラいって、作業的にほとんど収穫のない日の記述ほどツラいものはない。早い話が「ぜんぜん動いてくれません」という状態である。ホントに「ぜんぜん動いてくれない」と当然、書くネタに困り、ヘンに動かない理由を想像して書いてしまったりするわけで、それが見当はずれだった日には、とってもハズかしいことになるのである。
と、こんなことを書くからには、まさに現在その状態だといっているようなモンなのだが、事実ほぼその状態なのである。ちっともシリアル通信が動いてくれないのである。以前に同じような回路で動かした(まだ昨日のUSART機能は使ってない)のだが、今回は理由もわからずかなりハマり状態なのである。
2005-08-26(Fri) 激しく江戸へ戻る
今日はこれから、ズガーンと、江戸まで400kmの距離を戻るので……といいつつ、仕事を定時で抜け、153号を通って、東名三好ICから、東京方面へ……なんだ? 岡崎、豊川間、工事渋滞? 抜けるのに40分? そんなら下りて一般道を抜けてみるべ……下りてみる。前回、下りて中途半端に成功したのがイケなかった。今回は、音羽蒲郡で下りたら、1号へ出るだけで、大変な混雑。そこから、豊川まで混みっぱなしだ。まったくもって、高速は下手に下りるものじゃない……むしゃむしゃ。途中、マクドナルドに寄って購入した、チーズバーガ3つにカブりつきつつ、反省しきりである。豊川ICで高速に復帰したときは、40分の渋滞に対して、80分ものロスをしてしまっていた。仕方ない、晩飯を食う時間と考えて、自分をゴマかそう……とほほ。
さて、再び東名高速に戻ったのはいいが、花の金曜日のこの時間、高速がこーゆータイプのドライバで埋め尽くされているとは知らなかった。おい!! そこのクルマ!! なんで、右を100km/hソコソコでタラタラと走っているんだ!! いや別に100km/hが法定速度だというコトは十分にワカってはいる。ワカってはいるが、ソコは追越車線なんだよッ!! 追い越させてくれッ!! 頼むからッ!!
いつもは、比較的ジェントルに、追い越しの意思を示すオイラである。だから、そーゆー中、パッシングや蛇行、極めて短い車間距離などで、追い越しの意思を示す、いわゆる「追い越し過激派」を、冷ややかな目で見ていた。んが、しかしッ!! そーゆー過激派が少ない状況下では、道路がこうも、まったりとしてしまうものだとは知らなかった。それなら、オイラがやらなきゃ、どーしよーもないじゃないかッ!!
だって、追い越し車線に3台くらい連なっている遅いヤツらをパスしたら、その前にはだーれも走っていないんだぜ? 下手すると、走行車線のが速く走っていたりする。どー考えても、これは罪であろう。パッシングまではしないが、車間距離を詰めて、イッパイまで右に寄って走る。それでもなかなかどきゃしねぇ。仕方ないから、左の走行車線の状況を確認しつつ、左からガツーンと追い越す。気がつけば、首都高でクルマの間を縫うように追い越していくバカポルシェのような走りをしているオイラがいた。あー、すまん。SVXの品位を落とすような走りをしてしまった。でも、だってぇ……だってぇッ!!
2007-08-26(Sun) 電気仕掛けの写真立て
今回の買い物は、久々のThinkGeekから。2年ぶり……いや、正味3年ぶりの買い物だ。
まずはメインの「eStarling 2.0 Wi-Fi Photo Frame」。何度も品切れ状態をウォッチし続け、在庫したと思ったら何故か海外発送を受け付けず、やっとこさ購入できた一品である……と、思ったら、またもや品切れになってんじゃんッ!! ……あぶねぇ、あぶねぇ。
コイツは早い話がデジタルフォトフレーム。電気仕掛けの写真立てなのであるが、Wi-Fi、つまり無線LAN対応というのが決定的な違いなのだ。電源さえ取れればトイレの中にも設置オッケー。工夫さえすれば、汎用の表示機としても使えるのがグレートだ。実は、コイツがサクサクと入手できなかったからこそ、コイツをチマチマと作っていたワケで……。
パッケージを開けると、本体、アダプタ、USBケーブル、背面に取り付ける足、だけ。本体のパネルには「説明書もCDも入ってねぇ、製品サイトへ行くほかねぇ(意訳)」と書いてある紙がはさまっている。うぅむ、思い切っとる製品じゃ。
しかし、手順どおり、電源を入れ、USBケーブルでPCと接続し、ユーティリティで無線LANの指定をして再起動するが「None Registered Frame!」と表示されて先に進まない……むぅ、なんじゃこりゃ。そんな画面が出るなんて説明はない。ルータの設定がマズいんか? 先日購入したNECのルータ、微妙に無理が効かないんだよな。Linuxルータだったらtcpdumpで、どこまでもトラブルシューティングできるんだが。
サポートサイトをホジくっていると、MACアドレスを連絡しろ、というような、なんだか向こうの不具合のような記述が<かきかけ>
2022-08-26(Fri) 色々なノイズをジェネレートする
シツコく飽きずにオリジナルのシューティングの製作をポチポチと進めているのだが、いくつか敵キャラクタを用意したところで、そろそろ効果音が欲しくなってきた。
以前に「sox」というコマンドラインツールを使って効果音を作ったことがあり、少しイジり始めたのだが、音に対する自分の知識が少ないのに対して、ツールが多機能すぎるので、どうにも勝手がわからない。このパターンは……あー、いかんて、いかんて、次はサウンドエディタ作り始めちま……で、またもや「ヤクの毛刈り」の始まりである。
で、正弦波、矩形波、三角波、鋸歯状波あたりを生成、合成や変調、周波数、音量を変化させるアルゴリズムを組んだ辺りで、ノイズの実装が必要になってきた。ん? ノイズって、種類があったよな。ピンクノイズとか。フムン。ブラウンノイズなんてのもあるのか。このパターンは……あー、いかんて、いかんて、次はノイズ生成エンジン作り始めちま……と、さらなる「ヤクの毛刈り」の始まりである。
問題はピンクノイズ。1/fゆらぎの実装が必要らしい。1/fゆらぎといえば、このブログを始める前にUSB扇風機にPICマイコンを使ってそれっぽい制御を組み込んだことがあったな……などと、思い出す。弱い変化は頻繁、強い変化は稀、というヤツだ。が、結局よくわからず。ググッてどこかで見つけたサイコロ理論をアレンジして組み込んだ。
だいぶバラついているように見えるが、左の軸が自動調整により拡大されすぎているからだ。-21dB±1dBの範囲に収まっており、ホワイトノイズの特徴である「平坦なパワースペクトル」が実現できている。次はブラウンノイズ。
ブラウンノイズの特徴は「1オクターヴあたりパワーが6dB降下」である。言い換えると「周波数が倍になる都度パワーが6dB降下」。理想的な降下ラインを赤で示してみたが、ほぼピッタリであり、実現できたといえよう。最後はピンクノイズ。
ピンクノイズの特徴は「1オクターヴあたりパワーが3dB降下」である。言い換えると「周波数が倍になる都度パワーが3dB降下」。同じく、理想的な降下ラインを赤で示してみたが、ほぼピッタリであり、実現できたといえよう。
というわけで、調べると他にも「ブルーノイズ」「パープルノイズ」などがあるようであるが、やりだすとキリがないので、今回はここまで。コードを置いておく。ノイズ生成のキモは「when」に続く各数行のみだ。ピンクはちょっとアクロバチックかな。
#!/usr/bin/env ruby
# coding: utf-8
# create base.wav
# sox -n -r 44100 -b 16 -c 2 base.wav trim 0 1
begin
$LOAD_PATH.unshift('/usr/local/lib/ruby')
require 'libwav'
rescue LoadError
raise
end
include Math
ARGV.size < 2 and abort(<<USAGE % $0)
Usage:
$ %s base.wav white|brown|pink [sec]
USAGE
wav = NewWavFile.new(ARGV[0])
wav.get_info[0].each {|l|
puts(l)
}
type = ARGV[1]
sec = (it = ARGV[2]) ? it.to_i : 1
case(type)
when('white')
gain = Proc.new {
(rand(0) - 0.5) * 65536
}
when('brown')
gain = Proc.new {|g|
g + (rand(0) - 0.5) * 1024
}
when('pink')
gain = Proc.new {|g, pbuf|
(9 - ('%b' % (rand(255) + 1)).length).times {|n|
g -= pbuf[n]
g += (pbuf[n] = (rand(0) - 0.5) * 8192)
}
g
}
else
raise('Unexpected noise type.')
end
srand; g = 0; pbuf = [0] * 8
(n_sample = wav.freq * sec).times {|n|
wav[n] = [g, g]
g = gain.call(g, pbuf)
g < -32768 and g = -32768
g > 32767 and g = 32767
}
wav.save_phrase(0, n_sample, '%s_noise.wav' % type)
__END__