Revision | ba0d85672cfa23493e9c58bcacb435c03807e1c5 (tree) |
---|---|
Zeit | 2020-10-21 02:11:44 |
Autor | yyagi <yyagi.dtxmania@gmai...> |
Commiter | yyagi |
#24159 メトロノーム機能で、Off/表拍/裏拍に加えて、三連符も使えるようにした。
@@ -288,7 +288,8 @@ namespace DTXMania | ||
288 | 288 | // これにより、数ms程度ながらここでのソートも高速化されている。 |
289 | 289 | double barlength = 1.0; |
290 | 290 | int nEndOfSong = (this.listChip[this.listChip.Count - 1].n発声位置 + 384) - (this.listChip[this.listChip.Count - 1].n発声位置 % 384); |
291 | - bool bClickOffBeat = (CDTXMania.Instance.ConfigIni.eClickType == EClickType.OffBeat); // 裏拍でメトロノーム再生 | |
291 | + //bool bClickOffBeat = (CDTXMania.Instance.ConfigIni.eClickType == EClickType.OffBeat); // 裏拍でメトロノーム再生 | |
292 | + COptionEnum<EClickType> eClickType = CDTXMania.Instance.ConfigIni.eClickType; | |
292 | 293 | for (int tick384 = 0; tick384 <= nEndOfSong; tick384 += 384) // 小節線の挿入 (後に出てくる拍子線とループをまとめようとするなら、forループの終了条件の微妙な違いに注意が必要) |
293 | 294 | { |
294 | 295 | CChip chip = new CChip(tick384, 36 * 36 - 1, EChannel.BarLine); |
@@ -322,14 +323,21 @@ namespace DTXMania | ||
322 | 323 | } |
323 | 324 | |
324 | 325 | // 小節線上のクリック音の挿入 |
325 | - int deltaOffBeat = (int) ( 384.0 / 8 / barlength ); | |
326 | - if ( !bClickOffBeat ) // 裏拍でのメトロノーム再生の設定でなければ(Off設定であっても) | |
326 | + int deltaOffBeat8th = (int) ( 384.0 / 8 / barlength ); | |
327 | + int deltaOffBeat12th = (int) ( 384.0 / 12 / barlength); | |
328 | + if ( eClickType != EClickType.OffBeat ) // 裏拍でのメトロノーム再生の設定でなければ(Off設定であっても) | |
327 | 329 | { |
328 | - this.listChip.Add( new CChip( tick384, 1, EChannel.Click ) ); // 小節線上に、表拍のクリック音を挿入 | |
330 | + this.listChip.Add( new CChip( tick384, (int)EClickSoundType.High, EChannel.Click ) ); // 小節線上に、表拍のクリック音を挿入 | |
331 | + | |
332 | + if (eClickType == EClickType.Triplet) // 三連符なら、最初残り2つのクリック音を挿入 | |
333 | + { | |
334 | + this.listChip.Add(new CChip(tick384 + deltaOffBeat12th, (int)EClickSoundType.Bottom, EChannel.Click)); // 小節線から12分音符だけ後に、裏拍のクリック音を挿入 | |
335 | + this.listChip.Add(new CChip(tick384 + deltaOffBeat12th * 2, (int)EClickSoundType.Bottom, EChannel.Click)); // 小節線から12分音符x2だけ後に、裏拍のクリック音を挿入 | |
336 | + } | |
329 | 337 | } |
330 | 338 | else if ( tick384 + 384 / 8 <= nEndOfSong ) // 裏拍設定で、かつ曲長内に収まるなら |
331 | 339 | { |
332 | - this.listChip.Add( new CChip( tick384 + deltaOffBeat, 1, EChannel.Click ) ); // 小節線から8分音符だけ後に、裏拍のクリック音を挿入 | |
340 | + this.listChip.Add( new CChip( tick384 + deltaOffBeat8th, (int)EClickSoundType.High, EChannel.Click ) ); // 小節線から8分音符だけ後に、裏拍のクリック音を挿入 | |
333 | 341 | } |
334 | 342 | |
335 | 343 |
@@ -344,13 +352,19 @@ namespace DTXMania | ||
344 | 352 | { |
345 | 353 | CChip chip = new CChip(tick384 + (tickBeat + n発声位置_C1_同一小節内), 36 * 36 - 1, EChannel.BeatLine); |
346 | 354 | this.listChip.Add(chip); |
347 | - if ( !bClickOffBeat ) // メトロノーム設定が裏拍設定でなければ、拍音を挿入 | |
355 | + if (eClickType != EClickType.OffBeat) // メトロノーム設定が裏拍設定でなければ、拍音を挿入 | |
348 | 356 | { |
349 | - this.listChip.Add( new CChip( tick384 + ( tickBeat + n発声位置_C1_同一小節内 ), 2, EChannel.Click ) ); | |
357 | + this.listChip.Add( new CChip( tick384 + ( tickBeat + n発声位置_C1_同一小節内 ), (int)EClickSoundType.Low, EChannel.Click ) ); | |
358 | + | |
359 | + if (eClickType == EClickType.Triplet) // 三連符なら、最初残り2つのクリック音を挿入 | |
360 | + { | |
361 | + this.listChip.Add(new CChip(tick384 + (tickBeat + deltaOffBeat12th + n発声位置_C1_同一小節内), (int)EClickSoundType.Bottom, EChannel.Click)); | |
362 | + this.listChip.Add(new CChip(tick384 + (tickBeat + deltaOffBeat12th * 2 + n発声位置_C1_同一小節内), (int)EClickSoundType.Bottom, EChannel.Click)); | |
363 | + } | |
350 | 364 | } |
351 | - else if ( ( tickBeat + deltaOffBeat + n発声位置_C1_同一小節内 ) < 384 ) // 裏拍設定、かつ小節内に収まっていれば、拍音を挿入 | |
365 | + else if ( ( tickBeat + deltaOffBeat8th + n発声位置_C1_同一小節内 ) < 384 ) // 裏拍設定、かつ小節内に収まっていれば、拍音を挿入 | |
352 | 366 | { |
353 | - this.listChip.Add( new CChip( tick384 + ( tickBeat + deltaOffBeat + n発声位置_C1_同一小節内 ), 2, EChannel.Click ) ); | |
367 | + this.listChip.Add( new CChip( tick384 + ( tickBeat + deltaOffBeat8th + n発声位置_C1_同一小節内 ), (int)EClickSoundType.Low, EChannel.Click ) ); | |
354 | 368 | } |
355 | 369 | |
356 | 370 | } |
@@ -3312,12 +3312,15 @@ namespace DTXMania | ||
3312 | 3312 | { |
3313 | 3313 | switch (pChip.n整数値) |
3314 | 3314 | { |
3315 | - case 1: | |
3315 | + case (int)EClickSoundType.High: | |
3316 | 3316 | CDTXMania.Instance.Skin.soundClickHigh.t再生する(); |
3317 | 3317 | break; |
3318 | - case 2: | |
3318 | + case (int)EClickSoundType.Low: | |
3319 | 3319 | CDTXMania.Instance.Skin.soundClickLow.t再生する(); |
3320 | 3320 | break; |
3321 | + case (int)EClickSoundType.Bottom: | |
3322 | + CDTXMania.Instance.Skin.soundClickBottom.t再生する(); | |
3323 | + break; | |
3321 | 3324 | } |
3322 | 3325 | } |
3323 | 3326 | } |
@@ -310,6 +310,7 @@ namespace DTXMania | ||
310 | 310 | public Cシステムサウンド sound変更音 = null; |
311 | 311 | public Cシステムサウンド soundClickHigh = null; |
312 | 312 | public Cシステムサウンド soundClickLow = null; |
313 | + public Cシステムサウンド soundClickBottom = null; | |
313 | 314 | public readonly int nシステムサウンド数 = (int) Eシステムサウンド.Count; |
314 | 315 | public Cシステムサウンド this[Eシステムサウンド sound] |
315 | 316 | { |
@@ -359,6 +360,9 @@ namespace DTXMania | ||
359 | 360 | case Eシステムサウンド.SOUNDClickLow: |
360 | 361 | return this.soundClickLow; |
361 | 362 | |
363 | + case Eシステムサウンド.SOUNDClickBottom: | |
364 | + return this.soundClickBottom; | |
365 | + | |
362 | 366 | case Eシステムサウンド.BGM起動画面: |
363 | 367 | return this.bgm起動画面; |
364 | 368 |
@@ -433,6 +437,9 @@ namespace DTXMania | ||
433 | 437 | |
434 | 438 | case (int) Eシステムサウンド.SOUNDClickLow: |
435 | 439 | return this.soundClickLow; |
440 | + | |
441 | + case (int)Eシステムサウンド.SOUNDClickBottom: | |
442 | + return this.soundClickBottom; | |
436 | 443 | } |
437 | 444 | throw new IndexOutOfRangeException(); |
438 | 445 | } |
@@ -580,6 +587,7 @@ namespace DTXMania | ||
580 | 587 | this.soundタイトル音 = new Cシステムサウンド(@"Sounds\Title.ogg", false, true, false); |
581 | 588 | this.soundClickHigh = new Cシステムサウンド( @"Sounds\Click_High.ogg", false, false, false ); |
582 | 589 | this.soundClickLow = new Cシステムサウンド( @"Sounds\Click_Low.ogg", false, false, false ); |
590 | + this.soundClickBottom = new Cシステムサウンド(@"Sounds\Click_Bottom.ogg", false, false, false); | |
583 | 591 | this.bgm起動画面 = new Cシステムサウンド( @"Sounds\Setup BGM.ogg", true, true, false ); |
584 | 592 | this.bgmオプション画面 = new Cシステムサウンド(@"Sounds\Option BGM.ogg", true, true, false); |
585 | 593 | this.bgmコンフィグ画面 = new Cシステムサウンド(@"Sounds\Config BGM.ogg", true, true, false); |
@@ -354,9 +354,17 @@ namespace DTXMania | ||
354 | 354 | SOUND変更音, |
355 | 355 | SOUNDClickHigh, |
356 | 356 | SOUNDClickLow, |
357 | + SOUNDClickBottom, | |
357 | 358 | Count // システムサウンド総数の計算用 |
358 | 359 | } |
359 | 360 | |
361 | + public enum EClickSoundType : int | |
362 | + { | |
363 | + High = 1, | |
364 | + Low = 2, | |
365 | + Bottom = 3 | |
366 | + } | |
367 | + | |
360 | 368 | public enum E演奏画面の戻り値 |
361 | 369 | { |
362 | 370 | 継続, |
@@ -856,9 +864,9 @@ namespace DTXMania | ||
856 | 864 | [EnumMember] |
857 | 865 | OnBeat, // 表拍 |
858 | 866 | [EnumMember] |
859 | - OffBeat // 裏拍 | |
860 | -// [EnumMember] | |
861 | -// Triplet // 3連符 | |
867 | + OffBeat, // 裏拍 | |
868 | + [EnumMember] | |
869 | + Triplet // 3連符 | |
862 | 870 | } |
863 | 871 | |
864 | 872 | [DataContract] |