Added AudioFileScanner and AudioImageExtractor logic.

This commit is contained in:
2025-02-25 00:42:34 -05:00
parent 960c6b9ec7
commit b38e4dc858
8 changed files with 181 additions and 22 deletions

View File

@@ -0,0 +1,59 @@
using System.Security.Cryptography;
namespace Harmonia.Core.Imaging;
public class SongPictureInfo : IDisposable
{
public required Stream Stream { get; init; }
public string? ImageHash { get; init; }
public required string ImageName { get; init; }
public ulong Size { get; init; }
private SongPictureInfo()
{
}
public static SongPictureInfo FromStream(Stream stream)
{
string imageHash = ComputeImageHash(stream);
return GetSongPictureInfo(stream, "Embedded", imageHash);
}
private static string ComputeImageHash(Stream stream)
{
using var md5 = MD5.Create();
byte[] hash = md5.ComputeHash(stream);
return Convert.ToHexStringLower(hash);
}
public static SongPictureInfo FromFile(string fileName)
{
using FileStream fileStream = File.OpenRead(fileName);
return GetSongPictureInfo(fileStream, fileName);
}
private static SongPictureInfo GetSongPictureInfo(Stream stream, string imageName, string? imageHash = null)
{
stream.Seek(0, SeekOrigin.Begin);
SongPictureInfo songPictureInfo = new()
{
Stream = stream,
ImageHash = imageHash,
ImageName = imageName,
Size = (ulong)stream.Length
};
return songPictureInfo;
}
public void Dispose()
{
Stream.Dispose();
GC.SuppressFinalize(this);
}
}