ローカル音源で譜面を作る
最初のリリースでは、ローカル音源、単一オブジェクトの譜面編集、タイミング、表示のプレビュー、ブラウザー内のバージョン管理、持ち運べる書き出しを提供します。まず小さな完全なサンプルから始め、音源や譜面を自分のファイルに差し替えてください。
1. 完全なスターターを開く
Section titled “1. 完全なスターターを開く”- local-demo.zip をダウンロードします。
- 作成ツールを開きます。
- バックアップを開く をクリックし、この ZIP をそのまま選びます。展開するフォルダーのアーカイブではなく、作成ツールのネイティブなバックアップです。
- Local audio starter(オリジナルの 120 BPM のクリック音 8 秒と、編集できるノーツ 3 つ)が表示されるまで待ちます。
- プレビューの 再生 をクリックし、同じボタンで一時停止します。編集用キャンバスは実際の音声クロックで動きます。このプレビューはノーツを表示するだけで、判定やスコア計算はしません。
バックアップを読み込むと新しいローカルプロジェクトが作られ、以前に保存したプロジェクトはそのまま残ります。
2. JSON と音源を別々に選ぶ
Section titled “2. JSON と音源を別々に選ぶ”Haneoka-120bpm.wav と local-demo.project.json を同じフォルダーに保存します。
my-chart/ Haneoka-120bpm.wav local-demo.project.json- ローカル音源を読み込む をクリックして WAV を選び、名前と長さが表示されるまで待ちます。
- ローカル譜面を読み込む をクリックして Project JSON を選びます。
- 再生 をクリックして 3 つのノーツを確認します。JSON には編集できる Project のデータが入っており、音源は別に選びます。
- ページを閉じる前や元データを差し替える前に バージョンを保存 をクリックします。
音源はブラウザーでデコードできる形式で、32 MiB、600 秒、8 チャンネル までです。元のエンコード済みファイルが保存され、デコードした PCM は一時的なものです。波形の解析で BPM の候補を最大 3 つローカルで提示し、選ぶとそれが適用されます。必要なら BPM を自分で入力してください。半分や倍のテンポの候補が同じリズムを表すこともあります。
譜面の読み込みは Project JSON、Our Notes/SS JSON、USC v2、SUS テキスト に対応し、2 MiB までです。Sonolus の LevelData は配信用の形式で、編集できる Project の入力ではありません。Cassiopeia のチュートリアルの再生用 ChartDocument も別の形式です。この作成ツールでは用意した Project JSON を使います。
3. ノーツを置いて確かめる
Section titled “3. ノーツを置いて確かめる”Tap、Flick、Trace のいずれかを選び、編集グリッドをクリックします。既定の座標の基準は 24 で、幅 4 のグループ 6 つとして表示されます。Hold と Guide は始点を置いたあとに、より後ろの終点が必要です。Escape で置きかけの終点を取り消せます。
選択ツールでノーツや線の点を選びます。拍、レーン、幅、種類、クリティカル、表示を編集できます。Flick には左・上・右の向きがあり、線の点には左右のイージングもあります。削除ツールは当たった単体のノーツ、またはそのつながり全体を消します。選んだ線の点をコピーするとつながり全体がコピーされます。貼り付けは現在の再生位置に新しい ID で挿入します。
| 操作 | 既定値 / 使える値 | 用途 |
|---|---|---|
| ツール | Tap / 選択、tap、flick、trace、hold、guide、削除、パン | 選択、配置、削除、表示の移動。 |
| スナップ | 1/4 / 1/1、1/2、1/3、1/4、1/6、1/8、1/12、1/16 | 配置・貼り付けの音楽的な分割。 |
| 表示する時間 | 4 秒 / .5、1、2、4、8、16 秒とホイールで決まる値 | 表示のズーム。作ったタイミングは保たれる。 |
| 再生速度 | 1× / .25、.5、.75、1、1.25、1.5、2× | 音声プレビューの速度。 |
| 新規クリティカル | false | 新しいノーツの既定のフラグ。 |
| 新規 Flick の向き | 上 / 左、上、右 | 新しい Flick ノーツの既定。 |
| 挿入レーン | 0、表示範囲内に収める | ボタンで現在の再生位置にノーツを追加する。 |
| 開始 BPM | 120、有限の正の数 | プロジェクトの最初のテンポ。候補が変えるのはこのイベントだけ。 |
| 音源オフセット | 0、有限の秒数 | 音楽上の時刻 0 に加える秒数。 |
プロジェクトではタイトル、アーティスト、譜面作者、開始 BPM、音源オフセットを編集します。BPM を追加 は現在のスナップ位置に挿入し、同じティックの重複は拒否します。タイムスケールは正のスクロール倍率のイベントを追加します。JSON は拍子のイベントと元データの拡張を保持します。
ホイールで時間方向に移動し、Ctrl/Command+ホイールでポインター位置の時刻を中心にズームし、パンで表示をドラッグします。再生位置へ移動は音楽に追従し、拍のフィールドでプレビューをシークします。これらの操作は作ったタイミングを変えません。
4. 保存、復元、書き出し
Section titled “4. 保存、復元、書き出し”バージョンを保存 で編集を保存します。保存した譜面 でローカルのプロジェクトを開き直し、バージョン でスナップショットを復元します。古いバージョンからの編集を保存すると、増えていくローカル履歴に新しいバージョンができます。保存済みのプロジェクトを切り替える前や書き出す前に、ワークスペースは未保存の譜面を保存します。
音源とバージョンはこのブラウザーの IndexedDB にあります。サイトのストレージを消去するとローカルのライブラリも消えるため、書き出したバックアップを残してください。別のタブで新しく保存すると衝突になります。保存済みのプロジェクトを開き直すか、コピーを保存 で現在の下書きを別に残してください。
| ダウンロード | 内容 |
|---|---|
| バックアップ ZIP | 元の譜面、現在のスナップショット、任意の元テキスト、SHA-256 で管理する元と現在のエンコード済み音源。バックアップを開く で読み込める。ローカルの全変更履歴はブラウザーに残る。 |
| Haneoka Project JSON | 拡張とマーカーを含む、編集できる完全な譜面。音源は別ファイルのまま。 |
| Our Notes/SS または USC v2 | 変換した譜面 JSON。表示される形式の警告に、省いた・正規化したフィールドが並ぶ。続けて作るときは Project かバックアップを残す。 |
最初のリリースでは SUS は読み込みのみです。バックアップには JSON(YAML 1.2 として有効)を入れた project.yaml と、最大 2 つの audio/<sha256> のエントリーが入ります。読み込み時に譜面、エンベロープ、音源のハッシュを検証します。4 MiB のマニフェストと 32 MiB の音源 2 つの予算に収まるのは最大 3 エントリーです。バックアップは作成ツールの書き出しで作ってください。
Project JSON の全フィールド
Section titled “Project JSON の全フィールド”サンプルには必須フィールドがすべて入っています。version 1、resolution 480、laneBasis 24 です。1 拍は 480 ティックで、120 BPM ではティック 480 の最初のノーツが 0.5 秒の位置になります。
| フィールド | 型 / 制約 |
|---|---|
| version / resolution | リテラル 1 / 480。 |
| laneBasis | 有限の正の数、既定は 24。元の形式では別の基準が残ることがある。 |
| meta | 必須の文字列 title/artist/charter/difficulty/level。任意で source:string、tags:string、extra:JSON オブジェクト。 |
| audioOffset | 有限の秒数。 |
| tempos | 空でない {id,tick,bpm}[]。重複しない 0 以上の安全な整数のティック、ティック 0 のイベント、有限の正の BPM。 |
| meters | 空でない {id,tick,numerator,denominator}[]。正の安全な整数の分子、2 の正のべき乗の分母、重複しない 0 以上のティック。 |
| timeScales | {id,tick,scale}[]。重複しない 0 以上の安全な整数のティック、有限の正の倍率。 |
| singles | 下記の単体ノーツの配列。 |
| lines | `{id,kind:“long” |
| markers | {skill:number[],fever:[number,number][],call:{tick:number,timing:number[]}[]}。0 以上の安全な整数のティック、有限のコールのタイミング値。 |
| extensions | 元の形式固有のデータを入れる必須の JSON オブジェクト。 |
| sourceOrder | 元のオブジェクトの順序を表す任意の string[]。 |
各ノーツは、重複しない空でない id、0 以上の安全な整数の tick、有限の lane、0 以上の有限の size、type:"tap"|"flick"|"trace"、真偽値の critical/visible、none/left/up/right の向きを持ちます。Tap の向きは none です。ID はノーツ、つながり、タイミングのイベント全体で重複しません。ステージ外の範囲は警告になり、作った値はそのまま残ります。
線の点には ease:{left:"linear"|"in"|"out",right:"linear"|"in"|"out"} が加わります。レーンは "auto" にでき、任意の resolvedLane/resolvedSize/autoSize が取り込んだ補間データを保持します。完全なサンプルから始めてください。検証で不正なフィールドがわかります。
ショートカットと復旧
Section titled “ショートカットと復旧”キャンバスにフォーカスがあるとき、Ctrl/Command+S で保存、Ctrl/Command+Z で取り消し、Ctrl/Command+Shift+Z または Ctrl/Command+Y でやり直し、Ctrl/Command+C/V でコピー・貼り付けです。Delete/Backspace で削除、Space で再生・一時停止、Escape で選択や置きかけの終点を解除、1〜7 で選択・tap・flick・trace・hold・guide・削除を選び、上下キーで編集範囲を動かします。テキストや Material の入力欄では通常のキー操作のままです。
音源のエラーでは、小さな WAV を試し、制限を確認し、ブラウザーが対応するコーデックを選んでください。音源やハッシュが見つからないエラーには、完全に書き出したバックアップが必要です。ストレージの衝突やデータベースへのアクセスがブロックされた場合はほかのタブを閉じてください。ストレージを空ける前にはバックアップを書き出してください。この最初の段階はローカルでの単一オブジェクトの作成と表示のプレビューまでで、高度な編集や元のプラットフォーム・公開との連携は別に段階的に提供します。