SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|
2025|01|02|03|04|05|06|07|

2004-08-26(Thu) シリアル通信……停止中

  こーゆー日記で、毎日チョコチョコと作業報告なんぞを書いていると、いわゆる「工作作業日報」や「プログラミング実況中継」みたいな感じになってくる。まぁ、それが励みになることもあって、毎日の作業のゲインはかなりアップするのだが、なにがツラいって、作業的にほとんど収穫のない日の記述ほどツラいものはない。早い話が「ぜんぜん動いてくれません」という状態である。ホントに「ぜんぜん動いてくれない」と当然、書くネタに困り、ヘンに動かない理由を想像して書いてしまったりするわけで、それが見当はずれだった日には、とってもハズかしいことになるのである。

  と、こんなことを書くからには、まさに現在その状態だといっているようなモンなのだが、事実ほぼその状態なのである。ちっともシリアル通信が動いてくれないのである。以前に同じような回路で動かした(まだ昨日のUSART機能は使ってない)のだが、今回は理由もわからずかなりハマり状態なのである。

  が、実はちょっとばかり気づいた点があったので、明日試してみるつもりである。ここで「ちょっとばかり気づいた」とは書いたものの、ほぼそれが動かない理由だと確信しているのである。それが何かはここに書かない。なぜかって、そりゃさっき書いたとおり、それが見当はずれだった日には、とってもハズかしいことになるからである。

  本当はなにがツラいって、こういうネタを書いた後が一番ツラいのである。もー、二度とこんなネタでゴマかすことができないからである。というわけで、さりげなくイーワケしつつ、まったくもって中身のない日記を終わる。では、おやすみ。


2005-08-26(Fri) 激しく江戸へ戻る

  すまんッ!! 今日は先に謝っておく。なにしろ、すまん。今日は名古屋での勤務を終え、夕方からSVXで江戸に戻ったのだが、その行程でとんでもない走り方をしてしまったのだ。

  今日はこれから、ズガーンと、江戸まで400kmの距離を戻るので……といいつつ、仕事を定時で抜け、153号を通って、東名三好ICから、東京方面へ……なんだ? 岡崎、豊川間、工事渋滞? 抜けるのに40分? そんなら下りて一般道を抜けてみるべ……下りてみる。前回、下りて中途半端に成功したのがイケなかった。今回は、音羽蒲郡で下りたら、1号へ出るだけで、大変な混雑。そこから、豊川まで混みっぱなしだ。まったくもって、高速は下手に下りるものじゃない……むしゃむしゃ。途中、マクドナルドに寄って購入した、チーズバーガ3つにカブりつきつつ、反省しきりである。豊川ICで高速に復帰したときは、40分の渋滞に対して、80分ものロスをしてしまっていた。仕方ない、晩飯を食う時間と考えて、自分をゴマかそう……とほほ。

  さて、再び東名高速に戻ったのはいいが、花の金曜日のこの時間、高速がこーゆータイプのドライバで埋め尽くされているとは知らなかった。おい!! そこのクルマ!! なんで、右を100km/hソコソコでタラタラと走っているんだ!! いや別に100km/hが法定速度だというコトは十分にワカってはいる。ワカってはいるが、ソコは追越車線なんだよッ!! 追い越させてくれッ!! 頼むからッ!!

  いつもは、比較的ジェントルに、追い越しの意思を示すオイラである。だから、そーゆー中、パッシングや蛇行、極めて短い車間距離などで、追い越しの意思を示す、いわゆる「追い越し過激派」を、冷ややかな目で見ていた。んが、しかしッ!! そーゆー過激派が少ない状況下では、道路がこうも、まったりとしてしまうものだとは知らなかった。それなら、オイラがやらなきゃ、どーしよーもないじゃないかッ!!

  だって、追い越し車線に3台くらい連なっている遅いヤツらをパスしたら、その前にはだーれも走っていないんだぜ? 下手すると、走行車線のが速く走っていたりする。どー考えても、これは罪であろう。パッシングまではしないが、車間距離を詰めて、イッパイまで右に寄って走る。それでもなかなかどきゃしねぇ。仕方ないから、左の走行車線の状況を確認しつつ、左からガツーンと追い越す。気がつけば、首都高でクルマの間を縫うように追い越していくバカポルシェのような走りをしているオイラがいた。あー、すまん。SVXの品位を落とすような走りをしてしまった。でも、だってぇ……だってぇッ!!

  ここ2ヶ月のうちに、4回……いや、3回のクルマでの往復を繰り返したオイラであるが、今回ほどストレスの溜まった時はなかった。まぁでも、SVXに乗っているのだし、たまにはこんな「若い」走り方をするのもいいかもしれないかな。

  あー、念のため、言っておきますが、オイラはいつもこんな走り方をしているワケじゃありません。道路状況の悪い高速に乗っているとき、SVXの調子が絶好調のとき、隣に女の子を乗せていないとき……この3つの条件が揃った時だけに発動する、V-MAXモードなのである。念のためったら、念のため。


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アドレスを連絡しろ、というような、なんだか向こうの不具合のような記述が<かきかけ>

  画像の説明

画像の説明



2013-08-26(Mon) Ruby/GTKでミサイルコマンドクローン

  一応、完成。プロトタイプから、一ヶ月近くもかかってしまった。GTKの習作のつもりだったが、ゲームのSDKを作ってたような側面もあるような印象。次は、グラディウスでも作ってみようかしらん。

 

  しかし、イマドキは、実物のプレイ動画を参考に移植作業が行えるのが新鮮だなぁ。

  ソースコードはコレ。別途イメージが必要。


2022-08-26(Fri) 色々なノイズをジェネレートする

  シツコく飽きずにオリジナルのシューティングの製作をポチポチと進めているのだが、いくつか敵キャラクタを用意したところで、そろそろ効果音が欲しくなってきた。

  以前に「sox」というコマンドラインツールを使って効果音を作ったことがあり、少しイジり始めたのだが、音に対する自分の知識が少ないのに対して、ツールが多機能すぎるので、どうにも勝手がわからない。このパターンは……あー、いかんて、いかんて、次はサウンドエディタ作り始めちま……で、またもや「ヤクの毛刈り」の始まりである。

  で、正弦波、矩形波、三角波、鋸歯状波あたりを生成、合成や変調、周波数、音量を変化させるアルゴリズムを組んだ辺りで、ノイズの実装が必要になってきた。ん? ノイズって、種類があったよな。ピンクノイズとか。フムン。ブラウンノイズなんてのもあるのか。このパターンは……あー、いかんて、いかんて、次はノイズ生成エンジン作り始めちま……と、さらなる「ヤクの毛刈り」の始まりである。

  ホワイトノイズは簡単だ。ブラウンノイズは「ホワイトノイズの積分」らしい。基本、数学が苦手なオイラだが、試行錯誤しているうちにそれっぽいのがデキた。フタを開けてみればこれも単純だ。

  問題はピンクノイズ。1/fゆらぎの実装が必要らしい。1/fゆらぎといえば、このブログを始める前にUSB扇風機にPICマイコンを使ってそれっぽい制御を組み込んだことがあったな……などと、思い出す。弱い変化は頻繁、強い変化は稀、というヤツだ。が、結局よくわからず。ググッてどこかで見つけたサイコロ理論をアレンジして組み込んだ。

  答え合わせは、生成したノイズを「Audacity」に食わせ、周波数解析することで行う。まずはホワイトノイズ。

  画像の説明

  だいぶバラついているように見えるが、左の軸が自動調整により拡大されすぎているからだ。-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__

  プログラミングの歓喜を無限に味わうために。次のヤクの毛刈りのために。次の次のヤクの毛刈りのために……。