全然更新しないブログ
HSPメモ帳
暗号 (Advapi32.dll)
暗号のメモ
単純なスクリプトなので詳細は省略。
単純なスクリプトなので詳細は省略。
/* -------------------------------------------------------------------------- Crypt : Module -------------------------------------------------------------------------- */ #module Crypt #define global PROV_RSA_FULL 1 #define global MS_ENHANCED_PROV "Microsoft Enhanced Cryptographic Provider v1.0" #define global CALG_MD5 0x00008003 #define global CALG_RC4 0x00006801 #uselib "Advapi32.dll" #cfunc CryptAcquireContext "CryptAcquireContextA" var,int,str,int,int #func CryptReleaseContext "CryptReleaseContext" int,int #cfunc CryptCreateHash "CryptCreateHash" int,int,int,int,var #cfunc CryptHashData "CryptHashData" int,var,int,int #func CryptDestroyHash "CryptDestroyHash" int #cfunc CryptDeriveKey "CryptDeriveKey" int,int,int,int,var #func CryptDestroyKey "CryptDestroyKey" int #cfunc CryptEncrypt "CryptEncrypt" int,int,int,int,var,var,int #cfunc CryptDecrypt "CryptDecrypt" int,int,int,int,var,var #uselib "Crypt32.dll" // Requires Windows Vista or Windows XP. #cfunc CryptBinaryToStringZ "CryptBinaryToStringA" var,int,int,int,var #cfunc CryptBinaryToString "CryptBinaryToStringA" var,int,int,var,var #deffunc CryptDestroy CryptDestroyKey hKey : hKey = 0 CryptDestroyHash hHash : hHash = 0 CryptReleaseContext hProv,0 : hProv = 0 return #defcfunc GetKey_ var pw,int pType,int hALG,int pALG,int keyGen if( (hProv != 0) || (hHash != 0) || (hKey != 0) ) : CryptDestroy if( CryptAcquireContext(hProv,0,MS_ENHANCED_PROV,pType,0) ){ if( CryptCreateHash(hProv,hALG,0,0,hHash) ){ if( CryptHashData(hHash,pw,strlen(pw),0) ){ if( CryptDeriveKey(hProv,pALG,hHash,keyGen,hKey) ){ return hKey } } } } return 0 #defcfunc Encrypt_ int pType,int hALG,int pALG,var buf,var pw,int len,int keyGen ret = 0 : dwByte = len hKey = GetKey_(pw,pType,hALG,pALG,keyGen) if( hKey ){ ret = CryptEncrypt(hKey,0,1,0,buf,dwByte,dwByte) if( ret ) : ret = dwByte } CryptDestroy return ret #defcfunc Decrypt_ int pType,int hALG,int pALG,var buf,var pw,int len,int keyGen ret = 0 : dwByte = len hKey = GetKey_(pw,pType,hALG,pALG,keyGen) if( hKey ){ ret = CryptDecrypt(hKey,0,1,0,buf,dwByte) if( ret ) : ret = dwByte } CryptDestroy return ret #defcfunc GetKeys var pw return GetKey_(pw,PROV_RSA_FULL,CALG_MD5,CALG_RC4,0x800000) #defcfunc Encrypt var buf,var pw,int len return Encrypt_(PROV_RSA_FULL,CALG_MD5,CALG_RC4,buf,pw,len) #defcfunc Decrypt var buf,var pw,int len return Decrypt_(PROV_RSA_FULL,CALG_MD5,CALG_RC4,buf,pw,len) #defcfunc EncryptKey var buf,int key,int len dwByte = len if( CryptEncrypt(key,0,1,0,buf,dwByte,dwByte) ) : return dwByte return 0 #defcfunc DecryptKey var buf,int key,int len dwByte = len if( CryptDecrypt(key,0,1,0,buf,dwByte) ) : return dwByte return 0 #defcfunc GetBinToStr var pStr,var pBin,int len dwByte = 0 if( CryptBinaryToStringZ(pBin,len,11,0,dwByte) ){ sdim pStr,dwByte+1 if( CryptBinaryToString(pBin,len,11,pStr,dwByte) ){ return 1 } } return 0 #global /* -------------------------------------------------------------------------- end of Crypt -------------------------------------------------------------------------- */ #define SCR0_X 500 #define SCR0_Y 500 *main sdim mb,10000 : sdim ip,260 : sdim btn,16,2 bCrypt = 0 : bBin = 0 screen 0,SCR0_X,SCR0_Y objmode 2 : font "MS ゴシック", 12 objsize SCR0_X / 2,20 btn(0)="暗号化","復号化" pos 0, 0 : button gosub btn(0), *crypt pos SCR0_X/2,0 : button gosub "表示変更", *bin pos 10,24 : mes "PASSWORD" pos 80,20 : input ip,SCR0_X - 80,20 pos 0,40 : mesbox mb,SCR0_X,SCR0_Y-40 stop *mbchg if(bBin){ if(bCrypt == 0) : len = strlen(mb) if( GetBinToStr(s,mb,len) ) : objprm 3,s } else{ objprm 3,mb } return *crypt if(bCrypt){ ret = Decrypt(mb,ip,len) if(ret) : objprm 3,mb } else{ len = strlen(mb) ret = Encrypt(mb,ip,len) } if( ret ){ bCrypt ^= 1 : objprm 0,btn(bCrypt) gosub *mbchg } return ret *bin bBin ^= 1 gosub *mbchg return
コメント ( 9 ) | Trackback ( 0 )
MSDN VS 2008
【 2007/12/13 】MSDN Library for Visual Studio 2008 (2464.6 MB)
http://www.microsoft.com/downloads/details.aspx?
FamilyID=6FF3BC60-32C8-4C22-8591-A20BF8DFF1A2&displaylang=ja
上記から、ISOファイルをダウンロード。
winxpvirtualcdcontrolpanel_21でISOファイルを読込。
「setup.exe」を実行してインストール。
VS2003の場合
Visual Studio .NET 連結ヘルプ コレクション マネージャ
ms-help://MS.VSCC.2003/vscccommon/cm/CollectionManager.htm
から、「MSDN ライブラリ - Visual Studio 2008」を選択して、
VSCCの更新ボタンを押して、VS再起動。
VS2008EEの場合
既に、更新済みのようです。
ちなみに、Visual Studio 2008 連結ヘルプ コレクション マネージャは
ms-help://MS.VSCC.v90/dv_vscccommon/local/collectionmanager.htm
MSDN VS2008は、「VS2003」「VS2005」「VS2008」で使えるので
2008を入れた後は以前のヘルプは削除してもいいらしい(?)。
これで、VS2008で以前のヘルプがみれます。
http://www.microsoft.com/downloads/details.aspx?
FamilyID=6FF3BC60-32C8-4C22-8591-A20BF8DFF1A2&displaylang=ja
上記から、ISOファイルをダウンロード。
winxpvirtualcdcontrolpanel_21でISOファイルを読込。
「setup.exe」を実行してインストール。
VS2003の場合
Visual Studio .NET 連結ヘルプ コレクション マネージャ
ms-help://MS.VSCC.2003/vscccommon/cm/CollectionManager.htm
から、「MSDN ライブラリ - Visual Studio 2008」を選択して、
VSCCの更新ボタンを押して、VS再起動。
VS2008EEの場合
既に、更新済みのようです。
ちなみに、Visual Studio 2008 連結ヘルプ コレクション マネージャは
ms-help://MS.VSCC.v90/dv_vscccommon/local/collectionmanager.htm
MSDN VS2008は、「VS2003」「VS2005」「VS2008」で使えるので
2008を入れた後は以前のヘルプは削除してもいいらしい(?)。
これで、VS2008で以前のヘルプがみれます。
コメント ( 0 ) | Trackback ( 0 )
Visual Studio 2008 Express Edition
Visual Studio 2008 Express Edition 日本語版 【2007/12/18】
http://www.microsoft.com/japan/msdn/vstudio/express/
上記サイトより引用
ダウンロードファイルは、上から「vbsetup.exe」「vcssetup.exe」「vcsetup.exe」「vnssetup.exe」。
インストール 1
ダウンロードしたファイルを実行する。ライセンス条項の同意、インストールする製品の選択、インストールフォルダの選択をするとダウンロードが始まる。
(vcsetup.exeの場合、全ての製品の選択で計543M)
Visual Studio 2008 Express Edition の DVD イメージからのインストール
http://www.microsoft.com/japan/msdn/vstudio/express/maninstall/2008/
ダウンロードファイルは、「VS2008ExpressJPNX1428694.iso」(1.09G)。
インストール 2
ダウンロードしたISOファイルをDVDに書き込み、「setup.hta」を実行してインストーラーを起動する。インストールしたいエディションを選択して、インストールを実行する。
インストール 3
仮想CDソフトウェアを使用して、ISOファイルを読み込む。
DAEMON Tools
http://www.daemon-tools.cc/dtcc/download.php
Download the Microsoft Virtual CD-ROM Control Panel package now.
http://download.microsoft.com/download/7/b/6/
7b6abd84-7841-4978-96f5-bd58df02efa2/winxpvirtualcdcontrolpanel_21.exe
「setup.hta」を実行してインストーラーを起動する。インストールしたいエディション(上記表の4種類)を選択して、インストールを実行する。
VB、C#は楽しく開発できるらしく、C++はそうではないようです。
と、それはさておきVS2008 C++のインストール開始。
最初、上記インストール1を実行したが、途中フリーズ(?)してしまいインストール3に変更。
winxpvirtualcdcontrolpanel_21.exeを使用してインストール完了。
楽しくプログラミングできるのもいいですが、本当に楽しくプログラミングができている人に。
広く浅くや、狭く深く等、色々方向性はあるかとおもいますが、
楽しいなら深く純粋に進んでいくといいかと思います。
良くも悪くもですが。例え問題があっても、方向修正は簡単なはずです。
できていない人は、できている人の真似をするのも一つの例だと思います。
真似から自己流を見出すのも悪くはありません。
さて、起動してみます。
あれ?スタートメニューを見ると「Visual C++ 9.0 Express Edition」の項目を発見。
気にせず、その中のVSEEのショートカットで起動。
最初の使用のために環境を構成中とのダイアログ。その後、まもなく2008起動。
とりあえず、ツールからオプションで自分用の設定に切り替え。各Viewの配置。
Win32 コンソール アプリケーションの作成と適当にコード書いて実行してみる。
当然追加のオプションで空のプロジェクトをチェック。
他、いじらないで、以下を実行。
実行結果
ハローワールド
Debug : 39.424Byte
Release: 9.216Byte
別に、実行結果はどうでも良くて。ぼろPCの割りにはそれなりに動いてくれたのを確認。
VS2005と比べてもさほど変わらない印象。今後も、検証は続く...。
MSDNサブスクリプションから「Visual Studio 2008 Professional Edition」がダウンロードできます。
現在ダウンロードはできるが、インストールできない状況がある様です。
参考URL:VS2008をダウンロードしたがインストールできない
ダウンロードにかなりの時間が必要なので、様子待ちしたほうがいいのかもしれません。
http://www.microsoft.com/japan/msdn/vstudio/express/
上記サイトより引用
Visual Basic 2008 Express Edition | Windows アプリケーションの楽しく簡単な作成方法に興味を持つ、趣味で開発を行うユーザー、プログラミング初心者、および学生に最適な開発ツールです。 |
Visual C# 2008 Express Edition | ダイナミックなアプリケーションを開発するための、シンプルで楽しく、学びやすい開発ツールです。 |
Visual C++ 2008 Express Edition | よりパワフルで柔軟な開発環境を提供し、Windows ネイティブなアプリケーションやおよび 3D の2Dゲーム開発を支援します。 |
Visual Web Developer 2008 Express Edition | Visual Basic や Visual C# を使って、ASP.NET の Web アプリケーションの開発や AJAX アプリケーションの開発を、簡単に楽しく行えます。 |
ダウンロードファイルは、上から「vbsetup.exe」「vcssetup.exe」「vcsetup.exe」「vnssetup.exe」。
インストール 1
ダウンロードしたファイルを実行する。ライセンス条項の同意、インストールする製品の選択、インストールフォルダの選択をするとダウンロードが始まる。
(vcsetup.exeの場合、全ての製品の選択で計543M)
Visual Studio 2008 Express Edition の DVD イメージからのインストール
http://www.microsoft.com/japan/msdn/vstudio/express/maninstall/2008/
ダウンロードファイルは、「VS2008ExpressJPNX1428694.iso」(1.09G)。
インストール 2
ダウンロードしたISOファイルをDVDに書き込み、「setup.hta」を実行してインストーラーを起動する。インストールしたいエディションを選択して、インストールを実行する。
インストール 3
仮想CDソフトウェアを使用して、ISOファイルを読み込む。
DAEMON Tools
http://www.daemon-tools.cc/dtcc/download.php
Download the Microsoft Virtual CD-ROM Control Panel package now.
http://download.microsoft.com/download/7/b/6/
7b6abd84-7841-4978-96f5-bd58df02efa2/winxpvirtualcdcontrolpanel_21.exe
「setup.hta」を実行してインストーラーを起動する。インストールしたいエディション(上記表の4種類)を選択して、インストールを実行する。
VB、C#は楽しく開発できるらしく、C++はそうではないようです。
と、それはさておきVS2008 C++のインストール開始。
最初、上記インストール1を実行したが、途中フリーズ(?)してしまいインストール3に変更。
winxpvirtualcdcontrolpanel_21.exeを使用してインストール完了。
楽しくプログラミングできるのもいいですが、本当に楽しくプログラミングができている人に。
広く浅くや、狭く深く等、色々方向性はあるかとおもいますが、
楽しいなら深く純粋に進んでいくといいかと思います。
良くも悪くもですが。例え問題があっても、方向修正は簡単なはずです。
できていない人は、できている人の真似をするのも一つの例だと思います。
真似から自己流を見出すのも悪くはありません。
さて、起動してみます。
あれ?スタートメニューを見ると「Visual C++ 9.0 Express Edition」の項目を発見。
気にせず、その中のVSEEのショートカットで起動。
最初の使用のために環境を構成中とのダイアログ。その後、まもなく2008起動。
とりあえず、ツールからオプションで自分用の設定に切り替え。各Viewの配置。
Win32 コンソール アプリケーションの作成と適当にコード書いて実行してみる。
当然追加のオプションで空のプロジェクトをチェック。
他、いじらないで、以下を実行。
#include <iostream> void main() { std::cout << "ハローワールド" << std::endl;
}
実行結果
ハローワールド
Debug : 39.424Byte
Release: 9.216Byte
別に、実行結果はどうでも良くて。ぼろPCの割りにはそれなりに動いてくれたのを確認。
VS2005と比べてもさほど変わらない印象。今後も、検証は続く...。
MSDNサブスクリプションから「Visual Studio 2008 Professional Edition」がダウンロードできます。
現在ダウンロードはできるが、インストールできない状況がある様です。
参考URL:VS2008をダウンロードしたがインストールできない
ダウンロードにかなりの時間が必要なので、様子待ちしたほうがいいのかもしれません。
コメント ( 0 ) | Trackback ( 0 )
Direct Music 4/4
「Direct Music」のメモ。
長いので分割しています。
DirectMusic のサンプル 2/2
サンプル イメージ図
長いので分割しています。
DirectMusic のサンプル 2/2
// ここにDMusicモジュールを追加 /* -------------------------------------------------------------------------------------- sample ------------------------------------------------------------------------------------- */ #module sample #deffunc Mes2 str txt,int posx,int posy,¥ int cR,int cG,int cB,¥ int cbR,int cbG,int cbB,¥ str fontname,int size,int s if(fontname!="") : font fontname,size if( s != 0 ){ color cbR,cbG,cbB : pos posX+s,posY+s : mes txt } color cR ,cG ,cB : pos posX,posY : mes txt return #deffunc boxf2 int posx,int posy,int w,int h,¥ int cR,int cG,int cB,¥ int cbR,int cbG,int cbB,int s if( s != 0 ){ color cbR,cbG,cbB boxf posX+s,posY+s,posX+w+s,posY+h+s } color cR ,cG ,cB boxf posX,posY,posX+w,posY+h return #global #define ID_EVENT 0x9000 #define TITLE_NAME "Sample" #define FONT_NAME "MS ゴシック" #uselib "user32.dll" #func SetTimer "SetTimer" int,int,int,int #func KillTimer "KillTimer" int,int // 初期化 *main screen 0, 480, 520 : hwnd0 = hwnd title TITLE_NAME : objmode 2 dim sndInfo,3,8 sdim txt,260 sdim fileinfo,64,3 sdim soundname,260,3 ddim posSnd,7 : posSnd(0)= 5f,-0.5f,0f,0f,0.1f,0f,0f ddim posLsn,7 : posLsn(0)= 5f,-3.5f,0f,0f,0.1f,0f,0f MAX_X = 10f MIN_Z = -10f fileinfo(0)="プライマリファイル名: " fileinfo(1)="セカンダリファイル名: " fileinfo(2)="3Dサウンドファイル名: " boxf2 20,180,440,72,128,128,176,128,128,128,4 txt = "モジュール変数初期化中…" mes2 txt,40,200,128,128,255,64,64,64,FONT_NAME,32,2 repeat 3 : newmod dm,DMusic : loop : wait 100 boxf2 0,0,480,520,0,0,0,0,0,0,0 txt = "3Dサウンド" boxf2 378,58,92,354,255,255,255,128,128,128,2 mes2 txt,6,6,255,255,255,128,128,128,FONT_NAME,32,2 txt = "左クリック:リスナーの移動 右クリック:音源の移動" mes2 txt,10,44,255,255,255,128,128,128,FONT_NAME,12,0 txt = "プライマリ(∞)" mes2 txt,380,60,0,0,0,128,128,128,FONT_NAME,12,0 txt = "セカンダリ(1)" mes2 txt,380,160,0,0,0,128,128,128,FONT_NAME,12,0 txt = "3D(∞)" mes2 txt,380,260,0,0,0,128,128,128,FONT_NAME,12,0 font FONT_NAME,12 repeat 3 objsize 90,25 pos 380,cnt * 100 + 75 : button gosub "OPEN",*SndOpen objsize 44,25 pos 380,cnt * 100 + 103 : button gosub "PLAY",*SndPlay pos 426,cnt * 100 + 103 : button gosub "STOP",*SndStop pos 380,cnt * 100 + 131 : button gosub "VOL -",*SndVolDown pos 426,cnt * 100 + 131 : button gosub "VOL +",*SndVolUp loop pos 380,359 : button gosub "SIZE -",*SizeDown pos 426,359 : button gosub "SIZE +",*SizeUp font FONT_NAME,10 pos 380,387 : button gosub "LSNMOVE",*LSNMove pos 426,387 : button gosub "SNDMOVE",*SNDMove oncmd gosub *WMCLOSE,0x0010 oncmd gosub *WMTIMER,0x0113 oncmd gosub *WMLBUTTONDOWN,0x0201 oncmd gosub *WMRBUTTONDOWN,0x0204 SetTimer hwnd,ID_EVENT,500,0 stop // 描画 *WMTIMER redraw 0 font FONT_NAME,12 boxf2 10,60,360,360,128,128,176,128,128,128,3 if(posLsn(5) != 0f){ x = 340f * posLsn(2) / MAX_X + 14f z = 340f * posLsn(3) / MIN_Z + 66f mes2 "○",x,z,255,64,64,128,0,0,"",12,1 x = posLsn(2)-posLsn(0) z = posLsn(3)-posLsn(1) posLsn(6) = sqrt(x*x+z*z) if( posLsn(6) < posLsn(4)) : posLsn(5) = 0f if(posLsn(5)!=0f){ r = atan(z,x) x = posLsn(4)*cos(r) : z = posLsn(4)*sin(r) DM_SetVelListener dm(2),x,0f,z,DS3D_DEFERRED posLsn(0) += x posLsn(1) += z } else{ DM_SetVelListener dm(2),0f,0f,0f,DS3D_DEFERRED posLsn(0) = posLsn(2) posLsn(1) = posLsn(3) } DM_SetPosListener dm(2),posLsn(0),0f,posLsn(1),0 } x = 340f * posLsn(0) / MAX_X + 14f z = 340f * posLsn(1) / MIN_Z + 66f mes2 "♀",x,z,255,64,64,128,0,0,"",12,1 if(posSnd(5) != 0f){ x = 340f * posSnd(2) / MAX_X + 14f z = 340f * posSnd(3) / MIN_Z + 66f mes2 "○",x,z,255,255,0,128,128,0,"",12,1 x = posSnd(2)-posSnd(0) z = posSnd(3)-posSnd(1) posSnd(6) = sqrt(x*x+z*z) if( posSnd(6) < posSnd(4)) : posSnd(5) = 0f if(posSnd(5)!=0f){ r = atan(z,x) x = posSnd(4)*cos(r) : z = posSnd(4)*sin(r) DM_SetVelSoundBuf dm(2),x,0f,z,DS3D_DEFERRED posSnd(0) += x posSnd(1) += z } else{ DM_SetVelSoundBuf dm(2),0f,0f,0f,DS3D_DEFERRED posSnd(0) = posSnd(2) posSnd(1) = posSnd(3) } DM_SetPosSoundBuf dm(2),posSnd(0),0f,posSnd(1),0 } x = 340f * posSnd(0) / MAX_X + 14f z = 340f * posSnd(1) / MIN_Z + 66f mes2 "♪",x,z,255,255,0,128,128,0,"",12,1 boxf2 8,428,464,89,32,32,32,0,0,0,0 boxf2 10,430,460,85,0,0,0,0,0,0,0 font FONT_NAME,10 foreach dm txt = fileinfo(cnt) if(soundname(cnt)==""){ txt += "?" } else{ txt += getpath(soundname(cnt),8)+"¥n " ret = sndInfo(cnt,0) + 9600 txt += "Vol:"+ret DM_GetSeek dm(cnt) : sndInfo(cnt,2) = stat txt += " Seek: "+sndInfo(cnt,2)+" / " + sndInfo(cnt,1) } mes2 txt,12,cnt*24+432,128,255,0,64,128,0,"",10,1 loop txt = "Size:"+strf("%.0f",MAX_X)+"x"+strf("%.0f",MAX_X) mes2 txt,12,504,128,255,0,64,128,0,"",10,1 txt = "Sound " txt+= "MOVE:" + strf("%.2f",posSnd(4)) txt+= " Pos:"+ strf("%.2f",posSnd(0))+","+strf("%.2f",-posSnd(1)) if(posSnd(5)!=0f) : txt += "("+strf("%.2f",posSnd(6))+")" mes2 txt,200,492,255,255,0,128,128,0,"",10,1 txt = "Listener " txt+= "MOVE:" + strf("%.2f",posLsn(4)) txt+= " Pos:" + strf("%.2f",posLsn(0))+","+strf("%.2f",-posLsn(1)) if(posLsn(5)!=0f) : txt += "("+strf("%.2f",posLsn(6))+")" mes2 txt,200,504,255,64,64,128,0,0,"",10,1 redraw 1 return // サウンドファイルを開く *SndOpen id = stat / 5 dialog "wav;*.mid",16,"サウンドファイル" if(stat != 1) : return txt = refstr mref stat_,64 : stat_ = id*5+2 gosub *SndStop DM_LoadFromFile dm(id),txt if(stat){ sndInfo(id,0) = 0 sndInfo(id,2) = 0 DM_GetLen dm(id) : sndInfo(id,1) = stat soundname(id) = txt posLsn(5) = 0f posSnd(5) = 0f else{ soundname(id) = "" return } if(id == 2){ DM_SetSoundDistance dm(2),1f,100f DM_SetListener dm(2),posLsn(0),0f,posLsn(1),0f,0f,0f,0f,0f,1f,0f,1f,0f,1f,1f DM_SetSoundBuf dm(2),posSnd(0),0f,posSnd(1),0f,0f,0f,360,360,0,0f,0f,-1f } return // サウンド再生 *SndPlay id = (stat - 1) / 5 DM_IsPlay dm(id) if(stat){ mref stat_,64 : stat_ = id*5+2 gosub *SndStop ret = 0 } else{ ret = sndInfo(id,2) } if( id == 0 ){ DM_Play dm(0),0,ret,sndInfo(id,0),DMUS_SEG_REPEAT_INFINITE return } if( id == 1 ){ DM_Play dm(1),DMUS_SEGF_SECONDARY,ret,sndInfo(id,0),0 return } if( id == 2 ){ DM_Play dm(2),DMUS_SEGF_SECONDARY,ret,sndInfo(id,0),DMUS_SEG_REPEAT_INFINITE return } return // サウンド停止 *SndStop id = (stat - 2) / 5 DM_StopSeg dm(id) DM_GetSeek dm(id) sndInfo(id,2) = stat return // 音量Down *SndVolDown id = (stat - 3) / 5 ret = sndInfo(id,0) - 100 if(ret < -9600) : ret = -9600 DM_SetAudioPathVol dm(id),ret if(stat) : sndInfo(id,0) = ret return // 音量Up *SndVolUp id = (stat - 4) / 5 ret = sndInfo(id,0) + 100 if(ret > 0) : ret = 0 DM_SetAudioPathVol dm(id),ret if(stat) : sndInfo(id,0) = ret return // 移動範囲Down *SizeDown if(MAX_X < 11) : MAX_X -= 1f : else : MAX_X -= 10f if(MAX_X < 1f) : MAX_X = 1f MIN_Z = - MAX_X if(posLsn(0)>MAX_X || posLsn(1)<MIN_Z){ posLsn(0) = MAX_X/2f posLsn(1) = MIN_Z DM_SetPosListener dm(2),posLsn(0),0f,posLsn(1),0 } if(posSnd(0)>MAX_X || posSnd(1)<MIN_Z){ posSnd(0) = MAX_X/2f posSnd(1) = 0f DM_SetPosSoundBuf dm(2),posSnd(0),0f,posSnd(1),0 } if(posLsn(2)>MAX_X || posLsn(3)<MIN_Z){ posLsn(2) = MAX_X posLsn(3) = MIN_Z } if(posSnd(2)>MAX_X || posSnd(3)<MIN_Z){ posSnd(2) = MAX_X posSnd(3) = 0f } return // 移動範囲Up *SizeUp if(MAX_X < 10f) : MAX_X += 1f : else : MAX_X += 10f MIN_Z = - MAX_X return // リスナー移動距離変更 *LSNMove if(posLsn(4)==MAX_X/4f): posLsn(4)=MAX_X/2f: return if(posLsn(4)==MAX_X/8f): posLsn(4)=MAX_X/4f: return if(posLsn(4)==MAX_X/16f): posLsn(4)=MAX_X/8f: return if(posLsn(4)==0.1f): posLsn(4)=MAX_X/16f: return posLsn(4) = 0.1f return // 音源移動距離変更 *SNDMove if(posSnd(4)==MAX_X/4f): posSnd(4)=MAX_X/2f: return if(posSnd(4)==MAX_X/8f): posSnd(4)=MAX_X/4f: return if(posSnd(4)==MAX_X/16f): posSnd(4)=MAX_X/8f: return if(posSnd(4)==0.1f): posSnd(4)=MAX_X/16f: return posSnd(4) = 0.1f return // クリック *WMLBUTTONDOWN *WMRBUTTONDOWN x = mousex : z = mousey if(x > 19 && x < 361 && z > 69 && z < 411){ x = double(x - 20) * MAX_X / 340f z = double(z - 70) * MIN_Z / 340f // 左クリック if(iparam == 0x0201){ posLsn(2) = x posLsn(3) = z posLsn(5) = 1f return } // 右クリック if(iparam == 0x0204){ posSnd(2) = x posSnd(3) = z posSnd(5) = 1f return } } return // 終了処理 *WMCLOSE KillTimer hwnd0,ID_EVENT foreach dm delmod dm.cnt loop return
コメント ( 0 ) | Trackback ( 0 )
Direct Music 3/4
「Direct Music」のメモ。
長いので分割しています。
DirectMusic モジュール 2/2
DMusicモジュールはここまで
DirectMusic のサンプル 1/2
サンプルでのプライマリは、すぐに切り替えています。
また、セカンダリは、一回再生です。3Dサウンドは、セカンダリで無限リピートで再生しています。
左上に表示している「♪」は3Dサウンドの音源、「♀」はリスナーです。
「♪」は常に、真南に再生しています。「♀」は常に、北向き、直立して聞いている状態です。
左上の青色部分をクリックすることで、移動可能です。ボタンのSIZEで移動範囲、LSNMOVEでリスナーの移動距離、SNDMOVEで音源の移動距離を変更可能(m単位)。
Direct Music 4/4に続く。
長いので分割しています。
DirectMusic モジュール 2/2
#modfunc DM_SetListener double posX,double posY,double posZ,¥ double velX,double velY,double velZ,¥ double froX,double froY,double froZ,¥ double topX,double topY,double topZ,¥ double doppler,double rollOff dim ret : dim id,4 : dim id2,4 dbl = doppler : id(0) = varptr(dbl) : id(1) = varptr(id2(0)) ret = callfunc(id,varptr(dtof),2) DM_SetDopplerFactor pSListener,id2(0),DS3D_DEFERRED dbl = rollOff : id(0) = varptr(dbl) : id(1) = varptr(id2(0)) ret = callfunc(id,varptr(dtof),2) DM_SetRolloffFactor pSListener,id2(0),DS3D_DEFERRED DM_SetPosListener thismod,posX,posY,posZ,DS3D_DEFERRED DM_SetVelListener thismod,velX,velY,velZ,DS3D_DEFERRED dbl = froX : id(0) = varptr(dbl) : id(1) = varptr(id(2)) ret = callfunc(id,varptr(dtof),2) dbl = froY : id(0) = varptr(dbl) : id(1) = varptr(id(3)) ret = callfunc(id,varptr(dtof),2) dbl = froZ : id(0) = varptr(dbl) : id(1) = varptr(id2(0)) ret = callfunc(id,varptr(dtof),2) dbl = topX : id(0) = varptr(dbl) : id(1) = varptr(id2(1)) ret = callfunc(id,varptr(dtof),2) dbl = topY : id(0) = varptr(dbl) : id(1) = varptr(id2(2)) ret = callfunc(id,varptr(dtof),2) dbl = topZ : id(0) = varptr(dbl) : id(1) = varptr(id2(3)) ret = callfunc(id,varptr(dtof),2) DM_SetOrientation pSListener,id(2),id(3),id2(0),id2(1),id2(2),id2(3),DS3D_DEFERRED DM_CommitDeferredSettings pSListener if( stat == 0 ) : ret = 1 : else : ret = 0 return ret #modfunc DM_GetPosSoundBuf array d3vec dim ret : dim id,4 : dim id2,4 ddim d3vec,3 DM_GetPosition pSBuffer,id id2(0) = varptr(id(0)) : id2(1) = varptr(d3vec(0)) ret = callfunc(id2,varptr(ftod),2) id2(0) = varptr(id(1)) : id2(1) = varptr(d3vec(1)) ret = callfunc(id2,varptr(ftod),2) id2(0) = varptr(id(2)) : id2(1) = varptr(d3vec(2)) ret = callfunc(id2,varptr(ftod),2) return #modfunc DM_GetVelSoundBuf array d3vec dim ret : dim id,4 : dim id2,4 ddim d3vec,3 DM_GetVelocity pSBuffer,id id2(0) = varptr(id(0)) : id2(1) = varptr(d3vec(0)) ret = callfunc(id2,varptr(ftod),2) id2(0) = varptr(id(1)) : id2(1) = varptr(d3vec(1)) ret = callfunc(id2,varptr(ftod),2) id2(0) = varptr(id(2)) : id2(1) = varptr(d3vec(2)) ret = callfunc(id2,varptr(ftod),2) return #modfunc DM_SetPosSoundBuf double posX,double posY,double posZ,int b dim ret : dim id,4 : dim id2,4 dbl = posX : id(0) = varptr(dbl) : id(1) = varptr(id2(0)) ret = callfunc(id,varptr(dtof),2) dbl = posY : id(0) = varptr(dbl) : id(1) = varptr(id2(1)) ret = callfunc(id,varptr(dtof),2) dbl = posZ : id(0) = varptr(dbl) : id(1) = varptr(id2(2)) ret = callfunc(id,varptr(dtof),2) DM_SetPosition pSBuffer,id2(0),id2(1),id2(2),b return #modfunc DM_SetVelSoundBuf double velX,double velY,double velZ,int b dim ret : dim id,4 : dim id2,4 dbl = velX : id(0) = varptr(dbl) : id(1) = varptr(id2(0)) ret = callfunc(id,varptr(dtof),2) dbl = velY : id(0) = varptr(dbl) : id(1) = varptr(id2(1)) ret = callfunc(id,varptr(dtof),2) dbl = velZ : id(0) = varptr(dbl) : id(1) = varptr(id2(2)) ret = callfunc(id,varptr(dtof),2) DM_SetVelocity pSBuffer,id2(0),id2(1),id2(2),DS3D_DEFERRED return #modfunc DM_SetSoundBuf double posX,double posY,double posZ,¥ double velX,double velY,double velZ,¥ int coneIn, int coneOut,int coneVolOut,¥ double coneInX,double coneInY,double coneInZ dim ret : dim id,4 : dim id2,4 DM_SetPosSoundBuf thismod,posX,posY,posZ,DS3D_DEFERRED DM_SetVelSoundBuf thismod,velX,velY,velZ,DS3D_DEFERRED DM_SetConeAngles pSBuffer,conIn,coneOut,DS3D_DEFERRED DM_SetConeOutsideVolume pSBuffer,coneVolOut,DS3D_DEFERRED dbl = coneInX : id(0) = varptr(dbl) : id(1) = varptr(id2(0)) ret = callfunc(id,varptr(dtof),2) dbl = coneInY : id(0) = varptr(dbl) : id(1) = varptr(id2(1)) ret = callfunc(id,varptr(dtof),2) dbl = coneInZ : id(0) = varptr(dbl) : id(1) = varptr(id2(2)) ret = callfunc(id,varptr(dtof),2) DM_SetConeOrientation pSBuffer,id2(0),id2(1),id2(2),DS3D_DEFERRED DM_CommitDeferredSettings pSListener if( stat == 0 ) : ret = 1 : else : ret = 0 return ret #modfunc DM_SetDir str dir dim ret : dim id,4 UuidFromString GUID_DirectMusicAllTypes_, id DM_SetSearchDirectory pLoader, id, dir, 0 if( stat == 0 ) : ret = 1 : else : ret = 0 return ret #modfunc DM_SetStartPos int startPos dim ret DM_SetStartPoint pSeg,startPos if( stat == 0 ) : ret = 1 : else : ret = 0 return ret #modfunc DM_GetStartPos dim ret DM_GetStartPoint pSeg,ret return ret #modfunc DM_GetLen dim ret DM_GetLength pSeg,ret return ret #modfunc DM_GetSeek dim ret DM_GetSeek_ pSegSt,ret return ret #modfunc DM_IsPlay dim ret DM_IsPlaying pPfm,pSeg,0 if( stat == 0 ) : ret = 1 : else : ret = 0 return ret #modfunc DM_GetMasterVol dim id,4 : dim ret UuidFromString GUID_PerfMasterVolume_,id DM_GetGlobalParam pPfm,id,ret,4 if( stat != 0 ) : ret = 0 return ret #modfunc DM_SetMasterVol int vol dim id,4 : dim ret ret = vol UuidFromString GUID_PerfMasterVolume_,id DM_SetGlobalParam pPfm,id,ret,4 if( stat == 0 ) : ret = 1 : else : ret = 0 return ret #modfunc DM_SetAudioPathVol int vol DM_SetVolume pAPath,vol,0 if( stat == 0 ) : ret = 1 : else : ret = 0 return ret #modfunc DM_SetSegRepeat int repeats DM_SetRepeats pSeg,repeats return 1 #modfunc DM_GetTempo dim ret : dim id,4 : dim id2,4 dbl = 1.0 UuidFromString GUID_PerfMasterTempo_,id DM_GetGlobalParam pPfm,id,ret,4 if( stat != 0 ) : return dbl id2(0) = varptr(ret) : id2(1) = varptr(dbl) ret = callfunc(id2,varptr(ftod),2) return dbl // refdval #modfunc DM_SetTempo double tempo dim ret : dim id,4 : dim id2,4 dbl = tempo id2(0) = varptr(dbl) : id2(1) = varptr(id2(2)) ret = callfunc(id2,varptr(dtof),2) UuidFromString GUID_PerfMasterTempo_,id DM_SetGlobalParam pPfm,id,id2(2),4 if( stat == 0 ) : ret = 1 : else : ret = 0 return ret #modfunc DM_LoadFromFile str filename dim ret : dim id,4 : dim id2,4 : sdim strTmp,260 exist filename : if( strsize == -1 ) : return 0 UuidFromString CLSID_DirectMusicSegment_, id UuidFromString IID_IDirectMusicSegment8_, id2 DM_LoadObjectFromFile pLoader, id, id2, filename, ret if( ret == 0 ) : return 0 newcom pSeg, IDirectMusicSegment8, -1, ret strTmp = getpath(filename,2 + 16) if( strTmp == ".mid" ){ UuidFromString GUID_StandardMIDIFile_, id DM_SetParam pSeg,id,-1,0,0,0 } DM_Download pSeg,pPfm if( stat == 0 ) : ret = 1 : else : ret = 0 return ret #modfunc DM_LoadFromBuf var mem,int size,int bMidi dim ret : dim id,4 : dim id2,4 dim objdesc,212 UuidFromString CLSID_DirectMusicSegment_, id UuidFromString IID_IDirectMusicSegment8_, id2 objdesc(0) = 848 objdesc(1) = DMUS_OBJ_CLASS | DMUS_OBJ_MEMORY objdesc(210) = varptr(mem) : objdesc(209) = size memcpy objdesc,id,16,24,0 DM_GetObject pLoader,objdesc,id2,ret if( ret == 0 ) : return 0 newcom pSeg, IDirectMusicSegment8, -1, ret if( bMidi ){ UuidFromString GUID_StandardMIDIFile_, id DM_SetParam pSeg,id,-1,0,0,0 } DM_Download pSeg,pPfm if( stat == 0 ) : ret = 1 : else : ret = 0 return ret #modfunc DM_Play int typeSeg,int startPos,int vol,int repeats dim ret DM_SetStartPos thismod,startPos DM_SetAudioPathVol thismod,vol DM_SetSegRepeat thismod,repeats ret = typeSeg | DMUS_SEGF_BEAT if(typeSeg & DMUS_SEGF_SECONDARY) : ret |= DMUS_SEGF_CONTROL DM_PlaySegmentEx pPfm,pSeg,0,0,ret,0,0,ret,0,pAPath newcom pSegSt,IDirectMusicSegmentState8,-1,ret return stat #modfunc DM_LoadFromPackFile str filename dim ret : sdim strTmp,260 exist filename : if( strsize == -1 ) : return 0 sdim buf,strsize strTmp = getpath(filename,2 + 16) if( strTmp == ".mid" ) : ret = 1 : else : ret = 0 bload filename,buf DM_LoadFromBuf thismod,buf,strsize,ret if( stat == 0 ) : ret = 1 : else : ret = 0 return ret #modfunc DM_PlayFromFile str filename,¥ int typeSeg,int startPos, int vol,int repeats dim ret DM_LoadFromFile thismod,filename if( stat == 0 ) : return 0 DM_Play thismod,typeSeg,startPos,vol,repeats if( stat == 0 ) : ret = 1 : else : ret = 0 return ret #modfunc DM_PlayFromPackFile str filename,¥ int typeSeg,int startPos, int vol,int repeats dim ret DM_LoadFromPackFile thismod,filename if( stat == 0 ) : return 0 DM_Play thismod,typeSeg,startPos,vol,repeats if( stat == 0 ) : ret = 1 : else : ret = 0 return ret #modfunc DM_StopSeg dim ret DM_StopEx pPfm,pSeg,0,0,0 if( stat == 0 ) : ret = 1 : else : ret = 0 return ret #modfunc DM_StopAll dim ret DM_Stop_ pPfm,0,0,0,0 if( stat == 0 ) : ret = 1 : else : ret = 0 return ret #modterm DM_StopSeg thismod DM_Unload pSeg,pPfm delcom pSegSt : delcom pSeg : delcom pLoader delcom pAPath : delcom pPfm return #global /* -------------------------------------------------------------------------------------- End of DMusic ------------------------------------------------------------------------------------- */
DMusicモジュールはここまで
DirectMusic のサンプル 1/2
サンプルでのプライマリは、すぐに切り替えています。
また、セカンダリは、一回再生です。3Dサウンドは、セカンダリで無限リピートで再生しています。
左上に表示している「♪」は3Dサウンドの音源、「♀」はリスナーです。
「♪」は常に、真南に再生しています。「♀」は常に、北向き、直立して聞いている状態です。
左上の青色部分をクリックすることで、移動可能です。ボタンのSIZEで移動範囲、LSNMOVEでリスナーの移動距離、SNDMOVEで音源の移動距離を変更可能(m単位)。
Direct Music 4/4に続く。
コメント ( 0 ) | Trackback ( 0 )
« 前ページ |