Giter Club home page Giter Club logo

danoni-editor's Introduction

Dancing☆Onigiri エディター(CW Edition 対応)

サイト: https://superkuppabros.github.io/danoni-editor/

Vue.js + TypeScript 製の Dancing☆Onigiri エディターです。
Google Chrome にて動作を確認しています。
必要な機能については順次実装していきます。

既知のバグについては Issue をご覧ください。 その他のバグ報告は issue, PR か Twitter(@superkuppabros)までお願いします。

バージョン

過去のバージョンはこちら

ver 3.3.0

機能改善

  • 同一キーで表示レーンをショートカットで切替できるように ( thanks: @cwtickle )
    • Ctrl + Q で切替可能
    • 標準搭載は5key(3種)と11W(2種)
    • カスタムキー定義で直接指定も可能: #113 (comment)
  • テンキーで入力間隔の変更ができるように

バグ修正

  • Start Numberが絶対値の大きい負の値のとき音楽再生がエラーになる問題の修正 ( thanks: @suzme )
  • エディタ定義が入っていない状態でセーブデータを読み込むとエディタが落ちる問題の修正
  • ページカットを連打した場合にエディター画面が消滅する問題の修正

ver 3.2.0

機能改善

  • 17keyを青が上になるように
  • ページごとの拍子数を変更出来るように
  • 四分譜面のパターンを設定できるように
  • オンラインセーブ時の挙動改善

バグ修正

  • 音楽の再生速度を変更するたびに再生が始まってしまう問題の修正 ( thanks: @suzme )
  • 5key以外で空の譜面のセーブデータをロードした時に譜面データが壊れる問題の修正

その他

  • 使用しているライブラリのアップデート
    • これにより意図しないバグが含まれる可能性があるため、発見したらご報告いただけると助かります。

ver 3.1.7

バグ修正

  • 音楽再生周りの不具合解消 ( thanks: @suzme )

ver 3.1.6

機能改善

  • ボリュームと再生速度を即時反映する ( thanks: @suzme )

バグ修正

  • ページ端での同時押し入力時に不正な場所にノートが置かれてしまう場合がある不具合の修正 ( thanks: @suzme )
  • ページ送りが二重になることがある問題の修正

ver 3.1.5

バグ修正

  • 速度変化コマの表示が1から変化しなかった問題の修正

ver 3.1.4

機能改善

  • Web Audio APIの利用
    • 楽曲再生時のズレが軽減
    • 低速再生が滑らかに
      • 代わりにピッチが速度に依存する(低くなる)
  • 譜面データからの復元時の補正の改善
    • 操作できないノーツに置かれる問題の修正
    • 16分系統に寄せた補正が実行される

ver 3.1.3

機能改善

  • 起動画面の改善 ( thanks: @suzme )
    • Ctrl + Vで譜面データを入れられるように
    • js, htmlファイルを譜面データとして受け付けるように
  • undo(元に戻す)の挙動を改善
  • その他細かい挙動等の改善、修正

ver 3.1.2

バグ修正

  • ページ終端で同時押し入力できないことがある問題の修正 ( thanks: @suzme )

ver 3.1.1

機能改善

  • 同時にキー入力した場合に同行に配置されるように ( thanks: @suzme )
    • CONFIGのsimultaneous thresholdで許容ms範囲を変更できます(-1で無効)

ver 3.1.0

機能改善

  • オンラインセーブ・ロード時のパスの履歴を保存するように
  • 音量設定をローカルに保存して引き継ぐように
  • エディタの方向を下向きにしている際のB・Spaceキーの挙動を変更

使い方

開発者向け

CSS フレームワーク: UIkit (https://getuikit.com/)
Canvas 操作: Konva.js (https://konvajs.org/)

プロジェクトスタート

npm install

ローカルサーバ起動

npm run serve

ビルド

npm run build

danoni-editor's People

Contributors

superkuppabros avatar dependabot[bot] avatar suzme avatar cwtickle avatar

Stargazers

 avatar TEN-A avatar  avatar satsukizzz avatar  avatar  avatar

Watchers

 avatar

Forkers

cwtickle suzme

danoni-editor's Issues

[others] Wikiの活用

要望内容

  • 機能追加ではないのですが、readmeの記載が増えてきたので
    Github Wikiを活用しても良いのではと思いました。
  • オプショナルな機能の活用法やセーブデータの出力仕様など、
    readmeに書ききれない内容をTipsとしてまとめるようにします。

補足

  • Settingsにある「Restrict editing to collaborators only」のチェックを外せば、
    所有者以外でもWikiの編集ができます。
    ※ページ作成用のテンプレートがあった方がいいかもしれません。

[proposed] セーブファイル内のデータを参照して自動でキー数を設定

要望内容

  1. タイトル画面でキー数を設定しなくても、
    セーブファイル内のデータを参照して、自動でキー数を設定できるようにしたいです。
    (セーブファイル内のデータを優先)

機能を必要とする理由

  1. タイトル画面が常時5keyになっているため、
    5key以外の譜面を作成する場合には毎回キー数を選択し直す必要があります。
    その間違いを軽減することが目的です。

補足

  • 途中でキー数を変更したい場合にどうかな?と思いましたが
    それは今後、レーンコピーなどが実装された後に考えるべきかなと思ったので
    一旦はセーブデータのキー数を優先する方向で良いと思います。

node-canvasの導入が大変なので変えたい

devDependenciesにcanvasが入っていますが、インストール時にいろいろ導入しないといけないのがちょっと大変です。
以前はnpm installだけで入ったと思うのですが(たまたま導入済だっただけ?)

コンパイル不要で動く@napi-rs/canvasという代替があるので、これを使うのがよさそうです。
↓こんな感じでよいはず

npm uninstall canvas
npm i -D @napi-rs/canvas
npm i -D canvas@npm:@napi-rs/canvas

参考:ネイティブモジュールに依存しない node-canvas 代替ライブラリを使う - mizdra's blog

テスト通るのは確認しましたが、いろいろ落ち着いてからのほうがいいと思うので一旦issueにします。

[proposed] 初回エディター画面表示時の挙動改善

要望内容

  • タイトル画面とエディター画面のページが異なるため、現状は画面が移った際にノート表示エリアにフォーカスが当たらず、一度クリックが必要となっています。
    これを改善したいです。

改善案

  1. エディター画面移動後のみ、ノート配置エリア(Start Numberやページ移動ボタンなどが配置されているエリアは除きます)に半透明の黒マスク(ボタン)を掛け、「ここをクリックして開始します」といった文言を表示するようにします。
    黒マスクをクリックすると、マスクが外されてノート配置エリアにフォーカスが当たる仕組みにします。

  2. エディター画面移動後、自動でノート配置エリア側のフォーカスを有効にします。

機能を必要とする理由

  • エディター画面移動後、クリックが必要なことが示されていないため、画面移動時にキー操作を始めてしまい反応しない、といったことがたまにあります。

補足

  • 改善案を2つ書いていますが、個人的には前者の案が良いと思います。

楽曲再生タイミングがFirst Numberをずらした分ずれて再生される

不具合内容

  1. 初期の状態の場合、楽曲が200フレームで開始するようになっています。
    しかし、開始位置に応じてFirst Numberを変えた状態で楽曲を再生すると
    楽曲がFirst Numberをずらした分ずれて再生されます。

本来想定される動作

  1. First Numberの変更により、楽曲の再生タイミングが変わらないようにする。
    ※BPMを途中で変更する場合はFirst Numberが複数になるので、
     最初のFirst Numberのみ別で持っておくといった対応が必要になると思いました。

確認環境

  • エディターバージョン:2.00β
  • 確認したキー数:12key
  • Windows 10 (x64) 1909、Chrome 85 (beta)

[proposed] 譜面復元データ(セーブデータ復元用基礎データ)の出力

要望内容

  • セーブデータを紛失することがあるため、
    譜面データと合わせて、復元できる最小限のデータを出力できるようにしたいです。
  • 譜面データと一体化させることで、後々の譜面復元に役立てます。

参考

  • エディター特性があるので、下記にする必要はないのですが、
    Cross Walkerのエディター(Flash製)で出力している例です。
&first_num=770,1770&haba_num=10,8&haba_page_num=0,3&rhythm_num=&label_num=0&beat_num=4&
  • 現在のエディター仕様であれば、以下の項目の保持が考えられます。
    (例:キー数、StartNumber、BPM、StartNumber/BPMを変更したページ)

機能を必要とする理由

  • ダンおにの場合、譜面データはオブジェクトのタイミングをフレーム数で示しているだけにすぎず、
    BPM変化した場合、譜面データから逆算してセーブデータを再現することが難しいため。

[proposed] Start Number -> First Numberに戻す

要望内容

  1. Ver2.1.0βで実装されているStart Numberについて、
    Ver2.0.0β以前のFirst Number(=Adjustment+Start Number)に戻した方が良いと思いました。

機能を必要とする理由

  1. StartNumberの値はあくまで楽曲再生用の都合でできた情報であり、
    譜面として計算するときはFirst Numberで問題ないため。
    また、現時点のフレーム数情報が2系統になることで複雑になることを懸念しています。
    ※先のAdjustmentに相当する値は楽曲再生機能の観点から保持すべきだと思います。

クリックモードの導入

ノーツぽちぽちするのをクリックでも出来ると嬉しいかも。
特にスマホでできそうなのが偉い。

ページ操作機能対応

ページ操作の機能を追加する。

BackSpace: 現在の行を削除
Ctrl + (X, C, V): カット、コピー、ペースト
Ctrl + 上下: 現在行のノーツを上下にずらす

Undo、Redoは導入しない。

4分譜面の作成機能

要望内容

  1. 現在設定されているFirstNumberとBPM設定に応じて、4分譜面を作成できる機能が欲しいです。
    出力する小節数は別途指定できるようにします。

機能を必要とする理由

  1. ダンおに本体とエディターが異なるため、
    タイミングを測るために4分譜面を作成することが多いです。
    他のダンおにエディターでも標準実装しているため、Issueとして上げておきます。

補足

  • 欲を言えば、譜面が置かれている範囲は譜面を、それ以外の範囲は4分譜面を出力してマージできるようにするとより良いと思います。(優先度は低め)

EditorMainの分割

巨大化し続けているので、適当な単位で別ファイルに分割したい。

[proposed] 対応キーの画面表示

要望内容

  • キー別にノート入力が異なるので、
    画面下側に対応キーを表示できるようにした方が良いかもしれません。

スクリーンショット

image

機能を必要とする理由

  • 矢印キーなど、割り当てできないキーには別キーが割り当てられており、
    直感的にわからない可能性があるため。

補足

  • 代替キーの表示は「8 (9)」みたいに表示できると良さそうです。

ヘルプボタンを作る

データ構造が複雑になってきたのでメニューにヘルプ欄がいるかもしれない。

譜面読み込み部分のチェック

現在はJSONとして正かしか確かめていないので、JSONとしては正しいが譜面データとしては誤っているものを投げても読み込んでしまう。

[bug?] オンラインセーブが完了するまでの時間が長い

不具合内容

  • 「Save」でキーフレーズを入れて「OK」を押した後に
    セーブ完了メッセージが返ってくるまでの時間が長くなっているように感じます。
    いつ頃からかは不明ですが、少なくともver3.1.7で起きています。
  • 一度キーフレーズを空にしてクリップボードコピーしたときは問題ありません。
    また、クリップボードコピーした後に「Save」からキーフレーズを入れて「OK」を押した場合は
    速度的に問題ないようです。初回ロード時のみ発生するように感じます。

本来想定される動作

  • キーフレーズの可否によらず、セーブ完了メッセージが瞬時に返ってくる。

確認環境

エディターバージョン:3.1.7
確認したキー数:12key
Windows 11 (x64) 、Chrome 103.0.5060.13(Official Build)dev (64 ビット)

[proposed] Adjustmentの名称変更

要望内容

  • Ver2.1.0βで実装されているAdjustmentの名称について、
    使用用途を考慮して「BlankFrame (Number)」に変えた方が良いと思います。

機能を必要とする理由

  • 譜面ヘッダー名で同じ名称があり(adjustment)、それと混同が生じるため。
  • 使ってみた感触だと、音楽が再生されるまでのフレーム数に見えたので、
    名称としては「BlankFrame」が合うと思いました。(譜面ヘッダー名とも合致します)

補足

[proposed] LocalStorageにリカバリーデータを保存する機能

要望内容

  • [GO]ボタンを押した後、譜面データをクリップボードにコピーするのと同時に、
    バックグラウンドでLocalStorageにセーブデータを保存しておくようにしたいです。

機能を必要とする理由

  • 何らかの事情でブラウザが落ちたとき、[SAVE]ボタンを押し忘れたときの復旧手段として準備します。

補足

  • バックグラウンドで保存したデータをどのようにロードさせるかは別途考える必要があります。
  • できるなら、3世代程度残せるようにした方が良いかもしれません。

[proposed] 時間軸に対するスクロール方向の制御オプション

要望内容

  • 現状、エディターの時間軸に対するスクロール方向が下から上になるようになっていますが、
    オプションにより、時間軸方向を逆にできるようにしたいです。

機能を必要とする理由

  • 従来のダンおにのエディターの時間軸に対するスクロール方向は逆になっています。
    今後このエディターを使う方や、合作でこのエディターを共用する場合に
    混乱が生じないようにするのが理由です。

補足

  • エディターの見た目と裏で持っている値を使い分ける必要がありそうなので
    簡単ではないのは理解していますが、
    多分自分が上げなくても他の人がリクエストしそうな内容なので上げておきます。

[proposed] 現位置のフレーム数・時間、小節番号表示

要望内容

  1. 現在選択位置(ページ先頭)のフレーム数と時間、小節番号を表示して欲しいです。
    ※下記のようなイメージです。
    image

  2. 現在設定中の入力間隔(8分、16分、32分、・・・)と1間隔あたりのフレーム数(小数点1桁まで)を表示して欲しいです。

機能を必要とする理由

  1. ダンおに(CW Edition)では色変化、歌詞表示等を行う際、変化点のフレーム数が必要です。
    その際に、どの位置に置けばいいかのフレーム数があると助かります。
    また譜面ズレがあったり、演出タイミングの違和感を見るのに
    プレイ上では時間表示(3:50など)しかないため、
    フレーム数と合わせて時間表示があった方が利便性が高くなると思います。

  2. 4分、8分、16分なら視覚的にわかるのですが、
    24分、32分と細かくなってくると随時切り替えながら譜面を作成することがあるため、
    現在どの間隔になっているかわかるとわかりやすいのではと思いました。

[proposed] 4分譜面出力(Test)時の対象レーン制御

要望内容

  • 4分譜面出力(Test)時、現状は一番左のレーンに対して4分譜面を作成していますが、
    別のレーンに出せるようにしたいです。
  • Option Settingで対象レーンを数字で指定するイメージです。(左からn番目)

機能を必要とする理由

  • キーによっては一番左が押しにくい位置にある場合があり、
    一時的にキーコンやリバースすればいいのかもしれませんが手間に感じるときがあるため。

参考

  • 参考に旧Flash版のエディターの機能イメージを載せます。
    繰り返しパターンはBPMが速いときに使っていましたが、優先度としては落としても問題ありません。

[proposed] 譜面ファイルの名称変更

要望内容

  1. タイトル画面に表示されている「譜面ファイルをドロップ」について、
    実際にはエディターのロード用テキストデータのため、
    「エディター用テキスト」や「セーブファイル」など適切な名前に変えた方が良いと思います。

機能を必要とする理由(名称変更理由)

  1. ダンおにで譜面ファイルと言えば「dos.txt」のような譜面データ本体を指すため。

独自操作設定

打ち込むキーや色を設定できるようにする。
現在はKeyConfig.tsDefaultKeyConfigで管理しているが、これをWebStorageあたりで独自管理できると良さそう。
画面も別途必要。

音楽再生機能対応

音楽再生機能
ぽっつべのエディタと同様にページ内で音楽を再生する機能を作る

Enterで再生、停止させる。
再生位置を表す線を描画し、動くようにする。
ページが移動しても再生、停止状態は保持する。

[proposed] 小節(ページ)の途中挿入

要望内容

  • 小節(ページ)を間に挿入したり、カットして詰める機能が欲しいです。

機能を必要とする理由

  • 細かいBPM変化があり、途中に挟む必要が出てきたときに、
    間に小節やページを挿入できるようにした方が便利だと思います。

補足

  • カットして詰める場合、途中にノートがある場合は警告を入れた方が親切かもしれません。

エディタ定義が入っていない状態でセーブデータを読み込むとエディタが落ちる

期待される挙動

  • エディタ定義が入っていない状態でセーブデータ(オンラインセーブ、クリップボード)を読み込むと、エラー文が出力される
    • xxxkeyのキー定義が登録されていません など

実際の挙動

  • エディタ定義が入っていない状態でセーブデータ(オンラインセーブ、クリップボード)を読み込むと、エディタが落ちる(表示されなくなる)
  • keyConfig[keyKind]がundefinedなのでエラーが出ているっぽい
    image
    image
    image

再現手順

  • 手元で簡単に再現できるので21ikeyを使っていますが21iであることに特に意味はないです、21i以外でも起こりました
  • 21iのキー定義が入っていない状態にする
  • 以下のセーブデータを読み込む(オンラインセーブ、クリップボード両方NGでした)
{"blankFrame":200,"timings":[{"label":1,"startNum":0,"bpm":140}],"scoreNumber":1,"scores":[{"speeds":[],"notes":[[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0],[0]],"freezes":[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]}],"keyKind":"21i"}

環境

  • Win11 vivaldi 6.4.3160.47 (Stable channel) (64-bit)
  • Edge(バージョン 119.0.2151.93 (公式ビルド) (64 ビット))でも確認

[bug] StartNum, Adjustmentがどちらも有効な場合にフレーム数計算がおかしくなる

不具合内容

  1. StartNum, Adjustmentがどちらも0より大きい場合、フレーム数計算が
    文字列結合されたような挙動になります。
    #17 の修正の中で、adjustmentとtiming.startNumを足し算している箇所
    (ScoreConverter.ts)が怪しそうです。

参考セーブデータ

{"keyNum":12,"adjustment":"200","timings":[{"label":1,"startNum":"51","bpm":140}],"scores":[{"keyNum":12,"notes":[[192],[],[],[],[],[],[],[192],[],[],[],[]],"freezes":[[],[],[],[],[],[],[],[],[],[],[],[]],"speeds":[]},{"keyNum":12,"notes":[[192],[0],[],[],[],[192],[],[],[],[],[],[]],"freezes":[[],[],[],[],[],[],[],[],[],[],[],[]],"speeds":[]},{"keyNum":12,"notes":[[],[],[],[0],[],[192],[],[192],[],[],[],[]],"freezes":[[],[],[],[],[],[],[],[],[],[],[],[]],"speeds":[]},{"keyNum":12,"notes":[[192],[0],[],[],[],[192],[],[],[],[],[],[]],"freezes":[[],[],[],[],[],[],[],[],[],[],[],[]],"speeds":[]},{"keyNum":12,"notes":[[144],[192],[],[0],[],[96],[],[],[],[],[],[]],"freezes":[[],[],[],[],[],[],[],[],[],[],[],[]],"speeds":[]}]}

本来想定される動作

  1. StartNum, Adjustmentの値によらず、数値と扱われて計算される。

確認環境

エディターバージョン:2.1.0β
確認したキー数:12key
Windows 10 (x64) 1909、Chrome 85 (beta)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.