2012年6月28日木曜日

スタックボリュームポットの改造

ギターの時にもやったけどね.
今なかなかまとまった時間が取れなくて細々とした作業しかできない.
あとでギター含めてちゃんとしたまとめができたらいいなぁ.

今日の作業はこれだけ.
このスタックボリュームA500kΩとB50kΩ.
モノによって構造が違うと思うけど
分解する.
こいつらも千石2で買ってきた.
ボリュームのくせにいい値段するよね.ギター用ってなんでこんなに高いんだろう.

こいつらの分解方法は底面のツメと黒いパーツを外す.
ツメも黒いパーツもラジオペンチだけで外せるよ.
むしろ他の工具使うと難しくなる.

んで, 2段になってる底のほうをそれぞれ入れ替えて
ツメと黒いパーツを戻しておしまい.

2012年6月26日火曜日

次の獲物はこいつだ(・∀・)

の獲物

前回のESP REINDEERギターシンセ化から2ヶ月.
次の獲物はこいつだ(・∀・)

Ibnez SR3000
こいつをベースシンセ化するよ!
ということでGK-3Bを買って来た.
んで仮でマウントしてみた.
見ての通り,こいつもボディが小さくてGKをマウントする場所がない!

しかも今回は早々にディバイデッドピックアップをネジ止めしてしまった.
もうやるしかない!

ということで今回もSR3000にGK-3Bを内蔵していくことになった.
ちなみにコントロールキャビティに基盤が入るかどうかは確認していない.
入らなかったらマジ詰み.

GK-3BはGK-3と違ってブリッジから5cmまで離れて設置できるらしい.
ちなみにGK-3は2cm.
今回試しにつけてみたら一番近い1弦でなんと5cmちょいオーバー.
まぁやるしかないて.

このSR3000さんはIbanezのmade in Japanモデル.
当時はまだSRスルーネックベースがない時代だったかな.
初期タイプだからピックアップがバルトリーニじゃなかった.
写真を見て分かると思うけどリアピックアップはハムに変えてる.
フロント部分にはフェンス.
不可逆改造という暴虐の限りを尽くしたベース.
のつもりが,まだ電気系統はピックアップ変更以外いじってなかったので
今回大幅に手が入ることになる.

何しろ少なくともアクティブサーキットにおさらばしないと
このディバイデッドピックアップ基盤が入らない.


気系統をどうするか

とりあえず軽く完成図を考えておかないとね.
こんなかんじで.
アクティブサーキットは取っ払う.
どうせ音はベーアンで作るから使わないし.
そしたら穴が2つ空く.ギターの時と違って2つも!余裕!
その空いた穴にスイッチを2つ入れる.
ギターの時とは違ってスイッチも2つ.

1つはギターの時と同じ用法でパッチチェンジ用のスイッチ.
もう1つはアウトプットセレクト.
ノーマルピックアップをフォンジャックに流すかシンセ基盤に流すか切り替える.
前者は(ON)-OFF-(ON)の2回路スイッチが必要.
後者はON-ONの1回路スイッチ.

で,ボリュームはギターの時と同様にA500kΩとB50kΩのスタックボリュームを改造して
A500kとB50kの混合スタックを作り上げる.

バランサーはそのままバランサーとして使う.

この構成だとノーマルピックアップもGR55のエフェクトを使えるようになる.
ギターの時はノーマルピックアップはフォンに流すだけだったから使えなかったのよ.
スイッチを仕込む場所がなくて諦めた.

GRの機能をフルで使えるからシンセベース×2,ベースシミュ,ノーマルピックアップの
ベース4重奏が実現できる!


ずやること

一番最初は地味な作業から.

ギターの時もやった舟形ジャックの穴拡張.
舟形ジャックは千石2で280円だったかな.

かなり時間がかかる作業だけど地道にやっていくよ.
ほいでは.

↑2時間くらいで終了した.

2012年6月19日火曜日

MIDIIO on VC++ つづき

環境が二転三転しています.
当初はWindows 7(64bit) + VisualC++2010でやっていましたが
なんと今はWindows Vista(32bit) + VisualC++2008でやっています.
本当はWindows XP(32bit)上でプログラミングしたかったのですが,
どうしてもVisualC++のプロジェクトが作成できない.
そんなこんなでサブ機でプログラミングしています.

環境は変わりましたが,前回の設定を変更する必要はありません.

今回は音が出るところまで確認しました( ´∀`)
つまり,そこまで行けばあとはプログラミング次第です.

やっていきましょう( ・`ω・´)★


MIDIIO VC用Wrapperのダウンロード

どうやらC++/CLI上ではぴゅあーなCで書かれたMIDIIOライブラリだけで叩くのはきついようです.
というわけで素敵なお方がC++用Wrapperを作成して下さっているので
ありがたく使わせていただきましょう.
http://www.geocities.jp/yuusui_housuu/openmidiproject/midiiolibcpp/index.html
ここからダウンロードします.とりあえずアップデートが一番新しいのでいいと思います.

そして前回と同じようにヘッダーファイルはVCのincludeディレクトリに放り込みましょう.
ダウンロードしたファイルを解凍し,中に入っているMIDIIO_cpp.hを
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include
ここでしたね.


ファイルの配置・修正

そのMIDIIO_cpp.hは一点だけ修正します.
#include "../MIDIIOLib0.8/MIDIIO.h"
これを
#include <MIDIIO.h>
にします.
VisualC++が見ているincludeディレクトリ内にMIDIIO.hを前回入れているからこれで済むのです.

次に同じく解凍した中に入っているMIDIIO_cpp.cpp
これをプロジェクトのソースファイル・ディレクトリに追加します.
ダウンロード元のサイトにある画像のようにすれば大丈夫です.

このMIDIIO_cpp.cppも修正します.

①インクルード元を変更
さっきのヘッダファイルと同様に
#include "MIDIIO_cpp.h"

#include <MIDIIO_cpp.h>
に変更します.
上の手順でincludeディレクトリにヘッダファイルを追加したからです.

②デバッグ用とか知らんし
#ifdef _DEBUG
        #pragma comment(lib, "../MIDIIOLib0.8/Debug/MIDIIOd.lib");
#else
        #pragma comment(lib, "../MIDIIOLib0.8/Release/MIDIIO.lib");
#endif
このifdef文を大胆に
#pragma comment(lib, "MIDIIO.lib");
これだけにしちゃいます.
前回,MIDIIO.libをSysWOW64(もしくはSystem32)に置いています.
なのでVC++はこれだけでライブラリを参照できます.

③プリコンパイル済みヘッダは使用しません
#include "stdafx.h"
この一文を消しましょう.
ついでに,このままではエラーだらけになるので,

プロジェクトのプロパティから
「構成プロパティ」> 「C/C++」>「プリコンパイル済み…」
と選択し,
「プリコンパイル済みヘッダーの作成/使用」を
プリコンパイル済みヘッダーを使用しない
に変更します.

以上で今しがたダウンロードしたファイルの編集は終了です.


ストプログラム実装

さきほどのMIDIIO C++ Wrapperのサイトにある
サンプルプログラムを動かしてみましょう.

今回はWindow FORMプロジェクトなので
main関数はとりあえず一旦触りません.

前回同様testFunc関数内に記述していきます.
前回作ったtestFunc関数の中身は全部消しちゃいましょう.
そこに
2.MIDI出力を実現する
のmain関数内の処理をコピペします.

それから,ヘッダファイルのインクルードも忘れずに.
#include "..\MIDIIOLib0.8_cpp0.2\MIDIIO_cpp.h"
こいつだけは 
#include <MIDIIO_cpp.h>
こうなります.

そして,main関数内の適当な場所でtestFunc関数を呼んであげましょう.
 
音が出ましたか?
これでMIDI出力サンプルが動いたはずです.
 
あとは適当に実装を重ねていきましょう.
それでは〜 

2012年6月14日木曜日

MIDIIO on VC++2010Express

今VisualC++でMIDIを扱おうとしています.

っていうか久々でしたね.

自分のための備忘録です.
他の人は役に立つかなー?

そこでいろいろ調べていたらMIDIIOっていうモノがありました.
MIDIIOってのはMIDI信号の入出力用ライブラリなのですよ.
こんな便利なものがあるなんて!
これで勝つる.
と思ってはいたんだけど実際に組もうとすると
リンクエラーが出まくったのだよ.

そもそも僕はLinuxの組み込みばっかりやってたから
VC++なんてほとんど使ったことない.
VC#は昔にDirectXプログラミングやってた.
なので知識がVC++単体で組めるレベルまでしかないのです.
外部ライブラリのインポート?やりかたわからん…

ということで手順.
VC++をバリバリに使ってる人からしたら
当然なレヴェルの出来事です(・ω・)

1.ダウンロードしなきゃ始まらない
MIDIIOはフリーなのです.
素晴らしい.
これで勝つる.
http://openmidiproject.sourceforge.jp/MIDIIOLibrary.html
ここから一番新しいモノを落としてくる.
今現在だとV.0.8かな.

MIDIIOの公式ガイドブックというサイトもあります.
http://www.oifii.org/ns-org/nsd/ar/cp/midi_sf-jp_Sekaiju2/MIDIIO/docs/MIDIIO.html

前提なのですが,このエントリはそのV0.8とVC++2010Expressを使って
ビルドが通ったぜ!ウェーイ
VC++2008Expressも同様に試しています(以下,赤字は後日追記)
っていうところまでしか確認してません.
音が出せない環境で今書いているので
素晴らしいことに動作確認していません.
確認しました ビルドが通るだけで鳴りません

で,ダウンロードしてきたMIDIIOLib0.8.zipを適当なところで展開.
我々が使うのは
・MIDIIOLib0.8\MIDIIO.h
・MIDIIOLib0.8\Release\MIDIIO.dll
・MIDIIOLib0.8\Release\MIDIIO.lib
の3ファイルです.

2.各ファイルを適切な場所に置く
その3ファイルをVC++の管理下に置きます.

VC++を開いて適当なプロジェクトを作ってみて
画面左の「ソリューションエクスプローラ」でプロジェクト名を右クリックして
「プロパティ」を選んで
「構成プロパティ」>「VC++ディレクトリ」
VC++2008では
ツール>オプション>プロジェクトおよびソリューション>VC++ディレクトリ

を見てみたことがあるのなら分かると思うのですが,
ライブラリやヘッダファイルを置く場所というのは決まっています.
VC++は特定のディレクトリにあるライブラリやヘッダファイルを見ているのです.
もちろんVC++が参照するディレクトリを追加することもできるのですが,
参照ファイルが増えるに連れ参照ディレクトリを増やすなどということは普通はしません.

なので,VC++が最初から見ている場所にMIDIIOのファイルを置いていきます.

ちなみにいまの環境はWindows7 64bitでやっています.
前提としてVC++がインストールされているディレクトリを
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC
とします.
VC++2008なら
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC
ですね
Express Editionではインストール先選べなかったと思うので
多分このあたりにインストールされてるはずです.

まずはMIDIIO.h
これは
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include
ここに移してください.

次にMIDIIO.lib
これは
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib
ここ

最後にMIDIIO.dll
こいつは
C:\Windows\System32
ここと
C:\Windows\SysWOW64
ここ
多分OSが64bit版なら後者だけでいいと思います.
32bit版なら前者(後者はないと思うふ)
まぁ両方入れておけばいいでしょう(・ω・)

これで下準備が終わりました.

この章の2文目に書いた「構成プロパティ」>「VC++ディレクトリ」を見てみてください.
さっきやったことで
「実行ディレクトリ」にDLLを,
「インクルードディレクトリ」にヘッダを,
「ライブラリディレクトリ」にライブラリを保存したことがわかります.

3.テストプログラムを実行するビルドを通す

MIDIIO 公式ガイドブックのVC++から使うサンプルプログラムを実行します.
http://www.oifii.org/ns-org/nsd/ar/cp/midi_sf-jp_Sekaiju2/MIDIIO/docs/MIDIIO.html#APPENDIX_A

まずはVC++を開き,今後のためも考えてWindowsフォームアプリケーションのプロジェクトを作りましょう.
ここではプロジェクト名をtestとします.
testプロジェクトができたら左のソリューションエクスプローラの
「ソースファイル」>「test.cpp」をいじっていきます.

すでにmain関数が出来ているはずなのでとりあえずそいつは放置
適当な関数名int testFuncとでもして作成します.
testFunc関数内にサンプルプログラムのmain関数をまるっとコピペ.
インクルードするヘッダファイルの部分もまるっとコピペ.
でもそのままではエラーだらけです.

まずは
'MIDIOut_OpenW' : 1 番目の引数を 'const char [32]' から 'const wchar_t *' に変換できません。
というエラーが出るはずなので

MIDIOut* pMIDIOut = MIDIOut_Open ("Microsoft GS Wavetable SW Synth");
この行を

const wchar_t * wchar = L"Microsoft GS Wavetable SW Synth";
MIDIOut* pMIDIOut = MIDIOut_Open (wchar);
こう修正する.


次に
ijw/native モジュールが検出されました。pure モジュールとリンクできません。
とかいうエラーがでます.(ピュア)
元々.NETで使うことを前提としてないライブラリだからでしょうか.

ツールバーの「プロジェクト」>「プロパティ」
(or ソリューションエクスプローラのtestの上で右クリック,「プロパティ」を選択)
「構成プロパティ」>「全般」の
「共通言語ランタイムサポート」が「純粋 MSIL 共通言語ランタイム サポート (/clr:pure)」になっているのを
「共通言語ランタイム サポート (/clr)」に変更する
このエラーはこれで終わり


最後に
未解決のトークン **** が関数 **** で参照されました。

未解決の外部シンボル **** が関数 **** で参照されました。
外部参照  * が未解決です。
というエラーがどっさり出るはずです.

ヘッダファイルをインクルードしてる後に
#pragma comment(lib, "MIDIIO.LIB")
を加えてやるとこのエラーも終了.

これでビルドが通るはずです.

でもたとえmain関数内でこのtestFunc関数を呼び出しても
音はなりませんでした.
今回は第一章で書いたとおり
ビルドが通るまでなのでここまでです.

2012年6月12日火曜日

呪いのビデオに関する考察

Twitterに貞子がどーのっていうTLがあったから
妄想が発展しすぎたのでまとめてみた.



呪いのビデオって今もらっても再生できる機械がないよね

ぶあついブラウン管はまだしも,薄型液晶から出てくる姿はちょっと横から写メってみたい

テレビの前に押しピンばらまいてたらどういう反応するんだろう

ノートPCで再生して出てくる直前にたたんでみたい

っていうか11"のノートPCで再生してこの画面サイズから出てこれるのか??

呪いのDVDならリッピングしてピンクなタイトル付けてP2P放流したい

やっぱりコンポジット接続した機器から出てくる貞子とHDMI接続した機器から出てくる貞子とではHDMIのほうが綺麗なのかしら?

コンポーネントでRだけ挿したら真っ赤な貞子が出てきてシャア専用

高層ビルの窓にテレビを設置して呪いのビデオ再生したらそのまま落ちていくのかしら? いわゆる出落ち

ひょっとして画面サイズで出てくる貞子のサイズって変わってくるの?7"だと手のりサイズ 50"だとハルクサイズ

そもそも表示装置に接続せずに呪いのビデオ再生したらどうなるのかしら?

プラズマテレビだと電気属性に仕上がります

コンポジットをそのまま分配して再生すると貞子が増殖します その代わり1体1体がより暗くなります

貞子がもし二酸化炭素を吐くんだったら呪いのビデオとVHSデッキを火星に送ってエンドレス再生しておけばCO2による温室効果でテラフォーミングまでできる

貞子にもし人間と同じ程度の質量があるのならVHSを回転させる程度の電力で50kg弱の質量(アミノ酸で構成)を生成できる これは物理学に光明が差す

貞子にもし人間と同じ程度の質量があるのならテレビの前にカタパルトを設置,貞子が生成されたら射出.これを繰り返すだけでローコストなロケットランチャーが実現します.

ビデオラインをGND直結したら貞子はどこへ行かれるのだろう

ビデオラインにOPアンプによる反転増幅回路を組むと貞子が左右逆になるのかな

DLNA配信するとWiFiに乗って宙を飛ぶ貞子が!

2画面表示だときっと悲しむよね…


どうやら貞子というのはエネルギー問題に終止符を打てそうな技術のようです