mirror of
https://github.com/aaru-dps/RedBookPlayer.git
synced 2025-12-16 19:24:41 +00:00
Add audio, data and copy flags
This commit is contained in:
@@ -10,11 +10,18 @@ using CSCore;
|
|||||||
using NWaves.Audio;
|
using NWaves.Audio;
|
||||||
using NWaves.Filters.BiQuad;
|
using NWaves.Filters.BiQuad;
|
||||||
using static Aaru.Decoders.CD.FullTOC;
|
using static Aaru.Decoders.CD.FullTOC;
|
||||||
|
using Aaru.CommonTypes.Structs;
|
||||||
|
|
||||||
namespace RedBookPlayer
|
namespace RedBookPlayer
|
||||||
{
|
{
|
||||||
public class Player
|
public class Player
|
||||||
{
|
{
|
||||||
|
public enum TrackType
|
||||||
|
{
|
||||||
|
Audio,
|
||||||
|
Data
|
||||||
|
}
|
||||||
|
|
||||||
public bool Initialized = false;
|
public bool Initialized = false;
|
||||||
private int currentTrack = 0;
|
private int currentTrack = 0;
|
||||||
public int CurrentTrack
|
public int CurrentTrack
|
||||||
@@ -44,16 +51,19 @@ namespace RedBookPlayer
|
|||||||
byte[] flagsData = Image.ReadSectorTag(Image.Tracks[CurrentTrack].TrackSequence, SectorTagType.CdTrackFlags);
|
byte[] flagsData = Image.ReadSectorTag(Image.Tracks[CurrentTrack].TrackSequence, SectorTagType.CdTrackFlags);
|
||||||
ApplyDeEmphasis = ((CdFlags)flagsData[0]).HasFlag(CdFlags.PreEmphasis);
|
ApplyDeEmphasis = ((CdFlags)flagsData[0]).HasFlag(CdFlags.PreEmphasis);
|
||||||
|
|
||||||
|
byte[] subchannel = Image.ReadSectorTag(
|
||||||
|
Image.Tracks[CurrentTrack].TrackStartSector,
|
||||||
|
SectorTagType.CdSectorSubchannel
|
||||||
|
);
|
||||||
|
|
||||||
if (!ApplyDeEmphasis)
|
if (!ApplyDeEmphasis)
|
||||||
{
|
{
|
||||||
byte[] subchannel = Image.ReadSectorTag(
|
|
||||||
Image.Tracks[CurrentTrack].TrackStartSector,
|
|
||||||
SectorTagType.CdSectorSubchannel
|
|
||||||
);
|
|
||||||
|
|
||||||
ApplyDeEmphasis = (subchannel[3] & 0b01000000) != 0;
|
ApplyDeEmphasis = (subchannel[3] & 0b01000000) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CopyAllowed = (subchannel[2] & 0b01000000) != 0;
|
||||||
|
TrackType_ = (subchannel[1] & 0b01000000) != 0 ? TrackType.Data : TrackType.Audio;
|
||||||
|
|
||||||
TrackHasEmphasis = ApplyDeEmphasis;
|
TrackHasEmphasis = ApplyDeEmphasis;
|
||||||
|
|
||||||
TotalIndexes = Image.Tracks[CurrentTrack].Indexes.Keys.Max();
|
TotalIndexes = Image.Tracks[CurrentTrack].Indexes.Keys.Max();
|
||||||
@@ -104,6 +114,8 @@ namespace RedBookPlayer
|
|||||||
}
|
}
|
||||||
public bool TrackHasEmphasis { get; private set; } = false;
|
public bool TrackHasEmphasis { get; private set; } = false;
|
||||||
public bool ApplyDeEmphasis { get; private set; } = false;
|
public bool ApplyDeEmphasis { get; private set; } = false;
|
||||||
|
public bool CopyAllowed { get; private set; } = false;
|
||||||
|
public TrackType? TrackType_ { get; private set; }
|
||||||
public int TotalTracks { get; private set; } = 0;
|
public int TotalTracks { get; private set; } = 0;
|
||||||
public int TotalIndexes { get; private set; } = 0;
|
public int TotalIndexes { get; private set; } = 0;
|
||||||
public ulong TimeOffset { get; private set; } = 0;
|
public ulong TimeOffset { get; private set; } = 0;
|
||||||
|
|||||||
@@ -83,10 +83,16 @@
|
|||||||
<Button Click="DisableDeEmphasisButton_Click" IsVisible="{Binding ApplyDeEmphasis}" Width="200" Margin="0,0,16,0">Disable De-Emphasis</Button>
|
<Button Click="DisableDeEmphasisButton_Click" IsVisible="{Binding ApplyDeEmphasis}" Width="200" Margin="0,0,16,0">Disable De-Emphasis</Button>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
|
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
|
||||||
<TextBlock Margin="0,0,16,0" Foreground="LightGray" IsVisible="{Binding !HiddenTrack}">HIDDEN</TextBlock>
|
<TextBlock Margin="0,0,16,0" Foreground="LightGray" IsVisible="{Binding !IsAudioTrack}">AUDIO</TextBlock>
|
||||||
<TextBlock Margin="0,0,16,0" IsVisible="{Binding HiddenTrack}">HIDDEN</TextBlock>
|
<TextBlock Margin="0,0,16,0" IsVisible="{Binding IsAudioTrack}">AUDIO</TextBlock>
|
||||||
|
<TextBlock Margin="0,0,16,0" Foreground="LightGray" IsVisible="{Binding !IsDataTrack}">DATA</TextBlock>
|
||||||
|
<TextBlock Margin="0,0,16,0" IsVisible="{Binding IsDataTrack}">DATA</TextBlock>
|
||||||
<TextBlock Margin="0,0,16,0" Foreground="LightGray" IsVisible="{Binding !TrackHasEmphasis}">EMPHASIS</TextBlock>
|
<TextBlock Margin="0,0,16,0" Foreground="LightGray" IsVisible="{Binding !TrackHasEmphasis}">EMPHASIS</TextBlock>
|
||||||
<TextBlock Margin="0,0,16,0" IsVisible="{Binding TrackHasEmphasis}">EMPHASIS</TextBlock>
|
<TextBlock Margin="0,0,16,0" IsVisible="{Binding TrackHasEmphasis}">EMPHASIS</TextBlock>
|
||||||
|
<TextBlock Margin="0,0,16,0" Foreground="LightGray" IsVisible="{Binding !CopyAllowed}">COPY</TextBlock>
|
||||||
|
<TextBlock Margin="0,0,16,0" IsVisible="{Binding CopyAllowed}">COPY</TextBlock>
|
||||||
|
<TextBlock Margin="0,0,16,0" Foreground="LightGray" IsVisible="{Binding !HiddenTrack}">HIDDEN</TextBlock>
|
||||||
|
<TextBlock Margin="0,0,16,0" IsVisible="{Binding HiddenTrack}">HIDDEN</TextBlock>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
|||||||
@@ -161,9 +161,13 @@ namespace RedBookPlayer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
((PlayerViewModel)DataContext).HiddenTrack = Player.TimeOffset > 150;
|
PlayerViewModel dataContext = (PlayerViewModel)DataContext;
|
||||||
((PlayerViewModel)DataContext).ApplyDeEmphasis = Player.ApplyDeEmphasis;
|
dataContext.HiddenTrack = Player.TimeOffset > 150;
|
||||||
((PlayerViewModel)DataContext).TrackHasEmphasis = Player.TrackHasEmphasis;
|
dataContext.ApplyDeEmphasis = Player.ApplyDeEmphasis;
|
||||||
|
dataContext.TrackHasEmphasis = Player.TrackHasEmphasis;
|
||||||
|
dataContext.CopyAllowed = Player.CopyAllowed;
|
||||||
|
dataContext.IsAudioTrack = Player.TrackType_ == Player.TrackType.Audio;
|
||||||
|
dataContext.IsDataTrack = Player.TrackType_ == Player.TrackType.Data;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -285,5 +289,23 @@ namespace RedBookPlayer
|
|||||||
get => hiddenTrack;
|
get => hiddenTrack;
|
||||||
set => this.RaiseAndSetIfChanged(ref hiddenTrack, value);
|
set => this.RaiseAndSetIfChanged(ref hiddenTrack, value);
|
||||||
}
|
}
|
||||||
|
private bool copyAllowed;
|
||||||
|
public bool CopyAllowed
|
||||||
|
{
|
||||||
|
get => copyAllowed;
|
||||||
|
set => this.RaiseAndSetIfChanged(ref copyAllowed, value);
|
||||||
|
}
|
||||||
|
private bool isAudioTrack;
|
||||||
|
public bool IsAudioTrack
|
||||||
|
{
|
||||||
|
get => isAudioTrack;
|
||||||
|
set => this.RaiseAndSetIfChanged(ref isAudioTrack, value);
|
||||||
|
}
|
||||||
|
private bool isDataTrack;
|
||||||
|
public bool IsDataTrack
|
||||||
|
{
|
||||||
|
get => isDataTrack;
|
||||||
|
set => this.RaiseAndSetIfChanged(ref isDataTrack, value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user