HoustonTracker 2 説明書

このドキュメントの最新版は http://irrlichtproject.de/houston/manual.htmlにある(英語)。


Contents

1. 概要
   1.1. HoustonTracker 2 とは何か?
   1.2. 仕様
   1.3. 対応機種
   1.4. ライセンス

2. 表記規則、用語、定義

3. 準備
   3.1. 必要なもの
   3.2. インストール
   3.3. HT2の実行

4. HT2の使い方
   4.1. クイックチュートリアル
   4.2. キー
   4.3. 曲の編成
     4.3.1. モード、インジケータ、グローバル変数
     4.3.2. ソングシーケンスの編集
     4.3.3. 音程パターンの編集
     4.3.4. ドラム/エフェクトパターンの編集
       4.3.4.1. ドラム
       4.3.4.2. エフェクト
   4.4. ロード、セーブ、バックアップ
   4.5. エラーコード

5. ht2utilの使い方

6. 謝辞とクレジット

付録 A: ソースからビルドする
付録 B: データ形式
付録 C: 技術解説
付録 D: トラブルシューティング
   Windows版TiLPのインストール/設定で問題が発生する
   WindowsでGrayLinkを設定するには?
   OS XにTiLPをインストールする方法がわからない
   TI-ConnectでTI82に転送できない




1. 概要

1.1. HoustonTracker 2 とは何か?

HoustonTracker 2 はTexas Instrumentsのグラフ電卓で音楽を作るためのミュージックシーケンサーソフトウェアである。 通信ポートを使用し、複数チャネルの1ビットミュージックを出力する。 インターフェースはLSJDやFamitracker、Milkytrackerのようなよく知られたミュージックトラッカーの影響を受けている。

HT2はZ80ベースの複数のTI電卓に対応している。 主な対象はTI-82のような旧機種であるが、TI-84 plus SEのような比較的新しい機種にも対応している。 完全な対応機種の一覧表は、1.3 対応機種を参照すること。


1.2. 仕様

• 3音のトーンチャネル
• 1音の非割り込みドラムチャネル
• 最大128のトーンパターン
• 最大64のドラム/エフェクトパターン
• 最大長255のシーケンス
• 精度16ビットの周波数
• 1ステップ毎に編集できる8ビット精度の演奏速度
• 以下のような様々なエフェクト:
  - トーンとドラムチャネルの左/中央/右パン
  - 8ビットのデューティ比の制御
  - デューティ比のスイープ
• 2つのユーザ定義サンプリング
• 最大8の保存域
• 演奏中の編集


1.3. 対応機種

以下の表はHoustonTracker 2が対応するTI電卓の一覧である。 この表にない電卓ではHT2は使えない。

機種 ROMバージョン シェル HT2 実行ファイル 対応
TI-73, 73 Explorer 全て mallard - 計画中
TI-76.fr 全て Ion ht2.83p 未テスト
TI-81 - - - 非対応
TI-82 < 16.0 - - 計画中
TI-82 16.0-19.0 CrASH 1.6 ht2.82p 対応
TI-82 Parcus 19.006 CrASH_19006 ht2p.82p 対応
TI-82 Advanced - - - 非対応
TI-82 Stats, Stats.fr 全て Ion ht2.83p 対応
TI-82 Plus 全て DoorsCS ht2.8xp/ht2s.8xp 対応
TI-83 (全モデル) 全て Ion ht2.83p 対応
TI-83 Plus (全モデル) 全て DoorsCS ht2.8xp/ht2s.8xp 対応
TI-84 Plus/Plus SE all DoorsCS ht2.8xp/ht2s.8xp 対応
TI-84 Plus CSE/CE - - - 非対応
TI-85, 86 - - - 非対応
TI-89, 92, 92+, V200 - - - 非対応


「非対応」の機種はHT2の大幅な修正が必要となる。 84+カラーモデル以外は近日中に対応する予定はない。


1.4. ライセンス

HoustonTracker 2は、自由な、オープンソースのソフトウェアであり、「修正」BSDライセンスの下で配布される。 それは、あなたの行いを私が協賛していると偽ったり、損害の責任を負わせようとしない限り、ソースとバイナリの両方を自由に使用、変更、再配布できることを意味している。 ライセンスの全文は以下の通りである:

Copyright (c) 2015, utz^irrlicht project
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
   * Redistributions of source code must retain the above copyright
     notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above copyright
     notice, this list of conditions and the following disclaimer in the
     documentation and/or other materials provided with the distribution.
   * Neither the name of IRRLICHT PROJECT nor the
     names of its contributors may be used to endorse or promote products
     derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.






2. 表記規則、用語、定義

HoustonTracker 2とこのドキュメントで用いられる基本的な用語と表記規則について説明する。


キー押下の表記法

このドキュメントでは、キー押下は大括弧で囲まれたボールド体で表される。 HT2では全てのキー押下は順番に行い、あるキーと別のキーを同時に押すことはない。
例えば、[ALPHA], [GRAPH], [ENTER]は初めにALPHAキーを押し、その次にGRAPHキーを押し、最後にENTERキーを押すことを意味している。


16進数の表記法

このドキュメントでは、16進数の場合は先頭に0xを付ける。 つまり、0x20 = $20 = 20h = 32(10進数) である。
HoustonTracker 2のユーザインターフェースでは、数字は全て16進数であり、先頭には何も付かない。


用語

ビット
(bit)
HT2内部で用いられる最も小さな単位の数値。0(オフ)と1(オン)の2つの値を取り得る。
バイト
(byte)
噛む(bite)こととは関係なく、8ビットの数値を意味する。0x00(10進数で0)から0xFF(10進数で255)までを取り得る。
デューティ比
(duty cycle)
矩形波のそれぞれの半周期の時間の比
上位バイト
(hi-byte)
16進数4桁の内、左側の2桁のこと。MSB(Most Significant Byte)とも言う。
下位バイト
(lo-byte)
6進数4桁の内、右側の2桁のこと。LSB(Least Significant Byte)とも言う。
ニブル
(nibble)
16進数1桁。4ビットであり、0x0から0xF(10進数で15)までを取り得る。
パターン
(pattern)
音楽のパートを構成するイベントのリスト。音程、ドラム、エフェクトコマンドで構成されている。HT2ではパターンの長さは全て16ステップである。
ピッチ
(pitch)
音の(知覚される)高さ。
シェル
(shell)
TI電卓上でマシン語のプログラムの実行を円滑に行うためのプログラム。HT2を実行するためにインストールする必要がある。
ソングシーケンス
(song sequence)
パターンの順番を表すマトリクス。ストーリーや歌の進行と同じようなもの。
ワード
(word)
16ビット。2バイト。16進数4桁。






3. 準備

3.1. 必要なもの

ハードウェア

- TI製グラフ電卓 (1.3 対応機種を参照すること)
- PC←→電卓リンクケーブル。例えば TI SilverLink (推奨)、 TI GraphLink、 自作したパラレル またはシリアルケーブル
- 2.5mm (マイクロ)ジャックアダプタ/ケーブル

安価な電卓間リンクケーブルを2.5mmアダプタとして使うこともできる。

多くのプラスチック製のアダプタはTIのソケットには太すぎる。 その場合は、合うようになるまで慎重にプラスチックを削ること。


ソフトウェア

HT2実行ファイルを追加するには次のものも必要となる:

- PCと電卓のデータ交換を行うTIリンクソフトウェア (推奨: TiLP)
- 電卓用のいわゆる「シェル」。 各機種の推奨シェルは次のリストの通りである。 他のシェルでも恐らく動作するが、テストしていない。

機種 シェル
TI-82 CrASH 1.6
TI-82 Parcus CrASH_19.006
TI-83, TI-82Stats Ion 1.6U
TI-83 Plus, TI-84 Plus Doors CS 7

HT2はMirageOSでは動作しない。

TI電卓を持っていないならば、エミュレータでHT2を動かすこともできる。 ベータバージョンのtilem2を推奨する。 Win32のインストーラーはここにある。 *nixユーザは開発バージョンをsvn checkout https://tilem.svn.sourceforge.net/svnroot/tilem/trunk tilemで入手できる。 いずれの場合もTiLPをインストールしている必要がある。




3.2. インストール

HoustonTracker 2をインストールすると、HT2をアンインストールするまで通常の機能がほとんど使えなくなる。 学校や大学で電卓を普通に使う必要がある場合は、HT2をインストールしてはならない。


以下の説明はコンピュータにTiLPがインストールされていることを前提としている。 別のリンクプログラムを使う場合も、どのようにすればよいかわかるはずである。


TI82/82 Parcusへのインストール

ステップ 0: TI82のバージョンがわからなければ、[MODE], [ALPHA], [LN]でROMバージョンをチェックする。19.006ならば82 Parcusで、他ならば通常の82である。確認したらEnter以外を押す。
ステップ 1: [2nd], [+], [3]を押して電卓をリセットする。
ステップ 2: 電卓の電源を切り、コンピュータとリンクケーブルで接続する。
ステップ 3: 電卓の電源を再び入れる。
ステップ 4: コンピュータでTiLPを起動する。電卓とリンクケーブルが正しく接続されていることを確認する。確認できなければCtrl+Dで再設定する。
ステップ 5: 電卓で[2nd], [X,T,Θ], [▸], [ENTER]を押して送信モードにする。
ステップ 6: TiLpで "File"→"Restore" として CRASH.82B(通常のTI82) または CRASH19006.82b(82 Parcus) を選択する。その後、TiLPと電卓の双方で実行を確認される。
ステップ 7: 完了すると電卓は送信モードに戻る。その後、("File"→"Send Files"で) ht2.82p(通常) または ht2p.82p(Parcus) を送信する。

TI-82とSilverLinkケーブルで接続する場合は、コンピュータにTI公式の接続ソフトウェアをインストールしてはならない。 インストールされている、または過去にインストールしたことがある場合は、全てのコンポーネント、特に同時にインストールされるUSBドライバを完全に消去すること。

TI83/TI82Statsへのインストール

ステップ 1: [2nd], [+], [5]を押して電卓をリセットする。
ステップ 2: 電卓の電源を切り、コンピュータとリンクケーブルで接続する。
ステップ 3: 電卓の電源を再び入れる。
ステップ 4: コンピュータでTiLPを起動する。電卓とリンクケーブルが正しく接続されていることを確認する。確認できなければCtrl+Dで再設定する。
ステップ 5: TiLpで "File"→"Send Files" としてIonパッケージの ION.83G を選択する。
ステップ 6: 電卓がIonを受信した後、[PRGM]を押して "ION" を選択し、 [ENTER] を押す。
ステップ 7: [2nd], [+], [2], [7]を押す。IONを選択し[ENTER]を押して削除する。IONZも同様にする。
ステップ 8: 完了すると("File"→"Send Files")で ht2.83p を送信できる。


TI83 Plus/TI84 Plusへのインストール

ステップ 1: [2nd], [+], [7], [▸], [▸], [ENTER]を押して電卓をリセットする。
ステップ 2: 電卓の電源を切り、コンピュータとリンクケーブルで接続する。その後、自動的に電源が入る。
ステップ 3: コンピュータでTiLPを起動する。電卓とリンクケーブルが正しく接続されていることを確認する。確認できなければCtrl+Dで再設定する。
ステップ 4: Tilpで "File"→"Send Files" としてDoorsCSパッケージの DoorsCS7.8xk を選択する。
ステップ 5: 完了すると("File"→"Send Files")で ht2.8xp を送信できる。

多くのアプリケーションがアーカイブされていて十分な空き領域がない場合は、代わりに ht2s.8xp をインストールしてもよい。


素早くアクセスするために、TiLPには非GUIモードがある。 コマンドプロンプト(Windowsならばcmd.exe、*nixならば各シェル)で以下のコマンドを入力して使うことができる:
tilp [calc-model] [cable-model] [filename]
HT2をTI83 PlusにSilverLinkケーブル経由で送信する場合は、以下のようにする
tilp ti83+ SilverLink ht2.8xp



3.3. HT2の実行

一度HT2をインストールすれば、実行は簡単である。

ステップ 1: [PRGM](TI82/83)、または [APPS](TI83 Plus/84 Plus) を押す。
ステップ 2: "CRASH"(TI82)、"A" (TI83)、"DoorsCS"(Plus models)を選択して[ENTER]を押す。
ステップ 3: HoustonTracker 2がハイライトになっていることを確認し、再び[ENTER]キーを押す。エラーが発生しない限り、HT2が実行される。
ステップ 4: オーディオケーブルまたはヘッドホンを挿す。

HT2を[ALPHA],[ON]で終了するとシェルに戻る。 [MODE](CrASH, Ion)または[CLEAR](DoorsCS)を押すとシェルが終了する。

TI83/8x Plusの場合、HT2の起動と終了には10秒程度かかる。





4. HT2の使い方

4.1. クイックチュートリアル

ここではHoustonTracker 2の始めかたを10ステップで簡単に説明する。 もしこの説明書を全て読むのが面倒ならば、そしてHT2を5分で始めたいならば、この節はあなた向けである。


ステップ 1: HoustonTracker 2を起動し、オーディオ/ヘッドホンケーブルを挿す。もし方法がわからなければ、前の節を確認すること。

ヘッドホンはHT2を起動した後に挿すこと。そして終了する前に抜くこと。


ステップ 2: [MODE]を押して自動前進モードにする。ここでソングシーケンスにパターンを入力する。そのためには次のようにボタンを押す: [0],[0],[0],[1],[0],[2],[0],[0]。 メイン画面はこのようになる:



シーケンス行の4つのパターンは、不具合や予期しない動作を避けるために常に全て入力すること。


ステップ 3: カーソルをシーケンスの最初のパターンの位置に移動させる。ここで[2nd]を押す。するとパターン画面に移行する。




ステップ 4: ここで自動再生モードにする。すると入力した音を聴くことができる。[ALPHA],[MODE]を押すこと。


ステップ 5: このパターンにいくつかの音程を設定してみる。[PRGM],[PRGM]を押す。


ステップ 6: 音が低すぎるだろう。[GRAPH],[2]を押してオクターブを変える。さらに音程を入力する。 例えば[PRGM],[PRMG],[SIN],[SIN],[TAN],[TAN]のように押す。




ステップ 7: [ENTER]を押してこれまで入力した分を聴いてみる。


ステップ 8: やや退屈ではないだろうか? ドラムをスパイスとして加えてみよう。[2nd]を押してメイン画面に戻る。カーソルを右端へ移動させ、[2nd]を再び押す。するとエフェクトパターン画面へ移行する。




ステップ 9: [1],[▾],[2],[2],[1],[▾],[2],[2],[1],[▾],[2],[2],[▾],[2],[▾],[2]のようにボタンを押す。




ステップ 10: おめでとう。これであなたの最初のHoustonTracker 2の「曲」が完成した!




4.2. キー

Houstontracker Keymap

キー 通常の機能 アルファモードの機能 説明
 
[ON] - 終了 HT2を終了する。現在の曲はメモリに残る。曲の再生が止まっている場合のみ終了できる。TI83/8x Plusの場合、少し時間がかかる。
 
[Y=] ロード セーブ 曲をロードする。スロット番号(0..7)の入力待ちになる。
アルファモードの場合、現在の曲をセーブする。スロット番号(0..7)の入力待ちになる。
[WINDOW] 曲の消去 スロットの消去 現在の曲を消去する。確認待ちになる。
アルファモードの場合、スロット番号(0..7)の入力待ちの後、そのスロットを削除する。
 
[.] 了解 - 確認に対して了解する。(取り消したい場合は[0]を押す。)
 
[2nd] シーケンス/パターン画面の切替 - シーケンス画面とパターン画面を切り替える。シーケンス画面の場合、カーソル位置のパターンが選択されたことになる。
[ALPHA] アルファモード オン アルファモード オフ アルファモードのオンとオフを切り替える。
ヒント: 曲の再生中ならば、このキーを押している間は再生が一時停止する。
[MODE] 自動前進モードの切替 自動再生モードの切替 カーソルの自動前進のオン/オフを切り替える(デフォルトはオフ)。
アルファモードの場合、編集中の音程の再生を切り替える(デフォルトはオフ)。設定されているエフェクトは無視されるので注意すること。
 
[▴] 先頭へジャンプ カーソルを上に移動させる。アルファモードの場合、シーケンスの00行にジャンプする。
[▾] 末尾へジャンプ カーソルを下に移動させる。アルファモードの場合、シーケンスの最後の行にジャンプする。
[◂] 前ページ/前パターン カーソルを左に移動させる。アルファモードの場合、シーケンスを1ページ(10行)分上に移動させる。
パターン画面でアルファモードの場合、前のパターンに切り替わる。
[▸] 次ページ/次パターン カーソルを右に移動させる。アルファモードの場合、シーケンスを1ページ(10行)分下に移動させる。
パターン画面でアルファモードの場合、次のパターンに切り替わる。
 
[ENTER] 再生/停止 - 00行から曲を再生する。再生中ならば停止する。
[(-)] 現在行の再生/一時停止 - シーケンスの現在の行を再生する。再生中ならば再生を一時停止する。
 
[0] 0/音程の削除/取消 パターンを削除する カーソル位置に0を入力する、または音程を削除する、または取り消す。
シーケンス画面でアルファモードの場合、選択中のパターンをシーケンスから削除する。
[1]..[9] 1..9 - カーソル位置に1..9を入力する。
[MATH] A A# カーソル位置に16進数のAまたは音程Aを入力する。音程の入力でアルファモードの場合、A#を入力する。
[MATRIX]/[APPS] B - カーソル位置に16進数のBまたは音程Bを入力する。
[PRGM] C C# カーソル位置に16進数のCまたは音程Cを入力する。音程の入力でアルファモードの場合、C#を入力する。
[x⁻¹] D D# カーソル位置に16進数のDまたは音程Dを入力する。音程の入力でアルファモードの場合、D#を入力する。
[SIN] E - カーソル位置に16進数のEまたは音程Eを入力する。
[COS] F F# カーソル位置に16進数のFまたは音程Fを入力する。音程の入力でアルファモードの場合、F#を入力する。
[TAN] G G# カーソル位置に音程Gを入力する。音程の入力でアルファモードの場合、G#を入力する。
このキーはシーケンス/エフェクトパターン画面の場合は何も起こらない。
 
[,] CH1ミュート/解除 全ミュート解除 チャネル1をミュート/ミュート解除する。アルファモードの場合、全チャネルのミュートを解除する。
[(] CH2ミュート/解除 ドラムミュート/解除 チャネル2をミュート/ミュート解除する。アルファモードの場合、ドラムチャネルをミュート/ミュート解除する。
[)] CH3ミュート/解除 全ミュート チャネル3をミュート/ミュート解除する。アルファモードの場合、全チャネルをミュートする。
 
[TRACE] スピード設定 ユーザドラム設定 曲の全体のスピードを設定する。この設定の詳細はグローバル変数を参照すること。
アルファモードの場合、ユーザドラムのポインタを設定する。0x0000から0xFFFFの間のあらゆる値を設定できる。しかし、値を保障のため0x0000 - 0x7FFFの指定を推奨する。これより上位の値は予期しない結果となるだろう。
[GRAPH] オクターブ設定 - オクターブを設定する。パターン画面の場合のみ有効である。0..6の値を設定できる。
 
[X,T,Θ] 移調する(上げる) 移調する(下げる) 現在のパターンを半音上げる。アルファモードの場合、現在のパターンを半音下げる。
範囲外となった音は休符になる。
 
[x²] LPを現在の行に設定 LP設定 シーケンスの現在の行をループポイントに設定する。シーケンス画面の場合のみ有効である。
アルファモードの場合、新しいLPを入力する。変更は次の再生まで有効にならない。
 
[LN] BSを現在の行に設定 BS設定 シーケンスの現在の行をブロックスタートに設定する。シーケンス画面の場合のみ有効である。
アルファモードの場合、新しいBSを入力する。
[STO►] BEを現在の行に設定 BE設定 シーケンスの現在の行をブロックエンドに設定する。シーケンス画面の場合のみ有効である。
アルファモードの場合、新しいBEを入力する。
 
[÷] - ブロック貼付 アルファモードの場合、選択したブロックを現在以降の行に貼り付ける。
貼り付け先の行と選択した行は重なっていてはならない。
[×] ブロック挿入 ブロック削除 カーソル位置に選択したブロックのコピーを挿入する。
アルファモードの場合、選択したブロックを削除する。
[-] 行挿入 行削除 カーソル位置の行をコピーして挿入する。
アルファモードの場合、現在の行を削除する。
[+] 次の空パターンを設定 パターンを複製 シーケンスのカーソル位置に次の未使用パターンを設定する。
アルファモードの場合、カーソル位置のパターンをコピーし、そのコピーをカーソル位置に設定する。




4.3. 曲の編成

4.3.1. モード、インジケータ、グローバル変数

  

モードとインジケータ

現在のモードや編集設定を示す様々なインジケータがある。

アルファモード インジケータは大文字のAで表され、HT2のロゴの左端の斜線の下に表示される。 Aが表示されているならば、アルファモードの状態である。 HT2のアルファモードはPCのシフトキーと同じだが、2つのキーを同時に押すのではなく、キーを押した後に別のキーを押す。
HT2では多くのキーに主と副の2つの機能がある。 アルファモードでは、副機能が有効になる。アルファモードへの切り替えは、その名の通り[ALPHA]を押す。 アルファモードの機能を1度使うと、アルファモードが自動的にオフになる。

再生インジケータはHT2ロゴの真下にある。 先頭は曲が再生中か停止中かを示している。 停止中の場合は■、再生中の場合は大文字のPが表示される。 その次には、通常は"123D"と表示されている(それぞれチャネル123とドラム)。 これらはチャネルのミュート状態を表している。 ミュートされたチャネルは、そのチャネルの番号/文字の代わりに"-"が表示される。

自動前進/自動再生インジケータは、自動前進と自動再生が有効かを示している。 それは画面の右側の下から3行目、グローバル変数の下に表示されている。 自動前進インジケータが"A0"ならば無効(デフォルト)、"A1"ならば有効である。 自動前進が有効の場合、値や音程を入力するとカーソルが自動的に次の位置に移動する。 [MODE]を押すと自動前進の有効無効が切り替わる。 自動再生インジケータは自動再生モードが有効化を示す。 もしそうならば、大文字のPが表示されている。 音程を入力すると、HT2は自動的に現在の位置のパターンを再生する(ミュートされていない全てのチャネル)。 [ALPHA], [MODE]を押すと自動再生の有効無効が切り替わる。

自動再生モードは現在の位置の全てのエフェクトを完全に検知できるわけではないため、実際に曲全体を再生したときと異なる場合がある。

自動前進/自動再生インジケータの下には、一般的なメッセージエリアがある。 ここにはエラーやユーザへの確認など様々な重要なメッセージが表示される。 確認は、了解のとき[.]、取り消しのとき[0]を押す。


グローバル変数

ループポイントは、曲がシーケンスの終わりに到達したときの戻り先の行である。 [x²]を押すと現在のカーソル位置の行をループポイントに設定する。 別の行を設定するう場合は、[ALPHA], [x²]を押した後に16進数2桁を入力する。

全体スピード[TRACE]を押した後に16進数2桁を入力して設定する。 この値は1行にかかる時間を表すため、値が大きいほどスピードは遅くなる。

0x01 - 0x3Fの範囲の値ならば、その値の通りの時間がかかる。 0x40を加算すると元の値から¾を引いた時間、0x80を加算すると½を引いた時間、0xC0を加算すると¼を引いた時間がかかる。 つまり、スピードを0x08とするとかかる時間は8で、0xC8とすると7¾、0x88にすると7½、0x48にすると7¼となる。 元の値から引いた場合、2xx/3xx(ピッチスライド)や8xx(音程テーブル実行)、Cxx(音程カット)を含む様々なエフェクトに大きな変化が起こりうるので注意すること。

0x00(別名「ドローンモード」)は例外である。これは最も遅い設定で、256と同じである。(0x40/0x80/0xc0を加算するとわずかに短くなる。)

ユーザドラムポインタ[ALPHA], [TRACE]を押した後に16進数4桁を入力して設定する。 ユーザドラムポインタの詳細はドラムを参照すること。

曲を再生しなおすまでグローバル変数の変更は反映されない。



4.3.2. ソングシーケンスの編集

  

シーケンス画面は全体的な曲の構造を作るためにある。4つの列があり、それぞれがパターンのリストになっている。 列はチャネルを表している。メイン(シーケンス)画面とパターン画面は、シーケンスのパターンをカーソルで選択して[2nd]を押すと切り替わる。

最初の3つの列は3つのトーンチャネルで、音程パターンが含まれている。 最後のチャネルはドラムチャネルとエフェクト設定で、エフェクトパターンが含まれている。 トーンチャネルは、チャネルによって音と特徴が異なる。 チャネル1A0xエフェクトの影響を受け、ノイズやグリッチ音を通常の音程に加えることができる。 チャネル2は他のチャネルより音が大きく、SIDスタイルのデューティ比スイープエフェクトを加えることができる。 チャネル3は高速ピッチスライドを加えることができる。 全てのチャネルは様々なデューティ比に対応している。



シーケンス画面での移動

[▴], [▾], [◂], [▸]でシーケンス画面上のカーソルを動かすことができる。

[ALPHA], [◂]または[ALPHA], [▸]で10行分上下に移動する。

[ALPHA], [▴]でカーソルがシーケンスの先頭行へ移動する。 同様に、[ALPHA], [▾]でカーソルがシーケンスの最終行へ移動する。



シーケンスの編集

[0]..[9]A..F ([MATH], [MATRX] または [APPS], [PRGM], [x⁻¹], [SIN], and [COS]) でパターン番号を入力する。 音程パターンは最大128、エフェクトパターンは最大64使える。 よって、パターン番号の最大はそれぞれ0x7Fと0x3Fとなる。 音程パターンは3つの音程チャネル全てで共通であり、どのチャネルでも使うことができる。 間違った音程パターン番号を入力しようとすると、HT2は自動的に任意の番号に置き換える。

音程パターンとエフェクトパターンは別々の番号を使っている。つまり、音程パターン01とエフェクトパターン01は別である。

[+]で未使用の最初のパターン番号を自動的にカーソル位置に設定する。 [ALPHA], [+]でカーソル位置のパターンを複製する(新しい未使用のパターン番号にコピーする)。

[ALPHA], [0]でカーソル位置のパターン番号を削除する。

[-]で現在の行をコピーし、現在の行に挿入する。

[÷]で現在の行を削除する。

常に4つのパターン全てを設定すること。 空きパターンを再生すると予期しない副作用が発生する場合がある。



ブロック操作

HT2では2つのブロックマーカー、ブロックスタート(BS)ブロックエンド(BE)でシーケンスデータの範囲を選択し、コピー、ペースト、カットを行える。 ブロック操作は個々のチャネルではなくシーケンス全体に対して行われる。

[LN]を押すと現在の行がブロックスタートに設定される。 同様に、[STO►]を押すと現在の行がブロックエンドに設定される。 [ALPHA]モードでこれらのキーを押した場合は、BS/BEを入力して設定できる。

[×]を押すとブロックをコピーしカーソル位置に挿入する。 [ALPHA], [×]ならば、カーソル位置から上書きする。 ブロックの内部に挿入/上書きできず、対象は常にブロックの外でなければならないので注意すること。

[ALPHA], [÷]を押すと、選択したブロックを削除して、後のシーケンスを上に移動させる。



4.3.3. 音程パターンの編集

  

全ての音程パターンは16ステップ固定で、それぞれ8ステップの2列で構成されている。

[MATH](A)、[MATRX]または[APPS](B)、[PRGM](C)、[x⁻¹](D)、[SIN](E)、[COS](F)、[TAN](G)で音程を入力できる。 シャープ(黒い鍵盤)は[ALPHA] + 音程キーで入力する。

[ALPHA], [MODE]を押すと自動再生モードになり、入力中の音を聴くことができる。 自動前進インジケータの隣に"P"が表示されていれば、自動再生が有効になっている。 自動再生は不完全で、エフェクトの設定は無視されるので注意すること。 また、編集中のパターンがシーケンスの現在のカーソル位置でない場合も失敗する。

[GRAPH]を押した後に、0から9の数字を入力すると、現在のオクターブを変えられる。 パターンのオクターブは後で編集することもできる。

[ALPHA], [◂][ALPHA], [▸]でパターンを切り替えることができる。

パターンの長さを変えたいならば、B00エフェクトコマンドを使うこと。



4.3.4. ドラム/エフェクトパターンの編集

  

音程パターンと同様に、エフェクトパターンも8ステップ2列で構成されている。 それぞれのステップには16進数の4つの値がある。 最初の値は、そのステップのドラム音の設定である。 0の場合はドラムを鳴らさない。 HT2のドラムの詳細は次の節を参照すること。

2番目の値はエフェクトコマンドである。 0の場合はエフェクトをかけない。 最後の2桁はエフェクトのパラメータである。 エフェクトの詳細は4.3.4.2を参照すること。


4.3.4.1. ドラム

15種類のドラムを0x1..0xFの範囲で選ぶことができる。 一部のドラムはTI-OSをサンプリングデータとして使っているため、機種によって音が大きく異なる。

ドラムは音に影響を与える複数のモードで鳴らすことができる。 Cxxコマンド(xx = 0x00..0x4F)でモードを変えることができる。 ドラムモードは80種類あるが、全てのモードが役立つわけではない。

パラメータの下位ニブルに0以外の値を設定すると、ドラムデータを様々な方法で操作できる。 この機能の詳細は付録 Cを参照すること。

パラメータの上位ニブルはドラムデータポインタの振る舞いを定義する。 エフェクトは次の通りである:

モードコマンドエフェクト
0C00ポインタを前に進める。つまり「通常の」ドラムセットを使用する。
1C1xポインタを後ろに進める。つまり「別の」ドラムセットを使用する。 一般的に、これらのドラムは通常のものよりも使いにくい。 また、ドラム0, 1, C, Dのような一部のドラムは予期できない結果を生じさせる。
2C2xポインタを進めてループする。 モード1と同様に使いにくく同様の問題も発生する。 また、このモードはブローバルピッチシフトをわずかに引き起こす。
3C3xポインタを後ろに進めてループする。 モード2と同じことを別の音で行う。
4C4xポインタを動かさない。 このモードは、ドラムではなく、多くの場合は音程の外れた固定された音を再生する。 このモードはブローバルピッチシフトをわずかに引き起こす。

ドラム0xEと0xFは特殊である。

0xFは編集可能なユーザドラムポインタである。 [ALPHA], [TRACE]を押すと変更できる。
ユーザドラムポインタは$0000から$FFFFの間のいかなる値も設定できる。 しかし、安全に再生したいならば、ポインタは0x0000 - 0x7FFFの範囲にすべきである。 なぜなら、ユーザドラムは実際にはROM/RAMへのポインタで、RAM(0x8000以上)領域に設定すると、RAMの内容は変化するため結果が予想できなくなるためである。

0xEはユーザ定義サンプリングである。 この機能はややわかりにくい。 サンプリングデータはエフェクトパターン0x20に書き込む。 ここに設定された値は、通常のドラム、エフェクトコマンド、エフェクトパターンではなく、サンプリングデータとして再生される。 パターンは複数使用できる。0x20がいっぱいになったならば0x21を使用すること。

このデータは1ビットPWM形式(それぞれのバイトが半波長の長さを表す)である。 これは音の出力が切り替わるまでにかかる時間とも言える。 値と長さは逆になっている。 つまり、値が小さいほどその半波長は長くなる。 これは少し混乱するが、例としてドラム1(キックドラム)のサンプリングデータは次のようになっている:
0x80, 0x80, 0x70, 0x70, 0x60, 0x60, 0x50, 0x50, 0x40, 0x40, 0x40, 0x30, 0x30, 0x30, 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x0
その結果、波形はこのようになる:

image of drum waveform

最後のバイトは必ず0でなければならない。

2つ目のドラムサンプリングデータも定義できる。 その場合はドラムモードC1x/C3xで鳴らすことになる。 サンプリングデータの開始点は同様にエフェクトパターン0x20だが、後ろ向きに書き込む必要がある。 よって、2バイト目はエフェクトパターン0x1Fの最後の位置(最後の行のエフェクトパラメータ)、3バイト目はその1つ前の位置(最後の行のドラム/エフェクトコマンド)となる。




4.3.4.2. エフェクト

コマンド エフェクト 説明
1xx パンの設定 全チャネル パンを設定する。 パンの方法はエフェクトパラメータの個々のビットで指定する。 右(0ビット目)から始まる。

   0ビット目をセット: チャネル1を右パン (パラメータに0x01を加える)
   1ビット目をセット: チャネル1を左パン (パラメータに0x02を加える)
   0,1ビット目をリセット: チャネル1を中央パン (パラメータに何も加えない)
   2ビット目をセット: チャネル2を右パン (パラメータに0x04を加える)
   3ビット目をセット: チャネル2を左パン (パラメータに0x08を加える)
   2,3ビット目をリセット: チャネル2を中央パン (パラメータに何も加えない)
   4ビット目をセット: チャネル3を右パン (パラメータに0x10を加える)
   5ビット目をセット: チャネル3を左パン (パラメータに0x20を加える)
   4,5ビット目をリセット: チャネル3を中央パン (パラメータに何も加えない)
   6ビット目をセット: ドラムを右パン (パラメータに0x40を加える)
   7ビット目をセット: ドラムを左パン (パラメータに0x80を加える)
   6,7ビット目をリセット: ドラムを中央パン (パラメータに何も加えない)

例:
コマンドビットマスク計算方法エフェクト
100000000000x00 + 0x00 + 0x00 + 0x00 = 0x00全てのチャネルを中央パン
155010101010x01 + 0x04 + 0x10 + 0x40 = 0x55全てのチャネルを右パン
112000100100x02 + 0x00 + 0x10 + 0x00 = 0x12チャネル1を左、チャネル2を中央、チャネル3を右、ドラムを中央

右パラメータの計算が難しければ、このgarvalfのオンラインツールでパラメータを求めることができる。
2xx チャネル3 ピッチスライドアップ チャネル3のピッチをスライドアップさせる。
スライドの速さはxxで決まる。 値が小さいほどスライドが遅くなる。 xxにはあらゆる値を設定できるが、大きくしすぎるとピッチカウンタが巻き戻るので注意すること。
200でこのエフェクトを無効にできる。
3xx チャネル3 ピッチスライドダウン チャネル3のピッチをスライドダウンさせる。 これはエフェクト9xxを無効にする。
スライドの速さはxxで決まる。 値が小さいほどスライドが遅くなる。 xxにはあらゆる値を設定できるが、大きくしすぎるとピッチカウンタが巻き戻るので注意すること。
300でこのエフェクトを無効にできる。
4xx チャネル1 デューティ比/ノイズ チャネル1のデューティ比の設定とノイズモードの切り替えを行う。
xx <= 0x80 - デューティ比を設定し、ノイズモードを無効にする
xx > 0x80 - デューティ比を設定し、ノイズモードを有効にする
5xx チャネル2 デューティ比/スイープ チャネル2のデューティ比を設定、またはデューティ比スイープを有効にする。
xx <= 0x80 - デューティ比を設定してデューティ比スイープを無効にする。 値が0x80のとき、デフォルトの50:50となる。 非常に小さな値を設定すると不具合が発生する。
xx > 0x80 - SIDスタイルデューティ比スイープを有効にする。 スイープの速さ = (xx & 0x7F)で、581のときHT バージョン <= 2.20のようなスイープエフェクトとなる。
パラメータの一部をエフェクト7xxと共有しているため、これら2つのコマンドは影響を与え合う。
6xx チャネル3 デューティ比/グラインド チャネル3のデューティを設定とグラインドモードの切り替えを行う。
xx <= 0x80 - デューティ比を設定し、グラインドモードを無効にする。
xx > 0x80 - デューティ比を(xx*2)&0xffに設定し、グラインドモードを有効にする。
7xx チャネル2 オートコード チャネル2にコード(和音)エフェクトを加える。
xx < 0x80 - 非同期コードエフェクトを有効にする。和音は使われる音程によって異なり、常に調和的とは限らない。
xx >= 0x80 - 同期自動コードを有効にする。現在のデューティ設定に依存したオクターブコードが出力される。 xxを大きくするほど強く調和した出力になる。
700でこのエフェクトを無効にできる。
パラメータの一部をエフェクト5xxと共有しているため、これら2つのコマンドは影響を与え合う。詳細は5xxエフェクトの説明を参照すること。
8xx チャネル3 音程テーブルの実行 与えられたパターンをチャネル3の音程テーブルとして実行する。 このエフェクトは1音程ごとに行われる。 実行は最初の音程の後で始まる。
xxは音程テーブルとして実行されるパターンである。 もし現在のテンポが0x10より大きければ、テーブルの実行は次のパターンまで続く。
xxを0x7Fより大きな値にすると、このエフェクトを無効にできる。
このエフェクトを使用すると、Cxx(音程カット)エフェクトが無効になる。
9xx チャネル3 グリッチ チャネル3にグリッチエフェクトを加える。
xxにはあらゆる値を設定できる。 900でこのエフェクトを無効にできる。
Axx CH3 フェーズ チャネル3のフェーズ(位相)オフセットを設定する。
これ自身の効果は小さいが、別のチャネルでチャネル3と同じ音程を出力したときに干渉を引き起こす。 その場合、ボリュームコントロールとして使うことができる。
xxにはあらゆる値を設定できるが、0x80の付近が最も効果がある。 A00でこのエフェクトを無効にできる。
Bxy ループ/パターン中止 xy = 0 - パターンを即座に中止し、シーケンスの次の位置にジャンプする。 最初の行のB00は無視される。
xy > 0 - パターン内のy行目にジャンプして戻ることをx回繰り返す。
Bxyエフェクトはネストしない(つまり、Bxyループに中に別のBxyループを作ってはならない)。 もしそれを行うと無限ループとなる。 HT2はこれをチェックしていないので注意すること。
Cxx チャネル1 音程カット チャネル1の音程をxxカウント後にカットする。 このエフェクトは音の出力に小さなノイズを加える。
C00でこのエフェクトを無効にできる。
このエフェクトを使用すると、8xx(チャネル3音程テーブル実行)エフェクトが無効になる。
Dxx ドラムモード ドラムモードを設定する。 xxには0x00..0x4Fの値が入る。 詳細はドラムを参照すること。
Exx 拡張エフェクト 拡張されたエフェクトを適用する。 このエフェクトを使用すると、通常よりやや長い待ち時間がかかり、さらなる進行時のノイズが発生する。
Exx xx < 0x40 - エフェクトパターンxxの先頭から最大5のエフェクトを一度に適用する。 BxxとExxエフェクトは無視される。
E80 - エフェクトとグローバル変数をリセットしてデフォルトに戻す。
E81 - 上と同じだが、スピードをリセットしない。
E82 - 上と同じだが、スピードとデューティ比をリセットしない。
E83 - 上と同じだが、スピードとデューティ比、パン設定をリセットしない。
Fxx スピード設定 現在のスピードを設定する。 このコマンドは一時的にグローバルなスピード設定を上書きするが、恒久的な変更はない。 詳細はグローバル変数の全体スピードの項目を参照すること。
ヒント: 再生中にこのコマンドを入力する場合、初めにパラメータを入力し、その後にFコマンドを入力すること。



4.4. ロード、セーブ、バックアップ

セーブ

[ALPHA], [Y=]で現在の状態を保存する。 "SA"の文字がメッセージ欄に表示される。 ここで保存したいスロット番号(0..7)を入力し、確認に対して[.]を押す。 (押し間違いでこの状態になった場合は[0]を押してキャンセルする。)

保存に成功すると、エラーコードE0がメッセージ欄に表示される。 メモリ不足で保存に失敗すると、代わりにエラーコードE2が表示される。 メモリはすぐに足りなくなるので注意すること。 しかし、最低2つのスロットは常に使える。

未設定(--)の位置以降のデータは全て保存されない


ロード

[Y=]で保存された曲を読み込む。 "LD"の文字がメッセージ欄に表示される。
ここで保存されたスロット番号(0..7)を入力し、確認に対して[.]を押す。 (押し間違いでこの状態になった場合は[0]を押してキャンセルする。)
曲の読み込みにすると、エラーコードE5が表示され、選択したスロットは空になる。


スロットを削除する

メモリが足りなくなった、または別の理由で不要なスロットを削除したい場合は、スロットを指定して削除することができる。
[ALPHA], [WINDOW]を押すと、"DS"の文字がメッセージ欄に表示される。
ここで削除したいスロット番号(0..7)を入力し、確認に対して[.]を押す。 (押し間違いでこの状態になった場合は[0]を押してキャンセルする。)
これでスロットは削除される。


バックアップ

HT2の曲のバックアップは簡単である: 単にHT2のPRGMファイルをコンピュータや他の同機種の電卓に送信すればよい。 プログラムファイルには、全てのスロットとロードされた曲が含まれている。

 ht2utilを使うと、HT2 PRGMファイルのスロットに対して曲の取り出し/挿入を行うことができる。



4.5. エラーコード

エラーが発生すると、HT2はそれを特定し、エラーコードをメッセージ欄に表示する。 現在の曲のスロットへの保存に成功した場合もエラーメッセージが表示される。

次の表はエラーメッセージの一覧である:

コード 名称 説明
E0 保存成功 エラーが発生せずに保存に成功した。
E1 不正なブロック ブロックエンドがブロックスタートの前にある、またはブロックの挿入/貼付を選択中のブロック内で行おうとした。
E2 メモリ不足 実行(通常は保存)するための十分なRAMがない。
E3 不正なパターン シーケンスに不正なパターン番号を設定しようとした。
E4 不正なLP ループポイントが不正。ループする行が空。
E5 ファイルI/Oエラー 読み込みに失敗した。スロットが空か壊れている。
E6 保存エラー 保存されたもののバージョンが異なる、または壊れている。
E7 空きパターンなし 空きパターンを見つけられなかった。
E8 ブロックが大きすぎる 選択されたブロックが大きすぎて挿入できない。

軽微なエラー(存在しない音程を設定しようとした、パターン番号が範囲外など)の場合は、HT2は単に無視する。





5. ht2utilの使い方

ht2utilはPC上で動作するHoustonTracker 2の保存データマネージャアプリケーションである。 このソフトウェアでHT2バイナリに対して保存データの取り出し/挿入を行うことができる。

ht2utilはHT2と同時にリリースされたが、別々にメンテナンスされている。 ht2util gitで最新版を確認できる。


インストール

ht2utilはスタンドアローンアプリケーションで、インストールする必要はない。

Linuxユーザは、/ht2util-guiディレクトリで"make"してプログラムをソースからコンパイルする。 ht2utilはwxWidgets 2.8以上が必要で、先にインストールされている必要がある。 ほとんどのLinuxディストリビューションのリポジトリにはネイティブ実装のwxWidgetsが提供されている。


使い方

まずHT2プログラムファイルを読み込む。 空のht2.8*pでも、電卓からバックアップしたファイルでもよい。 ファイルの読み込みに成功すると、左側のパネルに保存されたデータの一覧が表示される。

データをインポートするためには、"File→Insert savestate..."を使う、または1つ以上のファイルを右(ファイルブラウザ)から左(保存データ)パネルへとドラッグする。 もし、取り出した保存データが古いバージョンのHT2のものならば、ht2utilは自動的にアップグレードする。 これは安定版のHT2ならば常に正常に行われるが(例外的に一部のエフェクト/設定は自動的に更新されない)、ベータ版の場合は稀に問題が発生する。

1つ以上のデータを削除するためには、保存データパネルの保存データをマークして、"File→Delete savestate"を使う、または単に"Delete"キーを押す。

1つ以上のデータを取り出すためには、保存データパネルの保存データをマークして、"File→Extract savestate..."を使って".ht2s"拡張子のファイルとして保存する。 保存データを保存データパネルからファイルブラウザパネルへドラッグしてもよい。 この場合、ファイル名は自動的に生成される。

さらに、取り出したファイルを.asmに変換できるが、これはHT2のソースを扱っていない限りは特に使い道はない。


ht2utilはまだエフェクトコマンドを自動的にアップデートできない。 もし古いバージョンのHT2の保存データをインポートしたならば、手動で調整しなければならない。 アップデートしなければならないコマンドはchangelogファイルを参照すること。





6. 謝辞とクレジット

次の人たちに感謝する...

... ベータテストについて TylerBarnes, Tronimal, garvalf, Flashbob, giako9000, nonfinite, そして Imaginary に
... 非標準な設定でのインストール手順の解析について Jankenpopp と unexpectedbowtie に
... HT2チャートシートの準備に関して更なる感謝を garvalf に
... その専門知識と助言について Shiru, introspec, そして Alone Coder に
... Brandon Wilson, Lionel Debroux, そしてTI電卓をハックし文書化した全ての人たちに

キーマップの説明の元となったTI-82の画像はMartin Olssonによるもので、ライセンスはGDFL/Creative Commons BY-SAである。




付録 A: ソースからビルドする

HT2の最新版のソースコードはgithub.com/utz82/HoustonTracker2にある。

HoustonTracker 2はLinux環境で開発されている。 もしLinuxやその他の*nix系の環境ならば、HT2のビルドは、いくつかのツールをインストールした後に、ビルドスクリプトを実行するだけである。 もしWindowsや他のPosix非準拠の環境ならば、自分自身でビルドスクリプトを書くか、手動でビルドしなければならない。

ビルドに必要なもの

Pasmoアセンブラ。必ずインストールしてパスを通さなければならない(ソースを他のアセンブラ用に移植しようとしない限り)。
• TI電卓エミュレータにインストールしたいかもしれない。*nixユーザならば、開発中バージョンのtilem2を推奨する。

ビルドスクリプトでビルドする (*nixの場合のみ)

ターミナルを開き、HT2のあるフォルダへ移動し、次のように入力する
./compile.sh -[model]
[model]には次の1つが入る

82TI-82用をビルドする
8pTI-82 Parcus用をビルドする
83TI-83, TI-82 Stats用をビルドする
8xTI-83 Plus, TI-84 Plus等用をビルドする
8xsTI-83 Plus, TI-84 Plus等用「軽量」バージョンをビルドする
all上記の全てをビルドする

さらに、ビルドスクリプトを実行させる前に音程テーブルをリビルドすることができる。 そのためには、tablegen.shシェルスクリプトを実行すること。 これでHT2をチューニングできる。

ビルドスクリプトで自動的にtilem2を起動するには、compile.shの次の行のコメントを外すこと:
tilem2 -a -r "/path/to/your/romfiles/xyz.rom" -m [model] [buildfile]


手動でビルドする

手動でのビルドは次の手順で行う:

1. 次のコマンドでソースをアセンブルする:
pasmo --equ MODEL=[model] --alocal main.asm main.bin
[model]には1 (TI-82用にビルド), 2 (TI-83用にビルド), 3 (Plusモデル用にビルド), 4 (TI-82 Parcus用にビルド)のいずれかが入る。

2. 出力結果のmain.binをパッカー(bin8x, oysterpac.pl等)を使ってTI実行形式(82p, 83p, 8xp)にパックする。





付録 B: データ形式

作業領域データ形式

HT2の作業領域には現在の曲が格納されている。 先頭のラベルは"musicData"で、サイズは5125バイトである。 アドレスはHT2のバージョンによって異なる。

オフセット長さ説明
+0byte全体スピード
+1wordユーザドラムポインタ
+3byteループポインタ
+41 KBパターンシーケンスリスト。各パターンは1バイトで、チャネル1, 2, 3, エフェクトの順に格納されている。空いている箇所は0xff。
+1028byteシーケンスリストの終端として0xFFが1バイト書き込まれている。
+10292 KB音程パターン。各パターンは無圧縮の16バイトで格納されている。空いている箇所は0x00。
+30772 KBエフェクトパターン。それぞれのパターンは無圧縮の32バイトで格納されている。空いている箇所は0x00。


圧縮された保存形式

HT2は極めて単純な圧縮方法で曲のデータを保存している。 配置は次の通りである:

オフセット長さ説明
+0byte全体スピード
+1wordユーザドラムポインタ
+3byteループポインタ
+4?パターンシーケンスリスト。各パターンは1バイトで、チャネル1, 2, 3, エフェクトの順に格納されている。
?byteシーケンスリストの終端として0xFFが1バイト書き込まれている。
??音程パターン。
もし X(1バイト) >= 0xE0 ならば、次の[X - 0xDF]個のパターンは空。
そうではなく、もし X >= 0xD0 ならば、次の[X - 0xCF]行は空。
そうではなく、もし X < 0xD0 ならば、Xは通常のパターン。
?byte音程パターン領域の終端として0xFFが1バイト書き込まれている。
??エフェクトパターン
エフェクトパターンはパターン番号から始まる。 パターン番号0xFFはエフェクトパターンが空であることを表す。
パターン番号の7ビット目がセットされていれば、最後のパターンであることを表している。 最後のパターンが0x3Fの場合の7ビット目は任意である。


保存データの開始と終了のアドレスは保存データテーブルに格納されている。




付録 C: 技術解説

この節では、HT2でどのようにしてマルチチャネルを実現したか、どのようにエフェクトをかけているかを説明する。


基礎

HT2における音のミキシングは、パルスインターリービングと呼ばれる1ビット合成の技術によって実現している。

量子化ビット数が1の場合、通常は1つの矩形波しか出力できない。 パルスインターリービングが行っているのは、複数のソフトウェアチャネルの高速切り替えによる走査である。 ハードウェアの遅れにより、スピーカーやヘッドホンのような出力デバイスはコーン紙の振動を出力する周波数に完全に合わせることができない。 その結果、コーン紙には完全に膨張した状態と完全に収縮した状態の中間の状態ができる。 この方法で4つのソフトウェアチャネルの合成に必要なボリュームレベルの生成を実現している。

4つ全てのチャネルのサンプルを走査するためにかかる平均時間は1/16300秒で、これは約65200Hzでチャネルの状態が切り替わっていることを意味する。 正確なタイミングは様々な要素、例えば出力する音程、エフェクトとドラムの設定、機種、バッテリー状態などに依存する。


音程チャネル

走査サイクル1回で、16ビットの定数(これを「周波数基底値」と呼ぶ)を16ビットカウンタに加算する。 そして、カウンタの上位バイトを閾値と比較する。 閾値がカウンタの上位バイトより大きければ出力を高(1)、そうでなければ低(0)にする。

閾値はデューティ比で決まる。 閾値が0x80ならば、出力状態は高が50%、低が50%になる。 仮に閾値が0x40ならば、25%:75%の比になる。

9xxエフェクト(チャネル3グリッチ)は周波数基底値の上位バイトを一定にローテートさせて実現している。 これと似たように、A01エフェクト(チャネル1ノイズ/グリッチ)はカウンタの上位バイトをローテートさせている。 これは周波数基底値によって擬似乱数が発生することがあり、それがノイズのようなエフェクトとなる。

D01エフェクト(デューティ比スイープ)は走査サイクル1回ごとに閾値を1増加させて実現している。 閾値は0xFFに達すると0に戻る。

ピッチスライドは走査サイクル1回ごとに周波数規定値に定数を加算して実現している。


ドラムチャネル

ドラムはROMとRAMの値から生成している。 読み取った値は8ビットカウンタとして解釈し、走査サイクル1回ごとに1減算させる。 カウンタが0になると、ドラムチャネルの出力状態を切り替え、ROM/RAMの次の値を読み取る。 読み取った値が0ならば、出力を止める。

ドラム0x1, 0xC, 0xDはRAMにハードコードされている。 「ユーザサンプルドラム」(ドラム0xE)は、実際にはエフェクトパターン0x20へのポインタである。 「ユーザドラムポインタ」(ドラム0xF)は、ユーザが定義したRAMまたはROMへのポインタである。 全てのROMへのポインタのドラムが機種によって音が異なるのはそのためである。

「ドラムモード」エフェクト(Cxx)は2つのことを行っている。 エフェクトパラメータの上位ニブルは、カウンタが戻った場合のROM/RAMポインタの進行方向を決める。 上位ニブルが0ならば、ポインタは前に進む。1ならば、後ろに進む。2または3ならば、ポインタの下位バイトのみが進む/戻る。 つまりポインタは256バイトのメモリページ内に留まる。 4ならば、ポインタは動かない。

エフェクトパラメータの下位ニブルは、値がメモリから読まれた後にどのように操作されるかを決める。 操作方法は次の通りである:

 値 操作
0x0何もしない
0x1BCDに変換する
0x22を掛ける
0x32で割る
0x41の補数を求める
0x5ポインタの下位バイトを値とする
0x6ポインタの下位バイトを加算する
0x7ポインタの上位バイトを加算する
0x8ポインタの上位バイトを減算する
0x9ポインタの下位バイトを減算する
0xAポインタの上位バイトとの論理積を求める
0xBポインタの下位バイトとの論理積を求める
0xCポインタの上位バイトとの論理和を求める
0xDポインタの下位バイトとの論理和を求める
0xEポインタの上位バイトとの排他的論理和を求める
0xFポインタの下位バイトとの排他的論理和を求める


いくつかのドラムモードでは、データが0でも音を生成する。 メモリから読み込んだ値が0であるかチェックする前にこれらの操作を行うためである。




付録 D: トラブルシューティング

Windows版TiLPのインストール/設定で問題が発生する

TiLPをVista/7/8/10でインストール/実行しようとするとエラーが発生する
改善されたWin32 readmeをチェックすること。 よくある問題の解決方法はここにある。 もし解決しなければ、1-bit forumに立ち寄れば我々が手助けするだろう。

TiLPがWindows XPを拒否する
TiLP2 1.17以降はWindows XPは対象外である。より古いバージョンを使うこと。

TiLPがGTK+インストーラーの取得に失敗する
GTK+ packageから手動でインストールする必要がある。 その場合、TiLPインストーラーのGTK+インストールチェックボックスのチェックを外すこと。

TI-82が自動検出されない
それで正常である。デバイス設定を手動で設定すること。



WindowsでGrayLinkを設定するには?

#1 = graylinkドライバをインストールする
- コンピュータを起動する。リンクデバイスは挿さない
- もしgraylinkケーブルがPL2303TAならば、このUSBシリアルドライバが必要となる(他では動作しない)
- リンクデバイスを挿し、デバイスマネージャを確認する。全て正常ならば、COMポートを1, 2, 3, 4のいずれかにする。4を超えると動作しない
- リンクデバイスを抜く
- コンピュータを再起動する

#2 = TILP2をインストールする
- リンクデバイスは挿さない
- まずGTK+ 2.12.9-win32をインストールする
- 次にTiLPをインストールする (既にGTK+がインストールされているので、GTK+インストールのチェックは外す)
- リンクデバイスを挿す
- TILPを開き、 CTRL+Dで接続パラメータを設定する:
   cable → graylink
   port → #1で設定したCOMポート
   calc →あなたの機種 (TI82)
- OKをクリックする

TIから(リンクモードで)プログラムを送信しようとすると、TILPは自動的にファイルの保存先を訪ねてくる。 これで正常にリンクできたことが確認できる。

この問題の解決方法を考えたjankenpoppに感謝する。



OS XにTiLPをインストールする方法がわからない

TiLPをインストールする簡単な方法はMacPortsを使うことである。 MacPortsを設定した後、TiLPを次のコマンドでインストールできる。
[sudo] port install tilp2
この解決方法を考えたunexpectedbowtieに感謝する!

別の方法として、公式のTI-Connectリンクソフトウェアを使うこともできる。 しかし、TI-ConnectはTI82には完全には対応しておらず、HT2をアップロードできない。 さらに別の方法として、仮想マシンでLinuxを起動し、そこでTiLPを使うこともできる。



TI-ConnectでTI82に転送できない

SilverLink USBケーブルを使っている?
残念ながらその場合はTI-Connectは使えない。

シリアルまたはパラレルケーブルを使っている?
TI-ConnectにはCrASHの名前変換の問題がある。 対処法の1つは
- エミュレータをインストールして、あなたの電卓と同じROMバージョンを使ってTI82をエミュレートする
- CrASHとHT2をエミュレータにインストールする
- エミュレータからTI82のバックアップファイル(.82b)をダンプする
これで.82bファイルをTI-Connectを使ってTI82の実機にアップロードできる。




eof.