Skip to content

Commit 3ec2ff6

Browse files
committed
test
1 parent ea3d472 commit 3ec2ff6

File tree

5 files changed

+70
-4
lines changed

5 files changed

+70
-4
lines changed

.idea/.idea.Sitreamai/.idea/vcs.xml

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

AquaMai

MaiChartManager/Controllers/Music/CueConvertController.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace MaiChartManager.Controllers.Music;
88

99
[ApiController]
1010
[Route("MaiChartManagerServlet/[action]Api/{assetDir}/{id:int}")]
11-
public class CueConvertController(StaticSettings settings, ILogger<MusicController> logger) : ControllerBase
11+
public class CueConvertController(StaticSettings settings, ILogger<CueConvertController> logger) : ControllerBase
1212
{
1313
[NoCache]
1414
[HttpGet]
@@ -82,4 +82,4 @@ public CriUtils.AudioPreviewTime GetAudioPreviewTime(int id, string assetDir)
8282
return new CriUtils.AudioPreviewTime(-1, -1);
8383
}
8484
}
85-
}
85+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
using MaiChartManager.Utils;
2+
using Microsoft.AspNetCore.Mvc;
3+
using Xabe.FFmpeg;
4+
5+
namespace MaiChartManager.Controllers;
6+
7+
[ApiController]
8+
[Route("MaiChartManagerServlet/[action]Api")]
9+
public class VrcProcessController(StaticSettings settings, ILogger<VrcProcessController> logger) : ControllerBase
10+
{
11+
[HttpPost]
12+
public void GenAllMusicPreviewMp3ForVrc([FromForm] string targetDir, [FromForm] int maxConcurrency)
13+
{
14+
Task.Run(async () =>
15+
{
16+
// using var semaphore = new SemaphoreSlim(maxConcurrency);
17+
// var tasks = new List<Task>();
18+
var allAcb = StaticSettings.AcbAwb.Where(x => x.Key.StartsWith("music") && x.Key.EndsWith(".acb")).ToDictionary();
19+
foreach (var key in allAcb.Keys)
20+
{
21+
// await semaphore.WaitAsync();
22+
// tasks.Add(Task.Run(async () =>
23+
// {
24+
try
25+
{
26+
var musicId = int.Parse(key[5..^4]);
27+
var previewTime = CriUtils.GetAudioPreviewTime(allAcb[key]);
28+
var wav = await AudioConvert.GetCachedWavPath(musicId);
29+
30+
if (wav is null)
31+
{
32+
logger.LogWarning("音频文件不存在 {musicId}", musicId);
33+
continue;
34+
}
35+
if (previewTime.EndTime < previewTime.StartTime)
36+
{
37+
logger.LogWarning("previewTime.EndTime < previewTime.StartTime {musicId} {endTime} {startTime}", musicId, previewTime.EndTime, previewTime.StartTime);
38+
}
39+
var mp3Path = Path.Combine(targetDir, $"{musicId}.mp3");
40+
// logger.LogInformation("转换中 {musicId}", musicId);
41+
var conversion = await FFmpeg.Conversions.FromSnippet
42+
.Split(wav, mp3Path, TimeSpan.FromSeconds(previewTime.StartTime), TimeSpan.FromSeconds(previewTime.EndTime - previewTime.StartTime));
43+
44+
await conversion.SetOutputFormat(Format.mp3)
45+
.Start();
46+
}
47+
catch (Exception ex)
48+
{
49+
logger.LogError(ex, "处理音频文件出错 {key}", key);
50+
}
51+
// finally
52+
// {
53+
// semaphore.Release(); // 释放信号量
54+
// }
55+
// }));
56+
}
57+
58+
// await Task.WhenAll(tasks);
59+
});
60+
}
61+
}

MaiChartManager/Utils/AudioConvert.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using NAudio.Lame;
22
using NAudio.Wave;
3+
using NAudio.Wave.SampleProviders;
34
using Sitreamai;
45
using Standart.Hash.xxHash;
56

@@ -35,4 +36,4 @@ public static void ConvertWavPathToMp3Stream(string wavPath, Stream mp3Stream)
3536
using var writer = new LameMP3FileWriter(mp3Stream, reader.WaveFormat, 256);
3637
reader.CopyTo(writer);
3738
}
38-
}
39+
}

0 commit comments

Comments
 (0)