mirror of
https://github.com/rmcrackan/Libation.git
synced 2026-02-20 07:44:40 -05:00
70 lines
1.8 KiB
C#
70 lines
1.8 KiB
C#
using Newtonsoft.Json;
|
|
|
|
namespace DataLayer;
|
|
|
|
public enum Codec : byte
|
|
{
|
|
Unknown,
|
|
Mp3,
|
|
AAC_LC,
|
|
xHE_AAC,
|
|
EC_3,
|
|
AC_4
|
|
}
|
|
|
|
public class AudioFormat
|
|
{
|
|
public static AudioFormat Default => new(Codec.Unknown, 0, 0, 0);
|
|
[JsonIgnore]
|
|
public bool IsDefault => Codec is Codec.Unknown && BitRate == 0 && SampleRate == 0 && ChannelCount == 0;
|
|
[JsonIgnore]
|
|
public Codec Codec { get; set; }
|
|
public int SampleRate { get; set; }
|
|
public int ChannelCount { get; set; }
|
|
public int BitRate { get; set; }
|
|
|
|
public AudioFormat(Codec codec, int bitRate, int sampleRate, int channelCount)
|
|
{
|
|
Codec = codec;
|
|
BitRate = bitRate;
|
|
SampleRate = sampleRate;
|
|
ChannelCount = channelCount;
|
|
}
|
|
|
|
public string CodecString => Codec switch
|
|
{
|
|
Codec.Mp3 => "mp3",
|
|
Codec.AAC_LC => "AAC-LC",
|
|
Codec.xHE_AAC => "xHE-AAC",
|
|
Codec.EC_3 => "EC-3",
|
|
Codec.AC_4 => "AC-4",
|
|
Codec.Unknown or _ => "[Unknown]",
|
|
};
|
|
|
|
//Property | Start | Num | Max | Current Max |
|
|
// | Bit | Bits | Value | Value Used |
|
|
//-----------------------------------------------------
|
|
//Codec | 35 | 4 | 15 | 5 |
|
|
//BitRate | 23 | 12 | 4_095 | 768 |
|
|
//SampleRate | 5 | 18 | 262_143 | 48_000 |
|
|
//ChannelCount | 0 | 5 | 31 | 6 |
|
|
public long Serialize() =>
|
|
((long)Codec << 35) |
|
|
((long)BitRate << 23) |
|
|
((long)SampleRate << 5) |
|
|
(long)ChannelCount;
|
|
|
|
public static AudioFormat Deserialize(long value)
|
|
{
|
|
var codec = (Codec)((value >> 35) & 15);
|
|
var bitRate = (int)((value >> 23) & 4_095);
|
|
var sampleRate = (int)((value >> 5) & 262_143);
|
|
var channelCount = (int)(value & 31);
|
|
return new AudioFormat(codec, bitRate, sampleRate, channelCount);
|
|
}
|
|
|
|
public override string ToString()
|
|
=> IsDefault ? "[Unknown Audio Format]"
|
|
: $"{CodecString} ({ChannelCount}ch | {SampleRate:N0}Hz | {BitRate}kbps)";
|
|
}
|