2020 ソフトウェア設計及び演習用の班Wiki
19::gr02::がらくた箱
モジュール”譜面生成”
- もらったデータ(直接もらうか、フラグをもらって自分から読み込むかは未定)を読み込む。
- 配列とBPM(その他データは未定)から譜面の作成。
- ノーツ単位でそれぞれの時間を指定することで作成。
- 一小節にノーツを16個配置可能。
- 作成に必要なデータ
- 配列(ノーツの種類及び順序データ)
- BPM(テンポ)
- 画面表示系に値を私表示させたいがラグの関係でこれで表示させないといけないかも。
各種データの値
- 配列
ノーツなし | 0 |
基本ノーツ | 1 |
同時ノーツ | 2 |
長押しノーツ(始点) | 3 |
長押しノーツ(中間) | 4 |
長押しノーツ(終点) | 5 |
連打ノーツ(始点) | 6 |
連打ノーツ(中間) | 7 |
連打ノーツ(終点) | 8 |
- BPM(一分間に刻まれる拍、たとえばBPM100だと1分間に100回泊が刻まれる) 1ノーツあたりの時間(間隔)
計算式 | y=[60/{(BPM)/4}]/16=15/(BPM) |
のため各ノーツごとの時間は
計算式 | z=(x-1)*y or z=(x-1)*y |
譜面作成暫定プログラム
確認用fumen.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=300,user-scalable=no">
<title>fumen</title>
<script type="text/javascript" src="getCSV3.js"></script>
<script type="text/javascript" src="fumen3.js"></script>
<body onload="fumen();">
</body>
</html>
|
fumen3.js
function fumen(){
console.log("ok");
var f = getCsv("sample.csv");//配列の格納
console.log(f);
var n = f.length;//配列の長さ
var b = f[0][0];//曲のBPMを取得
var t = 15/b;//ノーツ間の時間の決定
var i = 0;//現在見ている配列の場所
var l = 0;//左カウント用
var r = 0//右カウント用
var l1 = [];//左用配列
var r1 = [];//右用配列
console.log(n);
console.log(b);
console.log(t);
console.log(i);
console.log(l);
console.log(r);
do{
//左側のノーツ作成
if (f[i+1][0]>=1) {
l1[l]=[' ',' ']
l1[l][0] = f[i+1][0];
l1[l][1] = i*t.toFixed(2);
l++;
}
if (f[i+1][1]>=1) {
r1[r]=[' ',' ']
r1[r][0] = f[i+1][1];
r1[r][1] = i*t.toFixed(2);
r++;
}
i++;
}while(i<n-1);
console.log(l1);
console.log(r1);
alert(l1);
alert(r1);
}
|
getCSV3.js
function getCsv(url){ //CSVファイルを文字列で取得。 var txt = new XMLHttpRequest(); txt.open('get', url, false); txt.send(); //改行ごとに配列化 var arr = txt.responseText.split('\n'); //1次元配列を2次元配列に変換 var res = []; for(var i = 0; i < arr.length; i++){ //空白行が出てきた時点で終了 if(arr[i] == ) break; //","ごとに配列化 res[i] = arr[i].split(','); for(var i2 = 0; i2 < res[i].length; i2++){ //数字の場合は「"」を削除 if(res[i][i2].match(/\-?\d+(.\d+)?(e[\+\-]d+)?/)){ res[i][i2] = parseFloat(res[i][i2].replace('"', )); } } } return res; } |
最終更新日:2019/08/02 03:49:08