落胆がらくた街

Dr.Rootはサポート終了製品です。

CubaseでMediaBayを開くとクラッシュする時の対処法覚書

一時はマジでどうなる事かと思った

環境:Cubase artist 7.07 64bit
OS:Windows 8.1
症状:プロジェクトファイルの如何を問わず、Mediabayを開いた数秒後にアプリケーションが応答を停止する。
対処法:C:\Users\[USERNAME]\AppData\Roaming\Steinberg\Cubase [version]内にあるmediabay3.dbってファイル(バージョンによっては微妙に名前が異なるのかも?)をふっ飛ばせば解決。

参照元:www.steinberg.net • View topic - Mediabay Crash

日本語の記事がなさ気だったので書いた。治ってよかったー

ht82v739とNjm4580でギターアンプを自作した

エレキギター云々の過程でオペアンプ回路をちと学んだのでギターアンプも作ってみた。
結果から言うと、何故か?電源を入れてからちゃんと音が出るまでタイムラグが出るというか、ディストーションのツマミをぐりぐりしないと音が出ないという変な感じになってしまったのだが、それに目を瞑ればまぁまぁなブツが出来上がった(挙動からするにコンデンサがいかんかったかなぁ)。
改善の余地はあったもののとりあえず完成させちまえ、という事で組み上げた。

回路図
f:id:suzumodoki:20160325144521j:plain
最早雑さ汚さには触れるまい。

注意!記事の最後の方で触れてるけどこいつ電源とGND逆に描いてます このままやると火花散るけど回路図修正するのめんどいんで電源だけ逆にしてねごめんね

黄色枠の部分が信号入力と増幅部分、つまりこの回路の心臓。
なんか手元にオーディオ用の220ufがあったから直列につけてみた(コンデンサ自体は必須)けどこれでかすぎた。
入力抵抗10k、帰還抵抗が10k+(0~500k)なので最大51倍の増幅を行う基本的な反転増幅回路。

赤色部分はバイアス電圧生成部(この表現正しいか不明)、オペアンプを単電源で使うための回路。
前回のギターモドキ回路と同じもんだけど、ようは電源USB5Vを47k2つで分圧したげてオペアンプにブチ込む。実はオペアンプの勉強はそんなしてないので何故これでうまくいくのかわからない(よく見かけるのは入力信号に電圧をかけて非反転加算回路っぽくするやつだけどこれは微妙に異なる)。何でもするので誰か教えて下さい。

青枠は出力部。オペアンプ出力直後のマイラコン0.047ufと10Ωの直列はZobelフィルタとかいう奴?らしくてLM386の参考回路にあったやつを試しに入れてみたらノイズが減ったので採用。これもよく分からんおまじないみたいな回路だが、高周波帯に負荷をかけて安定させる?らしいぞ。何だそりゃ。
その後の回路はバンドパスフィルタとダイオード二個による電圧リミッタ回路。このダイオードの順方向電圧Vfが0.3Vというのは結構重要で、後段のオーディオアンプの入力の絶対最大定格に等しい値である。「絶対最大定格と等しい電圧に抑えこむ」ってのはあんま良くないんだけど(もっと余裕をもたせるべき)、データシートみたらこの回路の電流じゃ0.3Vを下回るっぽいので善しとした。ちなみに一般にショットキバリアダイオードはVfが0.3~0.5Vくらいで、0.3Vを上回るようなら抵抗を直列に入れればいい。
バンドパスフィルタ、つまりLPFとHPFの合わせ技だが、こいつらはそれぞれオペアンプの出す2.5Vのバイアス電圧と広域のノイズを取り払う役目をしている。
この定数だと幾つだったか忘れたけど確か数十ヘルツと3kヘルツくらいだったかな?がカットオフになる。確か。

で下の緑がオーディオアンプHt82v739、手前に音量調整ボリュームがある以外はデータシートに載ってたアプリケーションノートそのままである。
ちなみに音量調整ボリュームは意図があってこの位置に置いたんだけど案の定裏目に出た。大人しくオペアンプの手前に置くべきだった。

~~~

さてギターアンプは一種のスピーカーなので、箱に取り付けてしまわなきゃならん。
というわけでハンズで木の板(200円)と百均の升(100円)を買ってきた。蓋のが箱より高いってなんやねん!
f:id:suzumodoki:20160325232523j:plain
後ろに電源用のUSB口を出す穴を開けて、
f:id:suzumodoki:20160325232809j:plain
基板もちゃちゃっと組み上げて(スピーカーは秋月で300円だった 在庫限りらしいっすよ@20160325)
f:id:suzumodoki:20160325234051j:plain

音は…ちゃんとした(?)アンプの音を知らないので良し悪しの判断が付かないが、この程度のシンプルな回路ではそうそう良くはないだろうと思う反面、思ったより"らしい"音は出てるんじゃないかというのが感想。残念ながら録音機材を持っていないため(Zenfone5のマイクはゴミ)、一番肝心の音は追って、という事に。だらしねぇ。


余談。
ネットでギターアンプ自作を調べると、大抵、というか、ほとんどが、LM386(及びその互換品NJM386)を使用している。
そのため当初はこれで作る予定だった。NJM386も買った。作ってみた。なんじゃこりゃ。
9Vかけてるのに音量は大したことない、というか最大倍率の200倍をかけると割れる割れない以前に発振しまくって使いものにならない、音も大して良くない、というかとにかく発振発振アンド発振でまるで話にならない!
そもそもギターのディストーションはある種の副産物というか、電源電圧まで音量を上げる事によるクリッピングが大本なんだが、実際はそんな無茶はせず前述のダイオードみたいな感じで入力信号の段階で電圧を頭打ちさせた方が色々と都合がいい。オーバードライブは何かと副作用が多く、その一つが高利得過ぎる事によるオペアンプの不安定化だった。この点を386はどうしてもクリアできなかった(というか何故386を使った作例がこんなにあるのか理解不能。何でみんな上手くいくんですかね?)。勿論オーバードライブに拘って作られた高度な回路ではその点がクリアされてるわけだ。でも今回の目標において拘るべき部分は手軽さと値段であった。
ちなみにこのアンプは結構お値段してしまった。回路部品はコンデンサだ抵抗だを幾ら買った所でせいぜい200円程度なのだが、
スピーカ300円
板200円
箱100円
ボリュームとキャップ 2セット300円
トグルスイッチ100円
フォーンジャック100円
電源用USBコネクタ100円
…でその他諸々の諸経費込で1500円程してしまっている。
これならジャンク屋で壊れた小さいアンプを買って治したほうが安上がりだったかもしれない…。



追記:20160709
コメントの存在にまるで気が付かんかった。

SIGNALの後ろにつないでいる可変抵抗はSIGNALとGRANDの間に入れて真ん中の矢印をアンプの入力に入れるほうが良いと思います。

SIGNAL --

<--- ---

GRAND 220uF

ごもっともである。そうした方がいいです(めんどいので回路図は修正しない)
あとバイアス電圧作ってる赤枠の100ufコンデンサ、無いほうがいいかもしんない。抵抗を通ってきたバイアス電圧はハイインピなんで、ここに容量でかいコンデンサがあると貯まるのにかかる時間がべらぼうに増えて前述の問題が加速する。こうなるとノイズ低減のメリットをデメリットが上回る。なんでもやりゃいいってもんじゃないっすね…


追記:20170509
やはりコメントをまるで見ていなかった。

HT82V739のGNDとVDDが逆ですよw

うわぁ、本当だ…
厳密にはピンアサインの名前はあってるんだが繋いでるものが真逆だ。この通りにつなぐと最悪火花が散る。なんでもするから許して!


追記190207 コメント返信

お世話になります。僕もHT82V739を使って遊んでいます。お聞きしたいのはHT82V739の1番ピンには1μFを繋ぐのが普通ですが22μFを使っておられます。これを大きくすると壊れると言われていますが、今まで問題はなかったですか?
僕もこれを大きくして低音を利かせたいと考えています。ご意見を貰えたら嬉しいです。

コメント頂きありがとうございます。1番ピンには~とありますがおそらく2番ピンの事ですね。
データシートによる2番Aud In端子の記述をまとめると、

  • 絶対最大定格は-0.3[v] ~ +0.3[v]
  • アンプはこの端子の入力を増幅して吐く

ということで、ここには極端な話-0.3~0.3Vまでの電圧しか入らないならコンデンサが何であろうが良いという事になります。
公式の参考回路では1uFのコンデンサを介して信号を入れてますが、直流カットという目的では何Fでも構いません。
また前段の出力部にあるダイオードクリッパ回路でプラスマイナス0.3Vをクリッピングしている為、数値は割と何でも問題ありません。

おそらく「RC ハイパスフィルタ」とかで調べるとより詳しく幸せになれます。面白いものが完成したら教えてね!

ギターのような何かを手に入れた② ギター側回路編

製作記事でありながら、写真を撮るという習慣が普段全く無いので、画像資料が皆無になった。なんつーこった。

【ギターの回路を考える】
兎にも角にもエレキギターである以上、音声を出力できなきゃ話にならんので、D-PUの出力を何とか吐けるようにする。
いずれギターシンセとして拡張する事を考えると、単純にD-PUの出力をショートさせてはい終わりでは調子が悪い(尚、これはどの道上手く行かないのであった。後述)
というわけでオペアンプによる加算回路をギターに組み込み、D-PUの6つの出力を1つに纏めて出せるようにする。残念ながら、電力を使わずに解決する手段は思い浮かばなかった。

【回路】
f:id:suzumodoki:20160321205545p:plain
実は回路図を当初フリーハンドで描いてたので後から回路図エディタで描き直した。あと回路図の正しい描き方とかを習ってないので変な所があるかもしれない。
またあろうことか電源ラインのパスコンを省略して描いてしまっているが、VCC-GND間に数百uf、ICの足付近に0.01ufを入れている。ちなみに大きい方は調子に乗って470とか挿したら起動に時間がかかるという本末転倒に陥ったので100程度がよかったのかもしれない。
やっていることは単純なオペアンプによる加算回路で、強いて特徴を挙げるなら反転加算回路をバイアス電圧かけて片電源で使ってる所だろうか?
ネットで探してもこれといったものが無く(非反転加算回路の片電源使用はあった)、本を調べていたら
OPアンプ活用 成功のかぎ
なるものがあり、この本の中でサンプルを発見したのでガッツリパクった。それを除いても、まるっきり初学者にも満たない私ですら大変参考になった良書です。
ちなみに非反転加算回路を避けた理由は、入力インピーダンスやらノイズやらでいい話を聞かなかったからだが、結局「反転の方が良いんだよ!」としか理解できなかった。情けねぇ。

【組み立て】
組み立て、という程偉そうなことはしてないんだが、電源が必要であること、電源をギターの中に組み込むスペースが無く外付けにせざるを得ない事などから色々考えなければならなかった。
使ったのは以下。
www.aitendo.com
USBの口をパネル取り付けするという、身の回りでは当たり前のようにされている事がいざ自分でやろうとするとやたら難しいという問題を一発で解決する有能オブ有能製品。お勧め。

Amazon.co.jp: MOCREO® モバイルバッテリー、超薄型ウルトラポータブルモバイルバッテリー: 家電・カメラ
薄型のモバイルバッテリーで、そこそこ安いもの。何か似たような製品でコストパフォーマンスに優れてるのならなんでも良い気がする。

他に、何か部屋に落ちてたネオジム磁石二個とドイトで売ってた裏にテープが貼ってある磁石くっつくやつ。

f:id:suzumodoki:20160321211550j:plain
USBの口はギターの背面に顔を出すように。まぁ…よく出来た方なんじゃないの…私にしては………。

f:id:suzumodoki:20160321211628j:plain
ネオジム磁石二個を埋め込んだ所。ドリルで削って嵌めただけ(本当は接着剤かなんか使う予定だったんだけど、試しにはめ込んでみたら全く外れなくなってそのまま)

あとはモバイルバッテリーにテープ付き磁石みたいなのを貼って、ギターに繋いでくっつけるだけ。FF7クラウドくんの背中に剣付けてるアレと同じギミックだな!

タッチセンサ RH6010をMbedで使ってみた

無駄にツボを抑えた製品を格安で揃える事に定評のあるいぶし銀ことaitendoでタッチセンサをなんとなく探してたら「8ch I2C接続タッチセンサ」なるものを発見した。

タッチコントローラ(8ch/I2C) - aitendo

お値段なんと100円也。ピッチ変換基板もセットで買って200円。レッドブルより安いぜ!

で、普通ならわざわざブログで書くような話では無いんだけれども、この製品、

・データシートが中国語しかない
サンプルソースらしきものもざっと探した限り見当たらない
・少なくとも日本語の資料は見当たらない
・データシートに書いてある内容が必ずしも正しくない

という状態なので、決して大した内容でないどころかまだ使いこなせてすらいないのだが、無いよりはマシという事でサンプルと使ってみた感想を記す事にした。私は中国語がさっぱり解らないし、記事の内容の信憑性も怪しいので、詳しい人がいたら是非意見を伺いたい。というか誰かライブラリとして仕上げてくれ。

#include "mbed.h"

I2C i2c(p9,p10);

const int addr = 0x78<<1; // データシートに書いてある0x78は右詰めなので左1シフト

#define SCT 0x2    //多分だけどセンシング時間の事 0b11で感度最大、0b00で最低(=最速)
#define SFT 0x3f    //上のさらに細かい版かなぁわかんない でかい程感度がいいらしい 6bitだから0x00~0x3f
#define OTC 1   //センサに入れるクロックがどうのこうののフラグ 1で感度が良いらしいしデフォが1だそうだから1でいいんじゃね
#define MOT 0x3    //ずっと触れっぱ判定が続いた時再キャリブレーションする時間 0b00で100秒、0b01で50秒、0b10で20秒、0b11でしない(デフォルト)
#define OLH 1   //INTの出力どうするか 1でHIを吐く(デフォルト)
#define KEYT 1  //マルチ判定がどうのこうの 1でマルチ(デフォルト) 0でシングル判定 0の存在価値が不明
#define LPM 1   //省電力モード 1で無効(デフォルト) 0で省電力モードになる
#define RTC 0x1    //再キャリブレーション時間(そのものの時間) 省電力モードでない(=LPMが1)場合、00で1秒、01で3秒(デフォルト)、10で6.3秒、11で13秒かける

int main()
{
    char cmd[2];

    cmd[0] = 0x0;            // CONFIG1 コマンド
    cmd[1] = (SCT<<6)|SFT;
    i2c.write(addr, cmd, 2); // Send command string
    wait(0.07);              // Could also poll, 65ms is typical

    cmd[0] = 0x1;   //CONFIG2 コマンド
    cmd[1]=(OTC<<7) | (MOT<<5) | (OLH<<4) | (KEYT<<3) | (LPM<<2) | RTC;
    i2c.write(addr, cmd, 2); // Send command string
    wait(0.07);              // Could also poll, 65ms is typical

    while(1) {
        cmd[0] = 0x2;
        char idx=1;
        i2c.write(addr,cmd,1);
        i2c.read(addr, cmd, 1);

        // 結果を出力
        for(int i=0; i<8; i++){
            printf("%d",(cmd[0]&idx)!=0?1:0);
            idx=idx<<1;
            if(i==7)printf("\r\n");
            else printf(":");
        }
    }
}

…初めて使ってみたけど見難いなソースコード。何かなんないかなこれ。

使い方。回路は以下のようにする。
f:id:suzumodoki:20160313170251j:plain
…本来はちゃんとした回路図を描くソフトを使うべきなんだろうけど面倒だった。無いよりマシが合言葉。
タッチがあった時に信号が飛んでくるINTピンは試してないのでNC。
それと右上のCJM/CJPは0~50pF程のコンデンサ通して感度を落とせるらしい?んだけど手持ちにそんなもの無いので未検証。NCで感度最大(デフォルト)らしい。
真ん中8つ(TP0~TP7)がタッチセンサとして働くんだけど、直列に抵抗を入れて感度を弄る(その為定数を記入していない)必要がある。
データシートでは1kを通せとの事だったが大嘘で、少なくとも私がやった限りでは10kが一番それらしい挙動をした。
あとデータシートはSda/Sclに直列100Ωの抵抗をつけてMCUに繋げ、との事だったが無くても動く以上必須ではなさ気。その代わりプルアップが必須である。

パラメータについて
以下は全て環境によるのであくまで参考程度に。
SCT、STF…どうもGoogle翻訳さん曰く感度を弄れるらしいのだが、ちょっと下げたら速攻でセンサが反応しなくなり、上げると他のピンまで反応した。SCTは0x2が最適のよう。STFは模索中。
MOT…色々変えたが特に効果が見られず謎。
これ以外のパラメータは未検証。

使ってみた感想
どうも暫く触って遊んでいたら、主に長時間触り続けた時にセンサの値が1に張り付く現象が見られた。
こうなると再キャリブレーションが必要(恐らくMOTはそのためのパラメータ)なのだが、できればこれを手動でやれないかと思った。
これさえ無ければしっかりタッチを認識してくれるので、細かい調整さえしてやれば使い道はあるかもしれない。
多分電気スタンドのスイッチのような、ワンタッチで済むような用途であれば格安で実装できるんじゃないかな。下手なスイッチより安いし。
タッチ式キーボードみたいなのは要検証。あと布越しでもタッチ反応するか、とかも検証の余地あり。
総合的に見て良い玩具というのが感想。問題は手汗体質と恐ろしく相性が悪い事くらいだな!

ギターのような何かを手に入れた①

【'15年の夏まで遡る話】親戚の家で幼児のおもちゃにされていたそれを発見した時は驚いた。ネットにもほとんどデータのない、古のおもちゃである。詳細は他所様の記事に任せるが、「ローランド GC-10」なるものらしく。

♪Illustrator-meiste Yukio Miyamoto♪ Roland MIDI Guitar Contoroller GC-10

f:id:suzumodoki:20160126223427j:plain

 

ギターの分かる人でも分からないかもしれない、「DividedPickup(以下DPU)ただひとつのみをピックアップに持つエレキギター」という最早エレキギターと呼んで良いのかも怪しい代物。

しかし当時全くエレキギターに詳しくない私にも、その価値は見当が付いた。そこで、どうせ子供のおもちゃならと頼んだら快く引き取ることが出来た。でも私はギター経験無し。あのさぁ…

 

して、ガバガバ工作室オーナーとしては、このゴミをなんとか面白いことに使わないと気がすまない。'16年1月26日現在にして未だ達成できていない牛歩の如きプロジェクトがこの時始まったのである。お前ものづくりの才能無いし引退した方がいいと思うよ。

 

 

【大雑把な解説】

さっきさらっと言ったDPUについて触れる…前に、エレキギターの仕組みそのものについて考える。

エレキギターは「金属製の弦」と「ピックアップコイル」が心臓と言っていい。無学故、物理の話はさっぱり分からんが、めっちゃ大雑把に言えば「ピックアップの上で金属弦を振動させるとその振動に応じた電流が発生する」というのが基本中の基本になる。ピックアップってのは磁石の周りに導線ぐるぐる巻いたわけわからん部品なんだけど、カバーに覆われてるからその御姿を見ることは無い。だから、「ギターを弾く=弦を振動させる=電流が発生する」という一連の流れがエレキギターというシステムと言っていい。ただし、たかだか細かく弦を振動させるくらいで得られる電流はゴミみたいなもんで、所謂「エレキギターの音」ってのはアンプを通してこのゴミみたいな電流を大きく増幅させたものになる(このアンプという名称も曲者で、後々細かい話をしたい)。

 

で。

我がDPUと普通のピックアップ(以下PU)の何が違うのかというと、普通のPUが「ギターの6つの弦を全部まとめて一個に出力する」のに対し、DPUは「弦毎に別々の出力を持つ」という特徴がある。色々省くがようは「ギターシンセはDPUじゃないと難しい」という一点に落ち着く。このGC-10はギターシンセのコントローラーであって、純粋なエレキギターではないのだ。キワモノじゃねーか!しかも肝心のギターシンセは当然のように無い。お値段うん万するし買うのはありえない。ギター弾けないし。

 

【今後の展望】

して、このキワモノで色々遊ぶことを考える。最終的にはギターシンセというかMIDIコントローラとして使えれば言うこと無しだが、FFTとか大変そうだしMIDIあれこれも面倒だしでこれは最終目標とする。ということで、当面は「ただのギターとして使えるようにする」というのを目標にしようとした。

 

 

たかがそれだけ、たったそれだけの事だと……思ったんだ………

アケコン自作(完)

f:id:suzumodoki:20150319040316j:plain

木材を打ち付けて終わり。

開けにくいのであんま良くない。次何か問題が起きた時他の仕組みに変更する予定。とりあえず使えるからいいか…

 

 

やる気があったらアケコン自作のまとめ記事でも作ろうかと思っている。できたらやる。

XNA(MonoGame) 画面サイズに合わせて描画スプライトをスケーリングする

MSDN

画面のサイズに応じたスプライトのサイズ変更

の内容が嘘っぱち(XNA4.0の場合)なので報告ついでにその内容のコピーをメモ

XNAなんてオワコンwwwとか思ってたらMonoGameで使いますよみたいな話だった

ただ直すべき部分は一箇所なので大したミスでも無いんだけど…

 

 Draw メソッドで、SpriteBatch.Begin を呼び出し、LoadContent で作成したスケーリング行列を渡します。

 この部分がまるで反映されてない。

原文

spriteBatch.Begin();

は、 正しくは

spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null, SpriteScale);

 

 

幾つか不満があって、まずこのBeginメソッド、デフォルト引数の類が使えず、Matrixを渡すにはその前に大量の引数を渡さなきゃならん。というのも、デフォルト引数は「コンパイル時に決定される定数」じゃないと使えないという性質があって、基本型以外の型を渡せないんだな。

大体の引数はそんな滅多に使うもんでも無さそうだからnullでいいと思うんだが、まだXNAは触り始めたばっかでよう分からん。誰かいい方法あったら教えてくれませんかね。

 

ちなみに風邪のような何かでもうかれこれ熱が13日続いてる。医者にも分からんらしい。