2014年12月25日木曜日

表参道ヒルズのツリーにdelphiを使ってみた。


メリークリスマス

アドベントカレンダー最終日です。
2014、本年はお世話になりました。m(_ _)m
やましょうです。



さて、技術的にはとてもしょぼい内容なので、
まず、やましょうの今年あったことなど
とても無駄な内容で前半半分以上が記載されています。
面倒だなと思う人は読み飛ばしましょう。

時は本年6月第2週目までに遡ります、
その時、私は絶望の淵に立っていた。
「その引継ぎ何件目?」
もう、既に仕事を去った人の業務を引継ぎ続けていた。
そこに巨大な引継ぎ案件が告げられた2件も

そこで私は、引継ぎの担当者に当社に来て頂けますか?と告げた。

となると、それは私自身が無職になる事を意味した。
そして、ダメ元だとは思ったのだが、twitterの名称をこんな
名称に変えてみた やましょう(お仕事募集中)と。

7月中は、いままでの残務整理に明け暮れた、時は7月末になっていた。
そこに1本の電話がかかって来る。
「今度、大きなツリーを作る、是非、やましょうにも仕事として、と言う連絡だった。」
私は即座に了承した。その時は、表参道のツリーになる事はまったく知らなかったが、
了承し計画がスタートした。

その3時間後にDelphi界の大御所さんから連絡があった。
とても皮肉なもので、仕事が決まりだすと仕事は、どんどん入ってくるのだ。
しかも、既にツリーは決定してしまっている。僕は非常に悩んだ。
しかし、私は会社もあり、社員もいるので、
Delphi界の大御所にはかなり無理を言って譲歩してもらった。とても、感謝している。
Delphi界の大御所の所で働いた一ヶ月は、ちょっと嬉しく、自分には何が不足なのか、を感じた1ヶ月になった、前の会社を辞めて独立し、約20年近く、会社のオフィスとか縦割り的関係とか、社長の仕事とかいろいろとても、お金では買えない感覚や、勉強ができた宝石の様な時間だった。
(その他、仕事作って頂けたのにスケジュール都合等でお断りした皆さん、この場を借りてゴメンナサイ、本当に仕事いっぺんに来たのです。)

しかも、
この仕事が来たのも
Delphiのおかげだな。。と。

私を絶望の淵から救ったものは、Delphiだった。

8月以降の仕事は私自身がいかに、井の中の蛙かも、わかったし、この世にはいろいろな仕事が
あるものだな。。といろいろ感じた仕事だった。
そして、この8月以降の仕事は自分の人生の中でも本当に毎日が御褒美の様な日々でとても
たのしかったし、今でも毎日、御褒美をもらっているかの様だ。

そして、、
まず、どんなツリーか。。(本日25日まで、開催されていますよ。お近くの方は是非)


そしてどこにDelphiを使ったというと実は各楽器が光るのは
各楽器が演奏している時だけなのです。(クライマックス以外)
 
ちょっと荒い切り抜きなのでわかりずらいかもしれませんが、
各楽器毎に音にリンクして、LEDが光ります。

さて、これ普通にハード屋さんからいわせるとADで各Chの出力レベル
確認してLed点灯させているだろう。。と言われそうなのですが、
実は、違いまして、
前もってWaveファイルをDelphiを使って解析して
点灯、消灯情報に変更しています。

そして、それをデータ化=>Cのテーブルにする=>マイコンのソース=>マイコンに書く
言う実は、本当にめんどくさい処理をしているのです。

内容プログラム的にはWAVのチャンク解析して、データをテーブル化って
とても大味な書き方になります。このアイデアだけでよいかな。。と。。。。
とはいってもソースがないと。。

TYPE
TWAV = record
chank_ID   : array [0..3] of byte;
chank_SIZE : Dword;
Format_TYPE: array [0..3] of byte;
format_chank :array [0..3] of byte;
chank_size2  :dword;
PCM_TYPE     :WORD;
channel      :WORD;
SAMPLE       :DWORD;
BYTEPAR      :DWORD;
BLOCK_SIZE   :WORD;
BIT_SAMP     :WORD;
DATA         :array [0..3] of byte;
CHANK_SIZE3  :DWORD;
END;

//button1で読ませる ///
procedure TForm5.Button1Click(Sender: TObject);
var
 FS : TFileStream;
begin
  OpenDialog1.InitialDir := ExtractFilePath(ParamStr(0));
  if OpenDialog1.Execute then
  begin
    try
     FillChar(WAV_ORG_DATA,sizeof(WAV_ORG_DATA),00);
     FS := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
     fs.read(WAV_ORG,sizeof(WAV_ORG));
     fs.read(WAV_ORG_DATA,wav_ORG.CHANK_SIZE3);
    finally
     fs.Free;
    end;
  end;
end;

procedure TForm5.Button2Click(Sender: TObject);
var
i : Longint;
FW  : TextFile;
LMMax : Word;
RMMax : Word;
LWriteData : Byte;
RWriteData : Byte;
Str : String;
begin
  try
    AssignFile(Fw,(ExtractFileName(OpenDialog1.FileName)+'LTxt'));
    Rewrite(Fw);

    Str :='const unsigned char Ch01Table[]= ';
    writeln(fw,Str);
    Str :='{';
    writeln(fw,Str);

    for i := 0 to (wav_ORG.CHANK_SIZE3 div 4) -1 do
    begin
           LMMax := abs(WAV_ORG_DATA[i*2]);
           RMMax := abs(WAV_ORG_DATA[i*2+1]);


           if(LMMax >=  閾値) then LWriteData := 点灯値
           else                            LWriteData :=  消灯値;
////////////////////////////////////////////////////////////
            if(RMMax >=  閾値) then RWriteData := 点灯値
            else                             RWriteData :=  消灯値;
            Str := '  0x'+IntToHex(LWriteData,1)+IntToHex(RWriteData,1)+',     );
            writeln(fw,Str);
    end;
  finally
    writeln(fw,'};');
    writeln(fw,'');
    writeln(fw,'');
    CloseFile(Fw);
  end;
end;

ってな感じです。



ともかく
Delphi、使いで良かった。


みなさん良いお年を、お迎えください。



追加情報:
今回、ツリーを一緒に作ったお二人は
実はyes,mama ok? と言うバンドをやっておりまして、12月26日渋谷スターラウンジにて、
ライブあるようです。やましょうも、お客さんとして行っていると思います。
クリスマスな曲は、ここ!

メリークリスマス!!




2014年12月20日土曜日

XE7 のJAVA2OP

お久しぶりです。

季節は既に、真冬ですね。


本日は12/20ですね。

実はアンドロイド開発者に朗報です。
XE7からjavaへのラッパー生成.exeがつきました。

ここに説明がありますので読んでください。

この説明,javaとか詳しい人には分かるように書いてあるのですが、
delphiしか知らないな~って人にはちょっときつい。

という事でさらに簡単、覚書(簡略)してます。

まず、
①javaをインストール
②jdk 1.7以上 インストール
この時点でめんどくせなぁとか、天野アキ風に思ってしまうのが
怠けものの私です。
③そしてpathの追加、私は面倒なのでというより、過去のパスの精算の為
C:\Program Files\Java\jdk1.7.0_71\bin;
を追加
④PC再起動。
⑤java2opダウンロード、任意フォルダーに解凍

さて、環境は整った。

ここからが若い子に”黒い画面だぁ”と言われた内容ですよ。

まず、黒い画面を起動です。(ファイル名うんたらの所で、cmdって打ってね。)

今回は、私の大好きなUSBのラッパーを作りますよ。

java2opをインストールした。任意のディレクトリーに移動 そして、


java2op -classes android.hardware.usb.*

って入れます。

すると、
Androidapi.JNI.Interfaces.pas

が生成されます。

中身をみると、、あれ。。。const 系がないの。。。。

あーーーって事で人間、楽したい。。
そこでgithubですよ。

そう面倒ならここ

をみればたいていあるけどファイル分けすぎ。

つまり、結局はGitHubと、jave2opをうまく使っていきましょう
という感じですね。

あとは面倒でもリファレンスを参照しましょう。


それでは、また次回。