Skip to content

Commit e395ba2

Browse files
committed
根据AI的提示和我自己发现的问题,进行修复
1 parent 1bdaa60 commit e395ba2

3 files changed

Lines changed: 14 additions & 18 deletions

File tree

MaiChartManager/Controllers/Music/MusicTransferController.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -582,7 +582,7 @@ public async Task ExportAsMaidata(int id, string assetDir, bool ignoreVideo = fa
582582
// ignore preview time errors
583583
}
584584

585-
var ma2Contents = new Dictionary<int, string[]>();
585+
var ma2Contents = new List<(int, string[])>();
586586

587587
// 关于clock_count功能,我决定不走MaiLib了,而是我们自己解析。因为ma2.Compose返回的是裸谱面inote中的内容,没有办法合理的把clock信息插进去。因此,我们自己解析吧。
588588
// 选用最难的一张有效谱面的MET值作为全曲的&clock_count
@@ -602,7 +602,7 @@ public async Task ExportAsMaidata(int id, string assetDir, bool ignoreVideo = fa
602602
}
603603

604604
var ma2Content = await System.IO.File.ReadAllLinesAsync(chartPath);
605-
ma2Contents[i] = ma2Content;
605+
ma2Contents.Add((i, ma2Content));
606606

607607
// 从谱面内容中寻找MET行
608608
var metLine = ma2Content.FirstOrDefault(it => it.StartsWith("MET\t"));

MaiChartManager/Front/src/views/Charts/ImportCreateChartButton/ImportChartButton/index.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,14 @@ export default defineComponent({
170170
let audioPadding = chartPadding - music.first;
171171

172172
await api.SetAudio(music.id, selectedADir.value, { file: music.track, padding: audioPadding, ignoreGapless: !!tempOptions.value.ignoreGapless });
173-
if (music.previewTime) await api.SetAudioPreview(music.id, selectedADir.value, music.previewTime);
173+
if (music.previewTime) {
174+
// 因为&demo_seek和&demo_len都是相对于原始音源的,所以这里的时间必须要扣掉上面SetAudio时应用的padding。
175+
// 根据SetAudioApi的定义,padding为正表示歌曲前面被加了空白,因此原本的预览段在新的裁剪后的音频中的位置也要相应后移;padding为负反之。
176+
// 因此,直接给startTime和endTime都加上audioPadding即可。
177+
music.previewTime.startTime! += audioPadding;
178+
music.previewTime.endTime! += audioPadding
179+
await api.SetAudioPreview(music.id, selectedADir.value, music.previewTime);
180+
}
174181

175182
if (music.movie && !tempOptions.value.disableBga) {
176183
currentMovieProgress.value = 0;

MaiChartManager/Services/MaidataImportService.cs

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -262,23 +262,11 @@ private record AllChartsEntry(string chartText, MaiChart simaiSharpChart);
262262

263263
[GeneratedRegex(@"^(MET\t\d+\t\d+\t\d+\t)(\d+\s*)$", RegexOptions.Multiline)]
264264
private static partial Regex FirstMetLineRegex();
265-
266-
private static string replaceGroup2ByRegex(string input, Match match, int value)
267-
{
268-
if (!match.Success) return input;
269-
return string.Concat(
270-
input.AsSpan(0, match.Index),
271-
match.Groups[1].ValueSpan,
272-
value.ToString(CultureInfo.InvariantCulture),
273-
input.AsSpan(match.Index + match.Length));
274-
}
275265

276266
private static string ApplyClockCountToFirstMetLine(string ma2Content, int clockCount)
277267
{
278-
var clockdefMatch = ClockDefRegex().Match(ma2Content);
279-
ma2Content = replaceGroup2ByRegex(ma2Content, clockdefMatch, 96 * clockCount);
280-
var metMatch = FirstMetLineRegex().Match(ma2Content);
281-
ma2Content = replaceGroup2ByRegex(ma2Content, metMatch, clockCount);
268+
ma2Content = ClockDefRegex().Replace(ma2Content, $"${{1}}{96 * clockCount}", 1);
269+
ma2Content = FirstMetLineRegex().Replace(ma2Content, $"${{1}}{clockCount}", 1);
282270
return ma2Content;
283271
}
284272

@@ -439,7 +427,8 @@ public ImportChartResult ImportMaidata(
439427
// 如果maidata中声明了clock_count,应用之,修改CLOCK_DEF和MET
440428
if (int.TryParse(maiData.GetValueOrDefault("clock_count"), out var clockCount))
441429
{
442-
shiftedConverted = ApplyClockCountToFirstMetLine(shiftedConverted, clockCount);
430+
if (clockCount > 0) shiftedConverted = ApplyClockCountToFirstMetLine(shiftedConverted, clockCount);
431+
else errors.Add(new ImportChartMessage("the \"&clock_count\" value in this maidata is invalid thus ignored.", MessageLevel.Warning));
443432
}
444433

445434
// Just use T_NUM_ALL value in ma2 file

0 commit comments

Comments
 (0)