楽器の練習や何かの暗記に使えそうなソフト

自分で作ったゲームや動画、面白いネタをみんなに宣伝しましょう!
また、気軽に作品の感想をコメントで残してあげて下さい。
Rom
記事: 25
登録日時: 7年前
住所: 日本

楽器の練習や何かの暗記に使えそうなソフト

#1

投稿記事 by Rom » 4年前

タイトルの通りです作ってみました
ソースも同梱してます

CPU使用率がやや高くなりますが多分正常な動作です
DXライブラリでやったせいです
ゲームではないのでホントはC#とかで作るべきなのでしょう

このような機能を持ったフリーソフトが見つからなかったので作りました

ダウンロード


使い方は添付の画像を見るだけでもなんとなくわかると思います
画像の左側にあるEmと書いているスペースにコードや暗記したい単語などを表示させられます
添付ファイル
pmusic1.gif
スクショ
pmusic1.gif (17.31 KiB) 閲覧数: 2618 回

アバター
みけCAT
記事: 6013
登録日時: 7年前
住所: 千葉県
連絡を取る:

Re: 楽器の練習や何かの暗記に使えそうなソフト

#2

投稿記事 by みけCAT » 4年前

ちょっといじってみました。
テンポや拍数をどんどん上げていくと、枠をはみ出してしまったので、上限を設けたほうがいいと思います。
Pmusic_test1.png
テンポを上げるテスト
Pmusic_test1.png (53.35 KiB) 閲覧数: 2515 回
Pmusic_test2.png
拍数を上げるテスト
このテンポ111119、11113拍の設定では、スタートすると数字が勢いよくカウントダウンしていきましたが、
時々止まっていました。特に後半、数字が小さいほど止まる間隔が短くなるようでした。
数字のカウントダウンが止まると、Amなどが表示され始めました。(仕様ですね)

また、テンポを逆に下げると、0では音が聞こえませんでしたが、-1以下にすると爆速で音が鳴り始めました。
テンポの下限も設けるべきだと思います。
Pmusic_test3.png
テンポを下げるテスト
再生中に拍数を切り替えられない、という仕様に戸惑いました。
今使用できないボタンはグレーなどで表示し、無効だとわかるようにすると親切だと思います。

今後の発展のために(?)、アイコンやバージョン情報(リソースを使い、プロパティで表示できるもの)をつけてみるのもいいと思います。

タイトルが表示されている部分とスタート/ストップボタンの間のスペースに役割はあるのでしょうか?

UIが「ランダム/順番」なのに対しディレクトリ名が「random/list」なのは対応がおかしい気がするので、
listをsequentialにしてはどうでしょうか?

10000件のデータをlist\8.txtに書いた状態で起動すると、真っ白な画面がしばらく続いていました。(CPU使用率は2%程度)
右上の×ボタンを押すと、強制終了になりました。
「あんまり個数が増えすぎると(200ぐらい)バグるかもしれません」という記述で逃げるのではなく、
きちんとエラー処理(上限を超えたところで読み込みを打ち切るなど)をするべきだと思います。
上限は増やさなくても構いません。(増やすことを禁止する意図はありません)

0.txt~9.txtの読み込みを全てコピペ(or全部手入力?)し、ループを使わずに書いているようですが、
これはループを使うべきです。ループを使わない理由はウンコードの生産以外に思いつきません。
あとは「宗教上の理由」くらいでしょうか?
wsprintfが嫌いでも、この場合ファイル名の数字だけ書き換える、ファイルのパスを配列に入れて持つなど、他の方法もあります。

数値を読み込む時にatoiを用い、オーバーフローを回避しているのはいいと思います。
ファイルの設定によりテンポを120、-65537拍にしたところ、最初に黒電話のような音がなり、その後音はしないようでした。
そして表示も最初の項目から動きませんでした。
0拍にすると、スタートボタンを押した時に強制終了しました。

最初に起動した状態で、「順番」→「ランダム」→「スタート」の順にボタンを押し、他のボタンは押さないようにすると、
list\0.txtの内容(テンポ、拍、表示する内容)を使ってランダムな順番で表示されるようです。
ただし、横に表示しているタイトルはrandom\0.txtに従うようです。

ファイルにデータを1件も用意しない状態(タイトル、テンポ、拍の3行のみ記入)でそのファイルを使うと、
順番モードでは最初のカウントが終わったタイミングで強制終了しましたが、
ランダムモードではカウントが終わっても強制終了せず、文字が表示されない状態でメトロノームの音が流れました。

データ部分(表示されるテキスト)を

コード:

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
としたファイルを使って順番モードで実行すると、
AAABBBBB、BBBBBBBB、BBの3種類の表示がされました。(最初の2個は左右に続いているようでした)

また、データの最初の3行(タイトルなどの設定)を

コード:

ああああああああああああああああああああああああ!!!!!!!!!!!!
120
4
とすると、テンポが0となり、120拍となりました。

空のファイルを使用すると、テンポ0、0拍と認識され、スタートボタンを押すと強制終了しました。(0拍だから?)

list\9.txtを以下の内容にしたところ、メトロノームやスタートボタン、拍の切り替えなどの操作はできるようですが、
一部の文字が表示されなくなりました。
► スポイラーを表示
また、list\9.txtを一回以下の内容で保存し、
► スポイラーを表示
最後のBGRの部分をバイナリエディタで書き換えることにより、一部の文字の色を変えられるようです。

プロジェクトをDドライブに置くことでユーザー名を推測されないようにする、というのは良い工夫だと思います。
ただ、そもそも余計なパス情報をバイナリに記録しないコンパイラを使うと、もっと良くなると思います。

とりあえず、気づいたことはこんなもんです。
長文失礼しました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Rom
記事: 25
登録日時: 7年前
住所: 日本

Re: 楽器の練習や何かの暗記に使えそうなソフト

#3

投稿記事 by Rom » 4年前

みけCATさん
長文でありがとうございます

>タイトルが表示されている部分とスタート/ストップボタンの間のスペースに役割はあるのでしょうか?
今のとこないです。機能を増やすための予備スペースです

>UIが「ランダム/順番」なのに対しディレクトリ名が「random/list」なのは対応がおかしい気がするので、
>listをsequentialにしてはどうでしょうか?
作ってるときから思ってましたが、たしかにsequentialだとわかりやすくていいですねそうします

>「あんまり個数が増えすぎると(200ぐらい)バグるかもしれません」という記述で逃げるのではなく、
>きちんとエラー処理(上限を超えたところで読み込みを打ち切るなど)をするべきだと思います。
たしかにそうですね。簡単に実装できそうなのでさせてもらいます

>0.txt~9.txtの読み込みを全てコピペ(or全部手入力?)し、ループを使わずに書いているようですが、
>これはループを使うべきです。
うまいやり方がわからず、とりあえず動けばいいや的な気持ちでやってました
wsprintfといものがあったんですね、ありがとうございます


その他のエラーやバグのほとんどがtxtファイルの読み込み関連ですね・・・
簡単に対処できるところはやろうと思うんですが使い方間違えたらエラー・フリーズは当然ジャンぐらいに
考えてるんですよね。そこの穴ふさぐ労力で機能充実使いやすさ向上を目指した方がいいのかなと

・・・しかしもっと大規模なプログラムになるとそんなこともいってられないのでしょうね

アバター
みけCAT
記事: 6013
登録日時: 7年前
住所: 千葉県
連絡を取る:

Re: 楽器の練習や何かの暗記に使えそうなソフト

#4

投稿記事 by みけCAT » 4年前

いろいろ書きすぎてしまったようですね。
とりあえずやるべきことは
  • ファイル読み込み処理のループ化
  • データを読み込む行数(件数)の制限(バッファのサイズと合わせるため、constで宣言した定数を使うと良い)
  • バッファサイズの指定の統一(読み込みサイズの上限は50なのに、表示する文字列を格納するバッファのサイズは30、sizeofを使うと良い)
  • テンポと拍数の上限と下限の設定(拍数の下限はあるが、ファイルから読み込んだデータは下限が反映されていない)
  • ランダムと順番の切り替えのバグの修正(切り替え時、モードに関わらずlist[now_slc%10]を設定してしまっています)
このくらいだと思います。
競技プログラミングやオンラインジャッジだと、仕様外の入力が与えられないことが保証されているんですけどね…
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

“作品お披露目掲示板” へ戻る