2016/05/14(Sat)YAMAHA XGの音源コントローラを結局作り直した。

XGTGCTL2 開発やめた の続きになる。

あれから10年近く経っても、自分のDTM環境が、MU2000 EXから脱却できていないので、
ドラムやEQを自由にいじりやすくするために結局作っていた。
前のバージョンはHSPで作ってて、ソースコードがスパゲティ状態で、拡張なんてとても無理だったのでC#で書き直している。
gitの使い方の勉強もかねて、GitHub上で公開してみる。

リリース: https://github.com/ttsuki/XGMidiControllerForMU2000EX/releases

これを使って作った曲: Another Wing -Deep White- と、そのソースコード
スクリーンショット:


MIDIファイルからの読み込み機能はあんまり使わないので省いて、
音源とSysExでSEND/DUMPするほか、サクラMMLスクリプトではき出すようにしたりした。

もはやXGという規格がレトロ化してきている昨今。
MOXFを買おうかとか、でもソフトで何でもできる時代だしーと思うと躊躇してしまう今日この頃。

2016/04/03(Sun)RAMDISKドライバを作る

RAMDISKドライバを作る

ほんとは、これがやりたくてオレオレ認証局とか作ってたんだけど、
調べたところによると、Windowsで使えるドライバ用のコード証明書のCAは決まってて
そればかりか、Windows 10のカーネルモードのドライバのコード署名はEV証明書でないといけないみたいで、
結局、この記事でやってるようにドライバ署名の検証をスルーしないと動かせなかった。
趣味レベルでカーネルモードドライバをちゃんと作ってリリースする道はもはや絶望的だなー……。

この記事では、

Visual Studioでのドライバの開発に必要なものをインストールして、
サンプルドライバをビルド・インストールしてみてから、
RAMDISKの容量が1GBになるよう、ソースコードを改造してみます。

制限

この記事の範疇ではFAT16なので、2GB(一説では4GB?)よりも大きいドライブは作れないはず。
FAT32への対応はすぐできるんだと思うけど、あんまり調べてない。

上記の通りドライバにコード署名できないので、ドライブを使うには、
毎回ドライバ署名の検証をスルーできる状態でWindowsを起動する必要がある。

続きを読む

2010/09/25(Sat)Visual Studio ショートカット集

はてブ数 2010/09/25 10:18 計算機な日記::ソフト作り つーさ

僕がVisualStudio+C#のときによく使うショートカットキーをまとめておくなどします。

知らないのがあったら使ってほしいですし、
便利な使い道のあるショートカットがあったら教えてほしいです。

「全般的な」の設定なので、C#モードな人は違うかも*1しれませんが、
機能自体が便利だからと取り上げている部分は多々あるので、
同じ機能のショートカットを探してみるのもいいかもしれません。

続きを読む

2010/03/01(Mon)続・言語の壁

はてブ数 2010/03/01 23:06 計算機な日記::ソフト作り つーさ

3月です。

体調不良気味でえsサボってDirect3D周りの記事読んでたら、10時間経ってました。やばい。

C++使おうと思ったら、C++にはGCがないから、
自分でGCを作った方がいいのか、それともSmartなポインタを駆使すべきなのか。
まぁ、自分でGC作ろうと思ったら研究が足りないので、おかしなGC作ってメモリリークさせるよりは、
Smartなポインタクラスを作った方がきっと成功しそうな気はしますよね。

パフォーマンス

以下gdgd

続きを読む

2010/01/27(Wed)ゆびったー - twitter botを作ってみた

はてブ数 2010/01/28 0:36 計算機な日記::ソフト作り つーさ

前から1度ぼっとを作ってみたかった。
別に、そんな難しくなかった。

@jubeatter
自己紹介: @ttsuki (TU-SA) の jubeatニュースを報告するbotです。フレコ: 14400002896462

今回もC#で書いた。

似たようなこと誰かやってないかと思ったけど、誰もやってなかった。
まぁ、誰得?って感じではある。

1回の更新に関するつぶやきを1つにまとめたら、自分の本アカウントでも使えそうではある。
ごく身内向けに、あー、つーさ今ゲーセンにいるのね、みたいな。
試しにWebサービスにしてみるとか?

OAuth に関しての参考メモ
http://code.google.com/p/oauth/
http://watcher.moe-nifty.com/memo/2009/04/c-oauth-c097.html

2009/10/08(Thr)めも

はてブ数 2009/10/08 8:52 計算機な日記::ソフト作り つーさ
  • XNA の検索結果 約 3,420,000 件中 1 - 10 件目 (0.22 秒)
  • Managed DirectX の検索結果 約 297,000 件中 1 - 10 件目 (0.24 秒)
  • SlimDX の検索結果 約 14,800 件中 1 - 10 件目 (0.15 秒)
  • SlimDX に一致する日本語のページ 約 5,590 件中 1 - 10 件目 (0.23 秒)

うーん……

GSDKをSlimDX上に移植してます。
ちょこちょことブラッシュアップしつつ、だいたいはコピペっていう。
MDX1.1に比べて微妙に不親切だったりしてますが、書き換えること自体はあんまり難しくないみたいです。
ただ、これ何だろう? と思ったときに調べると↑なので、移植が終わってからが難航しそうだなぁ。

なんつーか、ライブラリばっか作ってないでゲーム作れって話なんですが。

2009/05/27(Wed)StaticResourceLoader.cs

はてブ数 2009/05/27 2:48 計算機な日記::ソフト作り つーさ

GSDK on C# で。

これで

namespace Tsukikage.GameSDK.Base
{
  public interface IDXResourceLoader<ResourceType>
  {
    ResourceType LoadResource(ResourceType target);
  }
}

こうして

namespace Tsukikage.GameSDK.Direct3D
{
  public class D3DDevice : DXResource,
    IDXResourceLoader<D3DTexture>, IDXResourceLoader<D3DFont>
  {
    public D3DTexture LoadResource(D3DTexture target)
    {
      LoadTexture(target);
      return target;
    }
  }
}

こうやって


using Ref = System.Reflection;
namespace Tsukikage.GameSDK.Base
{
  /// <summary>
  /// staticリソース読み込み支援クラス
  /// </summary>
  public class StaticResourceLoader
  {
    static Dictionary<Type, StaticResourceLoader> loaders = new Dictionary<Type, StaticResourceLoader>();
    public static void Load<TypeToLoad>(Type target, IDXResourceLoader<TypeToLoad> loader)
    {
      lock (loaders)
      {
        if (loaders.ContainsKey(target) ) 
          return;
        
        loaders[target] = new StaticResourceLoader();

        foreach (Ref.FieldInfo fi in target.GetFields(Ref.BindingFlags.Public | Ref.BindingFlags.Static))
        {
          if (fi.FieldType == typeof(TypeToLoad) && fi.GetValue(null) != null)
            loader.LoadResource((TypeToLoad)fi.GetValue(null));
        }
      }
    }
  }
}

で、こう。


namespace WindowsGame1.Scenes
{
  public class Textures
  {
    public static D3DTexture Circle = new D3DTexture("circle.png");
  }

  class Scene1 : Scene
  {
    public override void Initialize()
    {
      StaticResourceLoader.Load<D3DTexture>(typeof(Textures), GSDK.D3D);
    }
  }
}

……。

まず口から出てくるのは「キメェ」の一言かもしれない。

ただ、大富豪的プログラミング時代においては、中規模程度のゲームまではこういうリソースの持ち方もありかなぁと思わないでもない。

(自分も含めて)ゲーム作り初心者が多いうちのサークルでは、この前もテクスチャリソースがリークして大変なことになってたけど。

ここを読んでくださっているみなさんはどう思われますか、なんつて。

ここを見てる人はきっとリソース管理なんて朝飯前で、こんなことしないのかもしれない……。

あー、ゲーム作りてぇなぁ……。