Skip to content

Commit 1c1957d

Browse files
committed
feat: 导入谱面时,高级选项中增加“MP3兼容模式(忽略Gapless)”
1 parent 87503cc commit 1c1957d

11 files changed

Lines changed: 42 additions & 17 deletions

File tree

MaiChartManager.CLI/Commands/MakeAcbCommand.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ public class Settings : CommandSettings
2222
[Description("音频填充(秒),正数为前置静音,负数为裁剪开头")]
2323
[DefaultValue(0f)]
2424
public float Padding { get; set; }
25+
26+
[CommandOption("--ignoreGapless")]
27+
[Description("使用MP3兼容模式(忽略音频中的Gapless信息)。如果你使用某些版本的Visual Maimai等制谱器制谱,然后发现导入的谱面有对音问题的话,可以尝试开启此项")]
28+
[DefaultValue(false)]
29+
public bool IgnoreGapless { get; set; }
2530

2631
public override ValidationResult Validate()
2732
{
@@ -87,7 +92,8 @@ await Task.Run(() =>
8792
Audio.ConvertToMai(
8893
srcPath: source,
8994
savePath: output,
90-
padding: settings.Padding
95+
padding: settings.Padding,
96+
forceUseNAudio: settings.IgnoreGapless
9197
);
9298
});
9399
});
@@ -131,7 +137,8 @@ await Task.Run(() =>
131137
Audio.ConvertToMai(
132138
srcPath: source,
133139
savePath: output,
134-
padding: settings.Padding
140+
padding: settings.Padding,
141+
forceUseNAudio: settings.IgnoreGapless
135142
);
136143
});
137144
doneCount++;

MaiChartManager/Controllers/Music/CueConvertController.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public async Task<ActionResult> GetMusicWav(int id, string assetDir)
2424

2525
[HttpPut]
2626
[DisableRequestSizeLimit]
27-
public void SetAudio(int id, [FromForm] float padding, IFormFile file, IFormFile? awb, IFormFile? preview, string assetDir)
27+
public void SetAudio(int id, [FromForm] float padding, IFormFile file, IFormFile? awb, IFormFile? preview, string assetDir, [FromForm] bool ignoreGapless = false)
2828
{
2929
id %= 10000;
3030
var targetAcbPath = Path.Combine(StaticSettings.StreamingAssets, assetDir, $@"SoundData\music{id:000000}.acb");
@@ -41,7 +41,7 @@ public void SetAudio(int id, [FromForm] float padding, IFormFile file, IFormFile
4141
}
4242
else
4343
{
44-
Audio.ConvertToMai(file.FileName, targetAcbPath, padding, file.OpenReadStream(), preview?.FileName, preview?.OpenReadStream());
44+
Audio.ConvertToMai(file.FileName, targetAcbPath, padding, file.OpenReadStream(), preview?.FileName, preview?.OpenReadStream(), forceUseNAudio: ignoreGapless);
4545
}
4646

4747
StaticSettings.AcbAwb[$"music{id:000000}.acb"] = targetAcbPath;

MaiChartManager/Controllers/Tools/AudioConvertToolController.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ private IActionResult ConvertAcbAwbToMp3(string inputFile, string directory, str
8787
/// <summary>
8888
/// 将音频文件转换为 ACB/AWB
8989
/// </summary>
90-
private IActionResult ConvertToAcbAwb(string inputFile, string directory, string fileNameWithoutExt, string extension)
90+
private IActionResult ConvertToAcbAwb(string inputFile, string directory, string fileNameWithoutExt, string extension, bool ignoreGapless = false)
9191
{
9292
string tempAudioFile = null;
9393

@@ -108,7 +108,7 @@ private IActionResult ConvertToAcbAwb(string inputFile, string directory, string
108108
string awbPath = Path.Combine(directory, fileNameWithoutExt + ".awb");
109109

110110
// 执行转换
111-
Audio.ConvertToMai(actualInputFile, acbPath);
111+
Audio.ConvertToMai(actualInputFile, acbPath, forceUseNAudio: ignoreGapless);
112112

113113
return Ok(new { message = Locale.ConvertSuccess, acbPath = acbPath, awbPath = awbPath });
114114
}

MaiChartManager/Front/src/client/apiGen.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,6 +1282,8 @@ export class Api<
12821282
awb?: File;
12831283
/** @format binary */
12841284
preview?: File;
1285+
/** @default false */
1286+
ignoreGapless?: boolean;
12851287
},
12861288
params: RequestParams = {},
12871289
) =>

MaiChartManager/Front/src/locales/en.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,8 @@ chart:
249249
present)
250250
251251
May cause first note to appear at odd timing, e.g. immediately at start
252+
ignoreGapless: MP3 compatibility mode (ignore Gapless)
253+
ignoreGaplessTip: If the chart was made with some specific chart editors, such as certain versions of Visual Maimai, and the imported chart has timing issues, you can try enabling this option.
252254
codecForceH264: H264
253255
codecForceVP9: VP9 USM
254256
assignId: Assign ID for new imported songs

MaiChartManager/Front/src/locales/zh-TW.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ chart:
231231
shiftNoMoveDesc: |-
232232
完全不修改譜面,從音訊中刪除 &first 的長度(如果有)
233233
可能會導致第一個音符出現的時機比較奇怪,比如說剛開始就有音符
234+
ignoreGapless: MP3 相容模式(忽略 Gapless)
235+
ignoreGaplessTip: 如果你使用某些版本的 Visual Maimai 等製譜器製譜,然後發現匯入的譜面有對音問題的話,可以嘗試開啟此項進行匯入。
234236
codecForceH264: H264
235237
codecForceVP9: VP9 USM
236238
assignId: 為新匯入的歌曲指定 ID

MaiChartManager/Front/src/locales/zh.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ chart:
231231
shiftNoMoveDesc: |-
232232
完全不修改谱面,从音频中删除 &first 的长度(如果有)
233233
可能会导致第一个音符出现的时机比较奇怪,比如说刚开始就有音符
234+
ignoreGapless: MP3兼容模式(忽略Gapless)
235+
ignoreGaplessTip: 如果你使用某些版本的Visual Maimai等制谱器制谱,然后发现导入的谱面有对音问题的话,可以尝试开启此项进行导入。
234236
codecForceH264: H264
235237
codecForceVP9: VP9 USM
236238
assignId: 为新导入的歌曲指定 ID

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { computed, defineComponent, effect, PropType, watch } from "vue";
2-
import { Button, CheckBox, Modal, NumberInput, Section } from "@munet/ui";
2+
import { Button, CheckBox, Modal, NumberInput, Popover, Section } from "@munet/ui";
33
import { ImportChartMessage, MessageLevel, ShiftMethod } from "@/client/apiGen";
44
import { ImportChartMessageEx, ImportMeta, SavedOptions, TempOptions } from "./types";
55
import noJacket from '@/assets/noJacket.webp';
@@ -70,6 +70,15 @@ export default defineComponent({
7070
</CheckBox>
7171
<Section title={t('chart.import.option.advancedOptions')}>
7272
<ShiftModeSelector tempOptions={props.tempOptions}></ShiftModeSelector>
73+
<div class="flex items-center gap-1" style="margin-top: 0.25rem">
74+
<CheckBox v-model:value={props.tempOptions.ignoreGapless}>{t('chart.import.option.ignoreGapless')}</CheckBox>
75+
<Popover trigger="hover">
76+
{{
77+
trigger: () => <div class="i-material-symbols:info-outline-rounded op-50"/>,
78+
default: () => <div class="max-w-60">{t('chart.import.option.ignoreGaplessTip')}</div>
79+
}}
80+
</Popover>
81+
</div>
7382
</Section>
7483
</>}
7584
</div>,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ export default defineComponent({
168168
// 音频上应该应用的延迟audioPadding = 谱面上应用的延迟chartPadding - &first
169169
let audioPadding = chartPadding - music.first;
170170

171-
await api.SetAudio(music.id, selectedADir.value, { file: music.track, padding: audioPadding });
171+
await api.SetAudio(music.id, selectedADir.value, { file: music.track, padding: audioPadding, ignoreGapless: !!tempOptions.value.ignoreGapless });
172172

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

MaiChartManager/Front/src/views/Charts/ImportCreateChartButton/ImportChartButton/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,6 @@ export type TempOptions = {
5353
shiftLocked?: boolean,
5454
ignoreLevel?: boolean,
5555
disableBga?: boolean,
56+
ignoreGapless?: boolean,
5657
};
5758
export type SavedOptions = typeof defaultSavedOptions;

0 commit comments

Comments
 (0)