「IT」カテゴリーアーカイブ

ITに関する事柄

Standard MIDIファイルの中身

今回は音楽とIT両方に絡む技術的なお話し。

先日関わった楽曲制作のプロジェクトで、納品形式がStandard MIDIファイル、ってのがあった。
カラオケ通信カラオケになった当初、既存の曲を耳コピでMIDIにするっていう作業をガンガンやってる仲間もいたけど、最近はMIDI納品ってあんまり聞かない気がする。

ということで、ねずみやもほとんど未経験のMIDI納品。
いざやってみると・・・

  1. 手持ちのシーケンスソフトでMIDI書き出し
  2. あれ、環境によってちゃんと鳴らない
  3. MIDIの中身を確認する必要が。。。
  4. google先生にMF2Tというツールを教えてもらう
  5. 昔のアプリケーションなのでコマンドラインでしか動かない
  6. MIDIファイルは大量にあるので手間がかかりすぎるぅ
  7. 一括処理ができるGUIを作ったら便利じゃね?
  8. じゃー作るか

ということでMF2TのGUI部分を作りました
自分が必要な部分しか作ってないので、MF2Tのオプション機能とかには未対応です(要望があれば検討しますが要望は来ないと思う)。
それでももしかしたら誰かが検索して見つけて使うかもしれないから一応公開だけしておきます。

今回の諸々をきっかけにStandard MIDIファイルの規格の文書とかいくつか読んだんだけど、よく規格をまとめたなって感心ひとしきり。
まぁ知らなきゃ知らないで済むことだけど、知るとそれはそれで興味深かった。

ホントはソフトウェアのところにもう一つ公開してるものがあるんだけど、こっちはドキュメントが未完成&再度バージョンアップの予定もあるのでまたあらためて紹介したいと思います。

Fitocracy始めました

Fitocracyっていうサービスに登録してみた。

軽く検索してみたらonyourmarkとかdailymileとかあったみたいだけど、まぁ別にお試しだったのでどれでもよかった。
iPhoneアプリもあるよって記事を読んだのでとりあえず的に登録。

ちょっとした筋トレでもストレッチでも記録を残せばポイントに換算して貯まっていくらしい。
グループに属してグループポイントを貯めたり競ったり、クエストにチャレンジしたりなどなど。。。
目新しいという感じでもないと思うんだけど、日常的な運動のきっかけの一つになればな、と。

ジムに行く頻度が上がるかは未知数なものの、3分とか4分で終わるような筋トレ・ストレッチはしばらく増えるかもな。

誰か友だちも一緒にやりたいところだけど、ほぼ全面英語なのがちょっとハードルかな。
筋トレとかストレッチの名前が英語だとさっぱり分からなかったりする。
日本語でも結局カタカナ表記の外来語でさっぱりだったりするんだけど。。。

適当に遊んでみるとしよう。

iPod touchを道具として使いこなしたい

音楽関係の先輩のブログにて、PolyTuneというiPhoneアプリを知る。
これは感動的♪

いわゆる「ギターやベースのチューナー」なので誰もが使う訳じゃないけど、使う人はぜひ一考を。

弦を一本ずつ普通にチューニングできるのはもちろんのこと、六本を同時に鳴らすと弦ごとに高い低いを同時に視覚的に表してくれる。
劇的にチューニング効率が上がるということではないながら、それでもちょこっとチューニング作業が楽しくなりそう☆
最初のうちだけだろうけど・・・

値段は有料(85円)。

iPhoneアプリと言えば、別の音楽関係の友人が紹介してたヘルとけい(Backtick Clock)ってのも面白かったなぁ。
こちらは無料。

今日とか今月とか今年とか人生の残り時間を教えてくれるアプリ。
もちろん人生の終わり(何歳まで生きる予定か)は自分で設定。
ちなみにねずみやは60歳に設定しました。
短めだけど、そういうつもりしてた方が密度濃く過ごせるかなと。
まぁむしろ「今年の残り」とか「今月の残り」とかをカウントダウンしてくれるのが刺激になりそう。
このアプリの画面が壁紙になったらいいのになぁ。。。

ねずみやが使ってるiPodは年明けに第4世代に買い換えました。
それを機にもっと自分のためになる使い方をしようと試行錯誤中。
自分が快適に&充実して&計画性をもって日々を過ごせるためにうまく使える道具にしたいなと。
ただここのところちょっとアプリを立て続けに買い過ぎのきらいが。。。

お金を払う便利だけじゃなくて、現状のなかでいかに頭使って工夫・改善するかって切り口も忘れないようにしないとね~。

MS Wordの描画キャンバスの使い勝手Hack その3

どっっっぷりIT系の話しアゲイン。

先日のMicrosoft Wordの描画キャンバスの話しその続編のさらに続きです。

英語のブログの方に『「左右に整列」と「上下に整列」もできるようにしてくれない?』っていうコメントと言うかリクエストが来たのでやってみた、って話。

マクロを追加しただけなのでやり方は以前の記事を参照して下さいませ。

変更点は以下のとおり。
・関数を追加(DistributeHorizontal,DistributeAlignVertical,SortHorizontal,SortAlignVertical)
・以前の関数内の変数の型を修正(AlignHorizontal,AlignVertical)

整列させたいモノはそんなに多くないという前提で、速さよりも簡潔さを重視したソートアルゴリズムにしています。

Private Sub AlignHorizontal(ARate As Single)
Dim Min, Max, i As Single
    Min = 32768
    Max = -32768
    For Each AShape In Selection.ChildShapeRange
        If Min > AShape.Left Then
            Min = AShape.Left
        End If
        i = AShape.Left + AShape.Width / 20
        If Max < i Then
            Max = i
        End If
    Next AShape
    For Each AShape In Selection.ChildShapeRange
        AShape.Left = Min * (1 - ARate) + Max * ARate - AShape.Width / 20 * ARate
    Next AShape
End Sub

Private Sub AlignVertical(ARate As Single)
Dim Min, Max, i As Single
    Min = 32768
    Max = -32768
    For Each AShape In Selection.ChildShapeRange
        If Min > AShape.Top Then
            Min = AShape.Top
        End If
        i = AShape.Top + AShape.Height / 20
        If Max < i Then
            Max = i
        End If
    Next AShape
    For Each AShape In Selection.ChildShapeRange
        AShape.Top = Min * (1 - ARate) + Max * ARate - AShape.Height / 20 * ARate
    Next AShape
End Sub

Private Sub AlignShape(AHorizontal As Boolean, ARate As Single)
    If Selection.ChildShapeRange.Count = 0 Then
        Exit Sub
    End If
    If AHorizontal Then
        AlignHorizontal (ARate)
    Else
        AlignVertical (ARate)
    End If
End Sub

Sub AlignHorizontalLeft()
    AlignShape True, 0
End Sub

Sub AlignHorizontalCenter()
    AlignShape True, 0.5
End Sub

Sub AlignHorizontalRight()
    AlignShape True, 1
End Sub

Sub AlignVerticalTop()
    AlignShape False, 0
End Sub

Sub AlignVerticalMiddle()
    AlignShape False, 0.5
End Sub

Sub AlignVerticalBottom()
    AlignShape False, 1
End Sub

Private Sub SortHorizontal(ByRef ACol As Collection)
Dim TmpCol    As Collection
Dim l_cls       As Object
Dim l_clsMin    As Object
Dim MinID As Integer
Dim i           As Integer
    Set TmpCol = New Collection
    Do Until (ACol.Count = 0)
        MinID = 1
        For i = 2 To ACol.Count
            If ACol(MinID).Left > ACol(i).Left Then
                MinID = i
            End If
        Next i
        TmpCol.Add ACol(MinID)
        ACol.Remove MinID
    Loop
    Set ACol = TmpCol
End Sub

Private Sub SortVertical(ByRef ACol As Collection)
Dim TmpCol    As Collection
Dim l_cls       As Object
Dim l_clsMin    As Object
Dim MinID As Integer
Dim i           As Integer
    Set TmpCol = New Collection
    Do Until (ACol.Count = 0)
        MinID = 1
        For i = 2 To ACol.Count
            If ACol(MinID).Top > ACol(i).Top Then
                MinID = i
            End If
        Next i
        TmpCol.Add ACol(MinID)
        ACol.Remove MinID
    Loop
    Set ACol = TmpCol
End Sub

Sub DistributeHorizontal()
Dim Min, Max, i, Total, Interval As Single
Dim ShapeCol As Collection
    If Selection.ChildShapeRange.Count > 1 Then
        Min = 32768
        Max = -32768
        Total = 0
        Set ShapeCol = New Collection
        For Each AShape In Selection.ChildShapeRange
            If Min > AShape.Left Then
                Min = AShape.Left
            End If
            i = AShape.Left + AShape.Width / 20
            If Max < i Then
                Max = i
            End If
            ShapeCol.Add AShape
            Total = Total + AShape.Width / 20
        Next AShape
        SortHorizontal ShapeCol
        Interval = (Max - Min - Total) / (ShapeCol.Count - 1)
        Total = ShapeCol(1).Left
        For Each AShape In ShapeCol
            AShape.Left = Total
            Total = Total + AShape.Width / 20 + Interval
        Next AShape
    End If
End Sub

Sub DistributeVertical()
Dim Min, Max, i, Total, Interval As Single
Dim ShapeCol As Collection
    If Selection.ChildShapeRange.Count > 1 Then
        Min = 32768
        Max = -32768
        Total = 0
        Set ShapeCol = New Collection
        For Each AShape In Selection.ChildShapeRange
            If Min > AShape.Top Then
                Min = AShape.Top
            End If
            i = AShape.Top + AShape.Height / 20
            If Max < i Then
                Max = i
            End If
            ShapeCol.Add AShape
            Total = Total + AShape.Height / 20
        Next AShape
        SortVertical ShapeCol
        Interval = (Max - Min - Total) / (ShapeCol.Count - 1)
        Total = ShapeCol(1).Top
        For Each AShape In ShapeCol
            AShape.Top = Total
            Total = Total + AShape.Height / 20 + Interval
        Next AShape
    End If
End Sub

MS Wordの描画キャンバスの使い勝手Hack その2

その3を書きました(2011.10.7))

描画キャンバスの使いにくい特徴の対策については昨日書いた通り。

でもって、そのマクロの機能を毎回「開発」のリボンから呼び出すのもかったるいので、そいつらはよく使うリボンに登録しちゃいましょ、の話し。

まず、Wordのオプションを開く。それから、、、

  1. リボンのユーザ設定を選択
  2. 「コマンドの選択」で「マクロ」を選択
  3. 「リボンのユーザ設定」で「ツールのタブ」を開いてから「描画ツール→書式→配置」を選択

Wordのオプション

  1. 新しいグループを作って
  2. マクロを追加して
  3. 名前を適宜変更する

マクロをボタンに

これでリボンにボタンを登録できた。
リボンに反映された

めでたしめでたし。
不要ならこれで開発リボンは非表示にしてもOKです。