Add setting to choose downloaded audio quality ((#648)
This commit is contained in:
parent
3be7d8e825
commit
423b5312f7
@ -13,7 +13,11 @@ namespace DataLayer
|
|||||||
LC_64_22050_stereo = (64L << 18) | (22050 << 2) | 2,
|
LC_64_22050_stereo = (64L << 18) | (22050 << 2) | 2,
|
||||||
LC_64_44100_stereo = (64L << 18) | (44100 << 2) | 2,
|
LC_64_44100_stereo = (64L << 18) | (44100 << 2) | 2,
|
||||||
LC_128_44100_stereo = (128L << 18) | (44100 << 2) | 2,
|
LC_128_44100_stereo = (128L << 18) | (44100 << 2) | 2,
|
||||||
}
|
AAX_22_32 = LC_32_22050_stereo,
|
||||||
|
AAX_22_64 = LC_64_22050_stereo,
|
||||||
|
AAX_44_64 = LC_64_44100_stereo,
|
||||||
|
AAX_44_128 = LC_128_44100_stereo
|
||||||
|
}
|
||||||
|
|
||||||
public class AudioFormat : IComparable<AudioFormat>, IComparable
|
public class AudioFormat : IComparable<AudioFormat>, IComparable
|
||||||
{
|
{
|
||||||
|
|||||||
@ -121,8 +121,9 @@ namespace FileLiberator
|
|||||||
|
|
||||||
downloadValidation(libraryBook);
|
downloadValidation(libraryBook);
|
||||||
|
|
||||||
|
var quality = (AudibleApi.DownloadQuality)config.FileDownloadQuality;
|
||||||
var api = await libraryBook.GetApiAsync();
|
var api = await libraryBook.GetApiAsync();
|
||||||
var contentLic = await api.GetDownloadLicenseAsync(libraryBook.Book.AudibleProductId);
|
var contentLic = await api.GetDownloadLicenseAsync(libraryBook.Book.AudibleProductId, quality);
|
||||||
using var dlOptions = BuildDownloadOptions(libraryBook, config, contentLic);
|
using var dlOptions = BuildDownloadOptions(libraryBook, config, contentLic);
|
||||||
|
|
||||||
var outFileName = AudibleFileStorage.Audio.GetInProgressFilename(libraryBook, dlOptions.OutputFormat.ToString().ToLower());
|
var outFileName = AudibleFileStorage.Audio.GetInProgressFilename(libraryBook, dlOptions.OutputFormat.ToString().ToLower());
|
||||||
@ -169,7 +170,10 @@ namespace FileLiberator
|
|||||||
? contentLic.ContentMetadata.ChapterInfo.BrandIntroDurationMs
|
? contentLic.ContentMetadata.ChapterInfo.BrandIntroDurationMs
|
||||||
: 0;
|
: 0;
|
||||||
|
|
||||||
var dlOptions = new DownloadOptions(config, libraryBook, contentLic?.ContentMetadata?.ContentUrl?.OfflineUrl)
|
//Set the requested AudioFormat for use in file naming templates
|
||||||
|
libraryBook.Book.AudioFormat = AudioFormat.FromString(contentLic.ContentMetadata.ContentReference.ContentFormat);
|
||||||
|
|
||||||
|
var dlOptions = new DownloadOptions(config, libraryBook, contentLic?.ContentMetadata?.ContentUrl?.OfflineUrl)
|
||||||
{
|
{
|
||||||
AudibleKey = contentLic?.Voucher?.Key,
|
AudibleKey = contentLic?.Voucher?.Key,
|
||||||
AudibleIV = contentLic?.Voucher?.Iv,
|
AudibleIV = contentLic?.Voucher?.Iv,
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
mc:Ignorable="d" d:DesignWidth="750" d:DesignHeight="600"
|
mc:Ignorable="d" d:DesignWidth="750" d:DesignHeight="650"
|
||||||
xmlns:controls="clr-namespace:LibationAvalonia.Controls"
|
xmlns:controls="clr-namespace:LibationAvalonia.Controls"
|
||||||
xmlns:vm="clr-namespace:LibationAvalonia.ViewModels.Settings"
|
xmlns:vm="clr-namespace:LibationAvalonia.ViewModels.Settings"
|
||||||
x:DataType="vm:AudioSettingsVM"
|
x:DataType="vm:AudioSettingsVM"
|
||||||
@ -32,6 +32,18 @@
|
|||||||
Grid.Row="0"
|
Grid.Row="0"
|
||||||
Grid.Column="0">
|
Grid.Column="0">
|
||||||
|
|
||||||
|
<Grid ColumnDefinitions="*,Auto">
|
||||||
|
<TextBlock
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Text="{CompiledBinding FileDownloadQualityText}" />
|
||||||
|
|
||||||
|
<controls:WheelComboBox
|
||||||
|
Margin="5,0,0,0"
|
||||||
|
Grid.Column="1"
|
||||||
|
ItemsSource="{CompiledBinding DownloadQualities}"
|
||||||
|
SelectedItem="{CompiledBinding FileDownloadQuality}"/>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
<CheckBox IsChecked="{CompiledBinding CreateCueSheet, Mode=TwoWay}">
|
<CheckBox IsChecked="{CompiledBinding CreateCueSheet, Mode=TwoWay}">
|
||||||
<TextBlock Text="{CompiledBinding CreateCueSheetText}" />
|
<TextBlock Text="{CompiledBinding CreateCueSheetText}" />
|
||||||
</CheckBox>
|
</CheckBox>
|
||||||
|
|||||||
@ -48,6 +48,7 @@ namespace LibationAvalonia.ViewModels.Settings
|
|||||||
DownloadCoverArt = config.DownloadCoverArt;
|
DownloadCoverArt = config.DownloadCoverArt;
|
||||||
RetainAaxFile = config.RetainAaxFile;
|
RetainAaxFile = config.RetainAaxFile;
|
||||||
DownloadClipsBookmarks = config.DownloadClipsBookmarks;
|
DownloadClipsBookmarks = config.DownloadClipsBookmarks;
|
||||||
|
FileDownloadQuality = config.FileDownloadQuality;
|
||||||
ClipBookmarkFormat = config.ClipsBookmarksFileFormat;
|
ClipBookmarkFormat = config.ClipsBookmarksFileFormat;
|
||||||
SplitFilesByChapter = config.SplitFilesByChapter;
|
SplitFilesByChapter = config.SplitFilesByChapter;
|
||||||
MergeOpeningAndEndCredits = config.MergeOpeningAndEndCredits;
|
MergeOpeningAndEndCredits = config.MergeOpeningAndEndCredits;
|
||||||
@ -74,6 +75,7 @@ namespace LibationAvalonia.ViewModels.Settings
|
|||||||
config.DownloadCoverArt = DownloadCoverArt;
|
config.DownloadCoverArt = DownloadCoverArt;
|
||||||
config.RetainAaxFile = RetainAaxFile;
|
config.RetainAaxFile = RetainAaxFile;
|
||||||
config.DownloadClipsBookmarks = DownloadClipsBookmarks;
|
config.DownloadClipsBookmarks = DownloadClipsBookmarks;
|
||||||
|
config.FileDownloadQuality = FileDownloadQuality;
|
||||||
config.ClipsBookmarksFileFormat = ClipBookmarkFormat;
|
config.ClipsBookmarksFileFormat = ClipBookmarkFormat;
|
||||||
config.SplitFilesByChapter = SplitFilesByChapter;
|
config.SplitFilesByChapter = SplitFilesByChapter;
|
||||||
config.MergeOpeningAndEndCredits = MergeOpeningAndEndCredits;
|
config.MergeOpeningAndEndCredits = MergeOpeningAndEndCredits;
|
||||||
@ -93,7 +95,9 @@ namespace LibationAvalonia.ViewModels.Settings
|
|||||||
config.MaxSampleRate = SelectedSampleRate?.Value ?? config.MaxSampleRate;
|
config.MaxSampleRate = SelectedSampleRate?.Value ?? config.MaxSampleRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AvaloniaList<Configuration.DownloadQuality> DownloadQualities { get; } = new(Enum<Configuration.DownloadQuality>.GetValues());
|
||||||
public AvaloniaList<Configuration.ClipBookmarkFormat> ClipBookmarkFormats { get; } = new(Enum<Configuration.ClipBookmarkFormat>.GetValues());
|
public AvaloniaList<Configuration.ClipBookmarkFormat> ClipBookmarkFormats { get; } = new(Enum<Configuration.ClipBookmarkFormat>.GetValues());
|
||||||
|
public string FileDownloadQualityText { get; } = Configuration.GetDescription(nameof(Configuration.FileDownloadQuality));
|
||||||
public string CreateCueSheetText { get; } = Configuration.GetDescription(nameof(Configuration.CreateCueSheet));
|
public string CreateCueSheetText { get; } = Configuration.GetDescription(nameof(Configuration.CreateCueSheet));
|
||||||
public string AllowLibationFixupText { get; } = Configuration.GetDescription(nameof(Configuration.AllowLibationFixup));
|
public string AllowLibationFixupText { get; } = Configuration.GetDescription(nameof(Configuration.AllowLibationFixup));
|
||||||
public string DownloadCoverArtText { get; } = Configuration.GetDescription(nameof(Configuration.DownloadCoverArt));
|
public string DownloadCoverArtText { get; } = Configuration.GetDescription(nameof(Configuration.DownloadCoverArt));
|
||||||
@ -109,6 +113,7 @@ namespace LibationAvalonia.ViewModels.Settings
|
|||||||
public bool DownloadCoverArt { get; set; }
|
public bool DownloadCoverArt { get; set; }
|
||||||
public bool RetainAaxFile { get; set; }
|
public bool RetainAaxFile { get; set; }
|
||||||
public bool DownloadClipsBookmarks { get => _downloadClipsBookmarks; set => this.RaiseAndSetIfChanged(ref _downloadClipsBookmarks, value); }
|
public bool DownloadClipsBookmarks { get => _downloadClipsBookmarks; set => this.RaiseAndSetIfChanged(ref _downloadClipsBookmarks, value); }
|
||||||
|
public Configuration.DownloadQuality FileDownloadQuality { get; set; }
|
||||||
public Configuration.ClipBookmarkFormat ClipBookmarkFormat { get; set; }
|
public Configuration.ClipBookmarkFormat ClipBookmarkFormat { get; set; }
|
||||||
public bool MergeOpeningAndEndCredits { get; set; }
|
public bool MergeOpeningAndEndCredits { get; set; }
|
||||||
public bool StripAudibleBrandAudio { get; set; }
|
public bool StripAudibleBrandAudio { get; set; }
|
||||||
|
|||||||
@ -205,6 +205,16 @@ namespace LibationFileManager
|
|||||||
Added
|
Added
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[JsonConverter(typeof(StringEnumConverter))]
|
||||||
|
public enum DownloadQuality
|
||||||
|
{
|
||||||
|
High,
|
||||||
|
Normal
|
||||||
|
}
|
||||||
|
|
||||||
|
[Description("Audio quality to request from Audible:")]
|
||||||
|
public DownloadQuality FileDownloadQuality { get => GetNonString(defaultValue: DownloadQuality.High); set => SetNonString(value); }
|
||||||
|
|
||||||
[Description("Set file \"created\" timestamp to:")]
|
[Description("Set file \"created\" timestamp to:")]
|
||||||
public DateTimeSource CreationTime { get => GetNonString(defaultValue: DateTimeSource.File); set => SetNonString(value); }
|
public DateTimeSource CreationTime { get => GetNonString(defaultValue: DateTimeSource.File); set => SetNonString(value); }
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,7 @@ namespace LibationWinForms.Dialogs
|
|||||||
{
|
{
|
||||||
private void Load_AudioSettings(Configuration config)
|
private void Load_AudioSettings(Configuration config)
|
||||||
{
|
{
|
||||||
|
this.fileDownloadQualityLbl.Text = desc(nameof(config.FileDownloadQuality));
|
||||||
this.allowLibationFixupCbox.Text = desc(nameof(config.AllowLibationFixup));
|
this.allowLibationFixupCbox.Text = desc(nameof(config.AllowLibationFixup));
|
||||||
this.createCueSheetCbox.Text = desc(nameof(config.CreateCueSheet));
|
this.createCueSheetCbox.Text = desc(nameof(config.CreateCueSheet));
|
||||||
this.downloadCoverArtCbox.Text = desc(nameof(config.DownloadCoverArt));
|
this.downloadCoverArtCbox.Text = desc(nameof(config.DownloadCoverArt));
|
||||||
@ -19,6 +20,13 @@ namespace LibationWinForms.Dialogs
|
|||||||
this.stripUnabridgedCbox.Text = desc(nameof(config.StripUnabridged));
|
this.stripUnabridgedCbox.Text = desc(nameof(config.StripUnabridged));
|
||||||
this.moveMoovAtomCbox.Text = desc(nameof(config.MoveMoovToBeginning));
|
this.moveMoovAtomCbox.Text = desc(nameof(config.MoveMoovToBeginning));
|
||||||
|
|
||||||
|
fileDownloadQualityCb.Items.AddRange(
|
||||||
|
new object[]
|
||||||
|
{
|
||||||
|
Configuration.DownloadQuality.Normal,
|
||||||
|
Configuration.DownloadQuality.High
|
||||||
|
});
|
||||||
|
|
||||||
clipsBookmarksFormatCb.Items.AddRange(
|
clipsBookmarksFormatCb.Items.AddRange(
|
||||||
new object[]
|
new object[]
|
||||||
{
|
{
|
||||||
@ -44,6 +52,7 @@ namespace LibationWinForms.Dialogs
|
|||||||
createCueSheetCbox.Checked = config.CreateCueSheet;
|
createCueSheetCbox.Checked = config.CreateCueSheet;
|
||||||
downloadCoverArtCbox.Checked = config.DownloadCoverArt;
|
downloadCoverArtCbox.Checked = config.DownloadCoverArt;
|
||||||
downloadClipsBookmarksCbox.Checked = config.DownloadClipsBookmarks;
|
downloadClipsBookmarksCbox.Checked = config.DownloadClipsBookmarks;
|
||||||
|
fileDownloadQualityCb.SelectedItem = config.FileDownloadQuality;
|
||||||
clipsBookmarksFormatCb.SelectedItem = config.ClipsBookmarksFileFormat;
|
clipsBookmarksFormatCb.SelectedItem = config.ClipsBookmarksFileFormat;
|
||||||
retainAaxFileCbox.Checked = config.RetainAaxFile;
|
retainAaxFileCbox.Checked = config.RetainAaxFile;
|
||||||
splitFilesByChapterCbox.Checked = config.SplitFilesByChapter;
|
splitFilesByChapterCbox.Checked = config.SplitFilesByChapter;
|
||||||
@ -87,6 +96,7 @@ namespace LibationWinForms.Dialogs
|
|||||||
config.CreateCueSheet = createCueSheetCbox.Checked;
|
config.CreateCueSheet = createCueSheetCbox.Checked;
|
||||||
config.DownloadCoverArt = downloadCoverArtCbox.Checked;
|
config.DownloadCoverArt = downloadCoverArtCbox.Checked;
|
||||||
config.DownloadClipsBookmarks = downloadClipsBookmarksCbox.Checked;
|
config.DownloadClipsBookmarks = downloadClipsBookmarksCbox.Checked;
|
||||||
|
config.FileDownloadQuality = (Configuration.DownloadQuality)fileDownloadQualityCb.SelectedItem;
|
||||||
config.ClipsBookmarksFileFormat = (Configuration.ClipBookmarkFormat)clipsBookmarksFormatCb.SelectedItem;
|
config.ClipsBookmarksFileFormat = (Configuration.ClipBookmarkFormat)clipsBookmarksFormatCb.SelectedItem;
|
||||||
config.RetainAaxFile = retainAaxFileCbox.Checked;
|
config.RetainAaxFile = retainAaxFileCbox.Checked;
|
||||||
config.SplitFilesByChapter = splitFilesByChapterCbox.Checked;
|
config.SplitFilesByChapter = splitFilesByChapterCbox.Checked;
|
||||||
@ -98,7 +108,6 @@ namespace LibationWinForms.Dialogs
|
|||||||
config.LameTargetBitrate = lameTargetBitrateRb.Checked;
|
config.LameTargetBitrate = lameTargetBitrateRb.Checked;
|
||||||
config.MaxSampleRate = ((EnumDiaplay<AAXClean.SampleRate>)maxSampleRateCb.SelectedItem).Value;
|
config.MaxSampleRate = ((EnumDiaplay<AAXClean.SampleRate>)maxSampleRateCb.SelectedItem).Value;
|
||||||
config.LameEncoderQuality = (NAudio.Lame.EncoderQuality)encoderQualityCb.SelectedItem;
|
config.LameEncoderQuality = (NAudio.Lame.EncoderQuality)encoderQualityCb.SelectedItem;
|
||||||
encoderQualityCb.SelectedItem = config.LameEncoderQuality;
|
|
||||||
config.LameDownsampleMono = lameDownsampleMonoCbox.Checked;
|
config.LameDownsampleMono = lameDownsampleMonoCbox.Checked;
|
||||||
config.LameBitrate = lameBitrateTb.Value;
|
config.LameBitrate = lameBitrateTb.Value;
|
||||||
config.LameConstantBitrate = lameConstantBitrateCbox.Checked;
|
config.LameConstantBitrate = lameConstantBitrateCbox.Checked;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -14,15 +14,6 @@ namespace LibationWinForms.Dialogs
|
|||||||
this.importEpisodesCb.Text = desc(nameof(config.ImportEpisodes));
|
this.importEpisodesCb.Text = desc(nameof(config.ImportEpisodes));
|
||||||
this.downloadEpisodesCb.Text = desc(nameof(config.DownloadEpisodes));
|
this.downloadEpisodesCb.Text = desc(nameof(config.DownloadEpisodes));
|
||||||
this.autoDownloadEpisodesCb.Text = desc(nameof(config.AutoDownloadEpisodes));
|
this.autoDownloadEpisodesCb.Text = desc(nameof(config.AutoDownloadEpisodes));
|
||||||
creationTimeLbl.Text = desc(nameof(config.CreationTime));
|
|
||||||
lastWriteTimeLbl.Text = desc(nameof(config.LastWriteTime));
|
|
||||||
|
|
||||||
var dateTimeSources = Enum.GetValues<Configuration.DateTimeSource>().Select(v => new EnumDiaplay<Configuration.DateTimeSource>(v)).ToArray();
|
|
||||||
creationTimeCb.Items.AddRange(dateTimeSources);
|
|
||||||
lastWriteTimeCb.Items.AddRange(dateTimeSources);
|
|
||||||
|
|
||||||
creationTimeCb.SelectedItem = dateTimeSources.SingleOrDefault(v => v.Value == config.CreationTime) ?? dateTimeSources[0];
|
|
||||||
lastWriteTimeCb.SelectedItem = dateTimeSources.SingleOrDefault(v => v.Value == config.LastWriteTime) ?? dateTimeSources[0];
|
|
||||||
|
|
||||||
autoScanCb.Checked = config.AutoScan;
|
autoScanCb.Checked = config.AutoScan;
|
||||||
showImportedStatsCb.Checked = config.ShowImportedStats;
|
showImportedStatsCb.Checked = config.ShowImportedStats;
|
||||||
@ -32,9 +23,6 @@ namespace LibationWinForms.Dialogs
|
|||||||
}
|
}
|
||||||
private void Save_ImportLibrary(Configuration config)
|
private void Save_ImportLibrary(Configuration config)
|
||||||
{
|
{
|
||||||
config.CreationTime = ((EnumDiaplay<Configuration.DateTimeSource>)creationTimeCb.SelectedItem).Value;
|
|
||||||
config.LastWriteTime = ((EnumDiaplay<Configuration.DateTimeSource>)lastWriteTimeCb.SelectedItem).Value;
|
|
||||||
|
|
||||||
config.AutoScan = autoScanCb.Checked;
|
config.AutoScan = autoScanCb.Checked;
|
||||||
config.ShowImportedStats = showImportedStatsCb.Checked;
|
config.ShowImportedStats = showImportedStatsCb.Checked;
|
||||||
config.ImportEpisodes = importEpisodesCb.Checked;
|
config.ImportEpisodes = importEpisodesCb.Checked;
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
using Dinah.Core;
|
using Dinah.Core;
|
||||||
using FileManager;
|
using FileManager;
|
||||||
using LibationFileManager;
|
using LibationFileManager;
|
||||||
|
using LibationUiBase;
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -25,6 +26,16 @@ namespace LibationWinForms.Dialogs
|
|||||||
betaOptInCbox.Text = desc(nameof(config.BetaOptIn));
|
betaOptInCbox.Text = desc(nameof(config.BetaOptIn));
|
||||||
saveEpisodesToSeriesFolderCbox.Text = desc(nameof(config.SavePodcastsToParentFolder));
|
saveEpisodesToSeriesFolderCbox.Text = desc(nameof(config.SavePodcastsToParentFolder));
|
||||||
overwriteExistingCbox.Text = desc(nameof(config.OverwriteExisting));
|
overwriteExistingCbox.Text = desc(nameof(config.OverwriteExisting));
|
||||||
|
creationTimeLbl.Text = desc(nameof(config.CreationTime));
|
||||||
|
lastWriteTimeLbl.Text = desc(nameof(config.LastWriteTime));
|
||||||
|
|
||||||
|
var dateTimeSources = Enum.GetValues<Configuration.DateTimeSource>().Select(v => new EnumDiaplay<Configuration.DateTimeSource>(v)).ToArray();
|
||||||
|
creationTimeCb.Items.AddRange(dateTimeSources);
|
||||||
|
lastWriteTimeCb.Items.AddRange(dateTimeSources);
|
||||||
|
|
||||||
|
creationTimeCb.SelectedItem = dateTimeSources.SingleOrDefault(v => v.Value == config.CreationTime) ?? dateTimeSources[0];
|
||||||
|
lastWriteTimeCb.SelectedItem = dateTimeSources.SingleOrDefault(v => v.Value == config.LastWriteTime) ?? dateTimeSources[0];
|
||||||
|
|
||||||
|
|
||||||
booksSelectControl.SetSearchTitle("books location");
|
booksSelectControl.SetSearchTitle("books location");
|
||||||
booksSelectControl.SetDirectoryItems(
|
booksSelectControl.SetDirectoryItems(
|
||||||
@ -82,6 +93,11 @@ namespace LibationWinForms.Dialogs
|
|||||||
config.OverwriteExisting = overwriteExistingCbox.Checked;
|
config.OverwriteExisting = overwriteExistingCbox.Checked;
|
||||||
|
|
||||||
config.BetaOptIn = betaOptInCbox.Checked;
|
config.BetaOptIn = betaOptInCbox.Checked;
|
||||||
|
|
||||||
|
|
||||||
|
config.CreationTime = ((EnumDiaplay<Configuration.DateTimeSource>)creationTimeCb.SelectedItem).Value;
|
||||||
|
config.LastWriteTime = ((EnumDiaplay<Configuration.DateTimeSource>)lastWriteTimeCb.SelectedItem).Value;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user