Skip to content

Commit 9c0b6e0

Browse files
committed
在导出的 mp3 中包含封面和元数据
1 parent 02d32ff commit 9c0b6e0

File tree

3 files changed

+18
-9
lines changed

3 files changed

+18
-9
lines changed

MaiChartManager/Controllers/Music/MusicTransferController.cs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using MaiLib;
55
using Microsoft.AspNetCore.Mvc;
66
using Microsoft.VisualBasic.FileIO;
7+
using NAudio.Lame;
78
using SimaiSharp;
89
using Vanara.Windows.Forms;
910
using Xabe.FFmpeg;
@@ -354,12 +355,6 @@ public async Task ExportAsMaidata(int id, string assetDir, bool ignoreVideo = fa
354355
await maidataStream.WriteAsync(Encoding.UTF8.GetBytes(simaiFile.ToString()));
355356
maidataStream.Close();
356357

357-
358-
var soundEntry = zipArchive.CreateEntry("track.mp3");
359-
await using var soundStream = soundEntry.Open();
360-
AudioConvert.ConvertWavPathToMp3Stream(await AudioConvert.GetCachedWavPath(id), soundStream);
361-
soundStream.Close();
362-
363358
// copy jacket
364359
var img = music.GetMusicJacketPngData();
365360
if (img is not null)
@@ -372,6 +367,20 @@ public async Task ExportAsMaidata(int id, string assetDir, bool ignoreVideo = fa
372367
imageStream.Close();
373368
}
374369

370+
var soundEntry = zipArchive.CreateEntry("track.mp3");
371+
await using var soundStream = soundEntry.Open();
372+
var tag = new ID3TagData
373+
{
374+
Title = music.Name,
375+
Artist = music.Artist,
376+
Album = genre?.GenreName,
377+
Track = music.Id.ToString(),
378+
Comment = version?.GenreName,
379+
AlbumArt = img,
380+
};
381+
AudioConvert.ConvertWavPathToMp3Stream(await AudioConvert.GetCachedWavPath(id), soundStream, tag);
382+
soundStream.Close();
383+
375384
if (!ignoreVideo && StaticSettings.MovieDataMap.TryGetValue(music.NonDxId, out var movieUsmPath))
376385
{
377386
string? pvMp4Path = null;

MaiChartManager/Front/src/components/MusicList/BatchActionButton/remoteExport.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,5 @@ export default async (setStep: (step: STEP) => void, musicList: MusicXmlWithABJa
8080
}
8181

8282
const sanitizeFilename = (filename: string) => {
83-
return filename.replace(/[\/:*?"<>|]/g, '_');
83+
return filename.replace(/[\/:*?"<>|]/g, '_').replace(/[.\s]+$/, '');
8484
}

MaiChartManager/Utils/AudioConvert.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ public static class AudioConvert
3030
return cachePath;
3131
}
3232

33-
public static void ConvertWavPathToMp3Stream(string wavPath, Stream mp3Stream)
33+
public static void ConvertWavPathToMp3Stream(string wavPath, Stream mp3Stream, ID3TagData? tagData = null)
3434
{
3535
using var reader = new WaveFileReader(wavPath);
36-
using var writer = new LameMP3FileWriter(mp3Stream, reader.WaveFormat, 256);
36+
using var writer = new LameMP3FileWriter(mp3Stream, reader.WaveFormat, 256, tagData);
3737
reader.CopyTo(writer);
3838
}
3939
}

0 commit comments

Comments
 (0)