├── .gitattributes
├── .github
└── workflows
│ └── build-and-test.yml
├── .gitignore
├── AudioWorks
├── .editorconfig
├── AudioWorks.sln
├── AudioWorks.sln.DotSettings
├── Directory.Build.props
├── src
│ ├── AudioWorks.Api
│ │ ├── AssemblyInfo.cs
│ │ ├── AudioAnalyzerInfo.cs
│ │ ├── AudioAnalyzerManager.cs
│ │ ├── AudioEncoderInfo.cs
│ │ ├── AudioEncoderManager.cs
│ │ ├── AudioFile.cs
│ │ ├── AudioFileAnalyzer.cs
│ │ ├── AudioFileEncoder.cs
│ │ ├── AudioFileFormatInfo.cs
│ │ ├── AudioFileManager.cs
│ │ ├── AudioMetadataEncoderInfo.cs
│ │ ├── AudioMetadataEncoderManager.cs
│ │ ├── AudioWorks.Api.csproj
│ │ ├── CoverArtExtractor.cs
│ │ ├── EncodedPath.cs
│ │ ├── ExtensionMethods.cs
│ │ ├── ExtensionProviderWrapper.cs
│ │ ├── Icon.png
│ │ ├── ProgressToken.cs
│ │ ├── Readme.md
│ │ ├── SimpleProgress.cs
│ │ ├── TaggedAudioFile.cs
│ │ └── ValidatingSettingDictionary.cs
│ ├── AudioWorks.Commands
│ │ ├── AnalyzerCompleter.cs
│ │ ├── AssemblyInfo.cs
│ │ ├── AudioWorks.Commands.csproj
│ │ ├── AudioWorks.Commands.format.ps1xml
│ │ ├── AudioWorks.Commands.psd1
│ │ ├── AudioWorks.Commands.psm1
│ │ ├── COPYING
│ │ ├── ClearAudioMetadataCommand.cs
│ │ ├── CmdletLogger.cs
│ │ ├── CmdletLoggerProvider.cs
│ │ ├── EncoderCompleter.cs
│ │ ├── ExportAudioCoverArtCommand.cs
│ │ ├── ExportAudioFileCommand.cs
│ │ ├── ExtensionMethods.cs
│ │ ├── GetAudioAnalyzerInfoCommand.cs
│ │ ├── GetAudioCoverArtCommand.cs
│ │ ├── GetAudioEncoderInfoCommand.cs
│ │ ├── GetAudioFileCommand.cs
│ │ ├── GetAudioInfoCommand.cs
│ │ ├── GetAudioMetadataCommand.cs
│ │ ├── GetAudioMetadataEncoderInfoCommand.cs
│ │ ├── Icon.png
│ │ ├── LoggingCmdlet.cs
│ │ ├── LoggingPSCmdlet.cs
│ │ ├── MeasureAudioFileCommand.cs
│ │ ├── MetadataFormatCompleter.cs
│ │ ├── NullScope.cs
│ │ ├── PublishModule.ps1
│ │ ├── RenameAudioFileCommand .cs
│ │ ├── SaveAudioMetadataCommand.cs
│ │ ├── SetAudioMetadataCommand.cs
│ │ ├── SettingAdapter.cs
│ │ └── docs
│ │ │ ├── Clear-AudioMetadata.md
│ │ │ ├── Export-AudioCoverArt.md
│ │ │ ├── Export-AudioFile.md
│ │ │ ├── Get-AudioAnalyzerInfo.md
│ │ │ ├── Get-AudioCoverArt.md
│ │ │ ├── Get-AudioEncoderInfo.md
│ │ │ ├── Get-AudioFile.md
│ │ │ ├── Get-AudioInfo.md
│ │ │ ├── Get-AudioMetadata.md
│ │ │ ├── Get-AudioMetadataEncoderInfo.md
│ │ │ ├── Measure-AudioFile.md
│ │ │ ├── Rename-AudioFile.md
│ │ │ ├── Save-AudioMetadata.md
│ │ │ ├── Set-AudioMetadata.md
│ │ │ └── about_AudioWorks.Commands.md
│ ├── AudioWorks.Common
│ │ ├── AssemblyInfo.cs
│ │ ├── AudioEncodingException.cs
│ │ ├── AudioException.cs
│ │ ├── AudioInfo.cs
│ │ ├── AudioInvalidException.cs
│ │ ├── AudioMetadata.cs
│ │ ├── AudioMetadataInvalidException.cs
│ │ ├── AudioUnsupportedException.cs
│ │ ├── AudioWorks.Common.csproj
│ │ ├── BoolSettingInfo.cs
│ │ ├── CoverArt.cs
│ │ ├── CoverArtFactory.cs
│ │ ├── DateTimeSettingInfo.cs
│ │ ├── IAudioFile.cs
│ │ ├── ICoverArt.cs
│ │ ├── ITaggedAudioFile.cs
│ │ ├── ImageInvalidException.cs
│ │ ├── ImageUnsupportedException.cs
│ │ ├── IntSettingInfo.cs
│ │ ├── LoggerManager.cs
│ │ ├── Readme.md
│ │ ├── SettingDictionary.cs
│ │ ├── SettingInfo.cs
│ │ ├── SettingInfoDictionary.cs
│ │ └── StringSettingInfo.cs
│ ├── AudioWorks.Extensibility
│ │ ├── AssemblyInfo.cs
│ │ ├── AudioAnalyzerExportAttribute.cs
│ │ ├── AudioDecoderExportAttribute.cs
│ │ ├── AudioEncoderExportAttribute.cs
│ │ ├── AudioFilterExportAttribute.cs
│ │ ├── AudioInfoDecoderExportAttribute.cs
│ │ ├── AudioMetadataDecoderExportAttribute.cs
│ │ ├── AudioMetadataEncoderExportAttribute.cs
│ │ ├── AudioWorks.Extensibility.csproj
│ │ ├── ExtensionContainer.cs
│ │ ├── ExtensionContainerBase.cs
│ │ ├── ExtensionProvider.cs
│ │ ├── GroupToken.cs
│ │ ├── IAudioAnalyzer.cs
│ │ ├── IAudioDecoder.cs
│ │ ├── IAudioEncoder.cs
│ │ ├── IAudioFilter.cs
│ │ ├── IAudioInfoDecoder.cs
│ │ ├── IAudioMetadataDecoder.cs
│ │ ├── IAudioMetadataEncoder.cs
│ │ ├── IPrerequisiteHandler.cs
│ │ ├── ISampleProcessor.cs
│ │ ├── Int24.cs
│ │ ├── PrerequisiteValidatorExportAttribute.cs
│ │ ├── Readme.md
│ │ ├── SampleBuffer.cs
│ │ ├── SampleProcessor.cs
│ │ └── TempFileStream.cs
│ ├── Directory.Build.props
│ ├── Extensions
│ │ ├── .editorconfig
│ │ ├── AudioWorks.Extensions.Apple
│ │ │ ├── AacAudioEncoder.cs
│ │ │ ├── AlacAudioDecoder.cs
│ │ │ ├── AlacAudioEncoder.cs
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── AudioBuffer.cs
│ │ │ ├── AudioBufferListSingle.cs
│ │ │ ├── AudioConverter.cs
│ │ │ ├── AudioConverterHandle.cs
│ │ │ ├── AudioFile.cs
│ │ │ ├── AudioFileHandle.cs
│ │ │ ├── AudioStreamBasicDescription.cs
│ │ │ ├── AudioStreamPacketDescription.cs
│ │ │ ├── AudioWorks.Extensions.Apple.csproj
│ │ │ ├── CoreAudioHandler.cs
│ │ │ ├── CoreAudioToolbox.cs
│ │ │ ├── Enumerations.cs
│ │ │ ├── ExtendedAudioFile.cs
│ │ │ ├── ExtendedAudioFileHandle.cs
│ │ │ ├── Pack.nuspec
│ │ │ └── Readme.md
│ │ ├── AudioWorks.Extensions.Flac
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── AudioWorks.Extensions.Flac.csproj
│ │ │ ├── Decoder
│ │ │ │ ├── AudioInfoStreamDecoder.cs
│ │ │ │ ├── AudioStreamDecoder.cs
│ │ │ │ ├── Enumerations.cs
│ │ │ │ ├── FlacAudioDecoder.cs
│ │ │ │ ├── FlacAudioInfoDecoder.cs
│ │ │ │ ├── FlacAudioMetadataDecoder.cs
│ │ │ │ ├── Frame.cs
│ │ │ │ ├── FrameFooter.cs
│ │ │ │ ├── FrameHeader.cs
│ │ │ │ ├── LibFlac.cs
│ │ │ │ ├── MetadataStreamDecoder.cs
│ │ │ │ ├── StreamDecoder.cs
│ │ │ │ ├── StreamDecoderHandle.cs
│ │ │ │ └── VorbisCommentToMetadataAdapter.cs
│ │ │ ├── Encoder
│ │ │ │ ├── Enumerations.cs
│ │ │ │ ├── FlacAudioEncoder.cs
│ │ │ │ ├── LibFlac.cs
│ │ │ │ ├── StreamEncoder.cs
│ │ │ │ └── StreamEncoderHandle.cs
│ │ │ ├── FlacLibHandler.cs
│ │ │ ├── Kernel32.cs
│ │ │ ├── LibDl.cs
│ │ │ ├── Metadata
│ │ │ │ ├── CoverArtToPictureMetadataObjectAdapter.cs
│ │ │ │ ├── Enumerations.cs
│ │ │ │ ├── FlacAudioMetadataEncoder.cs
│ │ │ │ ├── IoCallbacks.cs
│ │ │ │ ├── LibFlac.cs
│ │ │ │ ├── MetadataBlock.cs
│ │ │ │ ├── MetadataChain.cs
│ │ │ │ ├── MetadataChainHandle.cs
│ │ │ │ ├── MetadataIterator.cs
│ │ │ │ ├── MetadataIteratorHandle.cs
│ │ │ │ ├── MetadataObject.cs
│ │ │ │ ├── MetadataObjectHandle.cs
│ │ │ │ ├── MetadataToVorbisCommentAdapter.cs
│ │ │ │ ├── PaddingMetadataObject.cs
│ │ │ │ ├── Picture.cs
│ │ │ │ ├── PictureMetadataObject.cs
│ │ │ │ ├── SeekTableMetadataObject.cs
│ │ │ │ ├── StreamInfo.cs
│ │ │ │ ├── VorbisComment.cs
│ │ │ │ ├── VorbisCommentEntry.cs
│ │ │ │ └── VorbisCommentMetadataObject.cs
│ │ │ ├── Pack.nuspec
│ │ │ ├── Readme.md
│ │ │ └── runtimes
│ │ │ │ ├── osx-arm64
│ │ │ │ └── native
│ │ │ │ │ ├── libFLAC.dylib
│ │ │ │ │ └── libogg.dylib
│ │ │ │ ├── osx-x64
│ │ │ │ └── native
│ │ │ │ │ ├── libFLAC.dylib
│ │ │ │ │ └── libogg.dylib
│ │ │ │ ├── win-x64
│ │ │ │ └── native
│ │ │ │ │ └── FLAC.dll
│ │ │ │ └── win-x86
│ │ │ │ └── native
│ │ │ │ └── FLAC.dll
│ │ ├── AudioWorks.Extensions.Id3
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── AudioWorks.Extensions.Id3.csproj
│ │ │ ├── FrameAttribute.cs
│ │ │ ├── FrameBase.cs
│ │ │ ├── FrameFactory.cs
│ │ │ ├── FrameFlags.cs
│ │ │ ├── FrameFullText.cs
│ │ │ ├── FramePicture.cs
│ │ │ ├── FrameText.cs
│ │ │ ├── FrameTextUserDef.cs
│ │ │ ├── ID3v1.cs
│ │ │ ├── IFrameDescription.cs
│ │ │ ├── Id3AudioMetadataDecoder.cs
│ │ │ ├── Id3AudioMetadataEncoder.cs
│ │ │ ├── Id3V1ToMetadataAdapter.cs
│ │ │ ├── MetadataToTagModelAdapter.cs
│ │ │ ├── NativeEnumerations.cs
│ │ │ ├── Pack.nuspec
│ │ │ ├── Readme.md
│ │ │ ├── Sync.cs
│ │ │ ├── TagExtendedHeader.cs
│ │ │ ├── TagHeader.cs
│ │ │ ├── TagManager.cs
│ │ │ ├── TagModel.cs
│ │ │ ├── TagModelToMetadataAdapter.cs
│ │ │ ├── TagNotFoundException.cs
│ │ │ ├── TagReader.cs
│ │ │ ├── TagWriter.cs
│ │ │ └── TextBuilder.cs
│ │ ├── AudioWorks.Extensions.Lame
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── AudioWorks.Extensions.Lame.csproj
│ │ │ ├── Encoder.cs
│ │ │ ├── EncoderHandle.cs
│ │ │ ├── Enumerations.cs
│ │ │ ├── LameAudioEncoder.cs
│ │ │ ├── LameLibHandler.cs
│ │ │ ├── LibMp3Lame.cs
│ │ │ ├── Pack.nuspec
│ │ │ ├── Readme.md
│ │ │ └── runtimes
│ │ │ │ ├── osx-arm64
│ │ │ │ └── native
│ │ │ │ │ └── libmp3lame.dylib
│ │ │ │ ├── osx-x64
│ │ │ │ └── native
│ │ │ │ │ └── libmp3lame.dylib
│ │ │ │ ├── win-x64
│ │ │ │ └── native
│ │ │ │ │ └── mp3lame.dll
│ │ │ │ └── win-x86
│ │ │ │ └── native
│ │ │ │ └── mp3lame.dll
│ │ ├── AudioWorks.Extensions.Mp3
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── AudioWorks.Extensions.Mp3.csproj
│ │ │ ├── FrameHeader.cs
│ │ │ ├── FrameReader.cs
│ │ │ ├── Mp3AudioInfoDecoder.cs
│ │ │ ├── OptionalHeader.cs
│ │ │ ├── Pack.nuspec
│ │ │ └── Readme.md
│ │ ├── AudioWorks.Extensions.Mp4
│ │ │ ├── AlacAtom.cs
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── AtomInfo.cs
│ │ │ ├── AudioWorks.Extensions.Mp4.csproj
│ │ │ ├── CoverAtom.cs
│ │ │ ├── EsdsAtom.cs
│ │ │ ├── FreeAtom.cs
│ │ │ ├── IlstAtomToMetadataAdapter.cs
│ │ │ ├── ItunesAudioMetadataDecoder.cs
│ │ │ ├── ItunesAudioMetadataEncoder.cs
│ │ │ ├── MetadataToIlstAtomAdapter.cs
│ │ │ ├── Mp4AudioInfoDecoder.cs
│ │ │ ├── Mp4Model.cs
│ │ │ ├── Mp4Reader.cs
│ │ │ ├── Mp4Writer.cs
│ │ │ ├── Pack.nuspec
│ │ │ ├── Readme.md
│ │ │ ├── ReverseDnsAtom.cs
│ │ │ ├── SttsAtom.cs
│ │ │ ├── TextAtom.cs
│ │ │ ├── TrackNumberAtom.cs
│ │ │ └── WritableAtom.cs
│ │ ├── AudioWorks.Extensions.Opus
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── AudioWorks.Extensions.Opus.csproj
│ │ │ ├── CommentHeaderToMetadataAdapter.cs
│ │ │ ├── CoverArtAdapter.cs
│ │ │ ├── Encoder.cs
│ │ │ ├── Enumerations.cs
│ │ │ ├── LibOgg.cs
│ │ │ ├── LibOpus.cs
│ │ │ ├── LibOpusEnc.cs
│ │ │ ├── MetadataToOpusCommentAdapter.cs
│ │ │ ├── OggPacket.cs
│ │ │ ├── OggPage.cs
│ │ │ ├── OggStream.cs
│ │ │ ├── OggStreamState.cs
│ │ │ ├── OggSync.cs
│ │ │ ├── OggSyncState.cs
│ │ │ ├── OpusAudioEncoder.cs
│ │ │ ├── OpusAudioInfoDecoder.cs
│ │ │ ├── OpusAudioMetadataDecoder.cs
│ │ │ ├── OpusAudioMetadataEncoder.cs
│ │ │ ├── OpusCommentsHandle.cs
│ │ │ ├── OpusEncoderCallbacks.cs
│ │ │ ├── OpusEncoderHandle.cs
│ │ │ ├── OpusLibHandler.cs
│ │ │ ├── Pack.nuspec
│ │ │ ├── Readme.md
│ │ │ └── runtimes
│ │ │ │ ├── linux-x64
│ │ │ │ └── native
│ │ │ │ │ └── libopusenc.so
│ │ │ │ ├── osx-arm64
│ │ │ │ └── native
│ │ │ │ │ ├── libogg.dylib
│ │ │ │ │ ├── libopus.dylib
│ │ │ │ │ └── libopusenc.dylib
│ │ │ │ ├── osx-x64
│ │ │ │ └── native
│ │ │ │ │ ├── libogg.dylib
│ │ │ │ │ ├── libopus.dylib
│ │ │ │ │ └── libopusenc.dylib
│ │ │ │ ├── win-x64
│ │ │ │ └── native
│ │ │ │ │ ├── ogg.dll
│ │ │ │ │ ├── opus.dll
│ │ │ │ │ └── opusenc.dll
│ │ │ │ └── win-x86
│ │ │ │ └── native
│ │ │ │ ├── ogg.dll
│ │ │ │ ├── opus.dll
│ │ │ │ └── opusenc.dll
│ │ ├── AudioWorks.Extensions.ReplayGain
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── AudioWorks.Extensions.ReplayGain.csproj
│ │ │ ├── Ebur128LibHandler.cs
│ │ │ ├── Enumerations.cs
│ │ │ ├── GroupState.cs
│ │ │ ├── LibEbur128.cs
│ │ │ ├── Pack.nuspec
│ │ │ ├── R128Analyzer.cs
│ │ │ ├── Readme.md
│ │ │ ├── ReplayGainAnalyzer.cs
│ │ │ ├── ReplayGainFilter.cs
│ │ │ ├── StateHandle.cs
│ │ │ └── runtimes
│ │ │ │ ├── osx-arm64
│ │ │ │ └── native
│ │ │ │ │ └── libebur128.dylib
│ │ │ │ ├── osx-x64
│ │ │ │ └── native
│ │ │ │ │ └── libebur128.dylib
│ │ │ │ ├── win-x64
│ │ │ │ └── native
│ │ │ │ │ └── ebur128.dll
│ │ │ │ └── win-x86
│ │ │ │ └── native
│ │ │ │ └── ebur128.dll
│ │ ├── AudioWorks.Extensions.Vorbis
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── AudioWorks.Extensions.Vorbis.csproj
│ │ │ ├── CoverArtAdapter.cs
│ │ │ ├── LibOgg.cs
│ │ │ ├── LibVorbis.cs
│ │ │ ├── LibVorbisEnc.cs
│ │ │ ├── MetadataToVorbisCommentAdapter.cs
│ │ │ ├── OggPackBuffer.cs
│ │ │ ├── OggPacket.cs
│ │ │ ├── OggPage.cs
│ │ │ ├── OggStream.cs
│ │ │ ├── OggStreamState.cs
│ │ │ ├── OggSync.cs
│ │ │ ├── OggSyncState.cs
│ │ │ ├── Pack.nuspec
│ │ │ ├── Readme.md
│ │ │ ├── VorbisAudioEncoder.cs
│ │ │ ├── VorbisAudioInfoDecoder.cs
│ │ │ ├── VorbisAudioMetadataDecoder.cs
│ │ │ ├── VorbisAudioMetadataEncoder.cs
│ │ │ ├── VorbisBlock.cs
│ │ │ ├── VorbisComment.cs
│ │ │ ├── VorbisCommentToMetadataAdapter.cs
│ │ │ ├── VorbisDecoder.cs
│ │ │ ├── VorbisDspState.cs
│ │ │ ├── VorbisEncoder.cs
│ │ │ ├── VorbisInfo.cs
│ │ │ ├── VorbisLibHandler.cs
│ │ │ └── runtimes
│ │ │ │ ├── osx-arm64
│ │ │ │ └── native
│ │ │ │ │ ├── libogg.dylib
│ │ │ │ │ ├── libvorbis.dylib
│ │ │ │ │ └── libvorbisenc.dylib
│ │ │ │ ├── osx-x64
│ │ │ │ └── native
│ │ │ │ │ ├── libogg.dylib
│ │ │ │ │ ├── libvorbis.dylib
│ │ │ │ │ └── libvorbisenc.dylib
│ │ │ │ ├── win-x64
│ │ │ │ └── native
│ │ │ │ │ ├── ogg.dll
│ │ │ │ │ └── vorbis.dll
│ │ │ │ └── win-x86
│ │ │ │ └── native
│ │ │ │ ├── ogg.dll
│ │ │ │ └── vorbis.dll
│ │ ├── AudioWorks.Extensions.Wave
│ │ │ ├── AssemblyInfo.cs
│ │ │ ├── AudioWorks.Extensions.Wave.csproj
│ │ │ ├── Pack.nuspec
│ │ │ ├── Readme.md
│ │ │ ├── RiffReader.cs
│ │ │ ├── RiffWriter.cs
│ │ │ ├── WaveAudioDecoder.cs
│ │ │ ├── WaveAudioEncoder.cs
│ │ │ └── WaveAudioInfoDecoder.cs
│ │ └── Directory.Build.props
│ └── StrongName.snk
└── tests
│ ├── .editorconfig
│ ├── AudioWorks.Api.Tests
│ ├── AssemblyInfo.cs
│ ├── AudioAnalyzerManagerTests.cs
│ ├── AudioEncoderManagerTests.cs
│ ├── AudioFileAnalyzerTests.cs
│ ├── AudioFileEncoderTests.cs
│ ├── AudioFileManagerTests.cs
│ ├── AudioFileTests.cs
│ ├── AudioMetadataEncoderManagerTests.cs
│ ├── AudioWorks.Api.Tests.csproj
│ ├── CoverArtExtractorTests.cs
│ └── TaggedAudioFileTests.cs
│ ├── AudioWorks.Commands.Tests
│ ├── AssemblyInfo.cs
│ ├── AudioWorks.Commands.Tests.csproj
│ ├── ClearAudioMetadataTests.cs
│ ├── ExportAudioCoverArtTests.cs
│ ├── ExportAudioFileTests.cs
│ ├── ExtensionMethods.cs
│ ├── GetAudioAnalyzerInfoTests.cs
│ ├── GetAudioCoverArtTests.cs
│ ├── GetAudioEncoderInfoTests.cs
│ ├── GetAudioFileTests.cs
│ ├── GetAudioInfoTests.cs
│ ├── GetAudioMetadataEncoderInfoTests.cs
│ ├── GetAudioMetadataTests.cs
│ ├── MeasureAudioFileTests.cs
│ ├── ModuleFixture.cs
│ ├── RenameAudioFileTests.cs
│ ├── SaveAudioMetadataTests.cs
│ └── SetAudioMetadataTests.cs
│ ├── AudioWorks.Common.Tests
│ ├── AssemblyInfo.cs
│ ├── AudioEncodingExceptionTests.cs
│ ├── AudioInfoTests.cs
│ ├── AudioInvalidExceptionTests.cs
│ ├── AudioMetadataInvalidExceptionTests.cs
│ ├── AudioMetadataTests.cs
│ ├── AudioUnsupportedExceptionTests.cs
│ ├── AudioWorks.Common.Tests.csproj
│ ├── CoverArtFactoryTests.cs
│ ├── CoverArtTests.cs
│ ├── ImageInvalidExceptionTests.cs
│ ├── ImageUnsupportedExceptionTests.cs
│ └── SettingInfoDictionaryTests.cs
│ ├── AudioWorks.Extensibility.Tests
│ ├── AssemblyInfo.cs
│ ├── AudioWorks.Extensibility.Tests.csproj
│ └── SampleBufferTests.cs
│ ├── AudioWorks.TestUtilities
│ ├── AssemblyInfo.cs
│ ├── AudioWorks.TestUtilities.csproj
│ ├── DataSources
│ │ ├── AnalyzeGroupDataSource.cs
│ │ ├── AnalyzeValidFileDataSource.cs
│ │ ├── AudioAnalyzerInfoDataSource.cs
│ │ ├── AudioEncoderInfoDataSource.cs
│ │ ├── AudioFileFormatInfoDataSource.cs
│ │ ├── AudioMetadataEncoderInfoDataSource.cs
│ │ ├── EncodeValidFileDataSource.cs
│ │ ├── InvalidFileDataSource.cs
│ │ ├── InvalidImageFileDataSource.cs
│ │ ├── RenameValidFileDataSource.cs
│ │ ├── SaveMetadataUnsupportedFileDataSource.cs
│ │ ├── SaveMetadataValidFileSource.cs
│ │ ├── UnsupportedFileDataSource.cs
│ │ ├── UnsupportedImageFileDataSource.cs
│ │ ├── ValidFileDataSource.cs
│ │ ├── ValidFileWithCoverArtDataSource.cs
│ │ └── ValidImageFileDataSource.cs
│ ├── HashUtility.cs
│ ├── PathUtility.cs
│ └── Serializers
│ │ ├── AudioInfoSerializer.cs
│ │ ├── AudioMetadataSerializer.cs
│ │ └── SettingDictionarySerializer.cs
│ ├── Directory.Build.props
│ ├── Directory.Packages.props
│ └── TestFiles
│ ├── Invalid
│ ├── Missing 'fmt' Chunk.wav
│ ├── Not Audio Layer III.mp3
│ ├── Not FLAC Format.flac
│ ├── Not MPEG Audio.m4a
│ ├── Not MPEG Audio.mp3
│ ├── Not Ogg Format.ogg
│ ├── Not Opus Format.opus
│ ├── Not RIFF Format.wav
│ ├── Not Wave Format.wav
│ ├── Not an Image.bmp
│ └── Unexpectedly Truncated.wav
│ ├── Unsupported
│ ├── Lame MP3.m4a
│ ├── MS ADPCM.wav
│ ├── Opus.ogg
│ ├── Speex.ogg
│ ├── Text.txt
│ └── Vorbis.opus
│ └── Valid
│ ├── A-law 44100Hz Stereo.wav
│ ├── ALAC 16-bit 44100Hz Mono.m4a
│ ├── ALAC 16-bit 44100Hz Stereo (Covr atom - JPEG).m4a
│ ├── ALAC 16-bit 44100Hz Stereo (Covr atom - PNG).m4a
│ ├── ALAC 16-bit 44100Hz Stereo (Tagged).m4a
│ ├── ALAC 16-bit 44100Hz Stereo.m4a
│ ├── ALAC 16-bit 48000Hz Stereo.m4a
│ ├── ALAC 24-bit 96000Hz Stereo.m4a
│ ├── Bitmap 24-bit 1280 x 935.bmp
│ ├── FLAC Level 5 16-bit 44100Hz Mono.flac
│ ├── FLAC Level 5 16-bit 44100Hz Stereo (PICTURE block - JPEG).flac
│ ├── FLAC Level 5 16-bit 44100Hz Stereo (PICTURE block - PNG).flac
│ ├── FLAC Level 5 16-bit 44100Hz Stereo (Tagged using COMMENT).flac
│ ├── FLAC Level 5 16-bit 44100Hz Stereo (Tagged using ReplayGain with '+' sign).flac
│ ├── FLAC Level 5 16-bit 44100Hz Stereo (Tagged using ReplayGain with missing 'dB').flac
│ ├── FLAC Level 5 16-bit 44100Hz Stereo (Tagged using TOTALTRACKS).flac
│ ├── FLAC Level 5 16-bit 44100Hz Stereo (Tagged using TRACKCOUNT).flac
│ ├── FLAC Level 5 16-bit 44100Hz Stereo (Tagged using TRACKTOTAL).flac
│ ├── FLAC Level 5 16-bit 44100Hz Stereo (Tagged using YEAR).flac
│ ├── FLAC Level 5 16-bit 44100Hz Stereo (Tagged using defaults).flac
│ ├── FLAC Level 5 16-bit 44100Hz Stereo (Tagged using extended DATE).flac
│ ├── FLAC Level 5 16-bit 44100Hz Stereo (Tagged using invalid DATE).flac
│ ├── FLAC Level 5 16-bit 44100Hz Stereo (Tagged using invalid ReplayGain fields).flac
│ ├── FLAC Level 5 16-bit 44100Hz Stereo (Tagged using invalid TRACKNUMBER).flac
│ ├── FLAC Level 5 16-bit 44100Hz Stereo (Tagged using mixed-case fields).flac
│ ├── FLAC Level 5 16-bit 44100Hz Stereo.flac
│ ├── FLAC Level 5 16-bit 48000Hz Stereo.flac
│ ├── FLAC Level 5 24-bit 96000Hz Stereo.flac
│ ├── FLAC Level 5 8-bit 8000Hz Stereo.flac
│ ├── Fraunhofer CBR 128 44100Hz Stereo.mp3
│ ├── Fraunhofer VBR 44100Hz Stereo (with header).mp3
│ ├── Fraunhofer VBR 44100Hz Stereo.mp3
│ ├── JPEG 24-bit 1280 x 935.jpg
│ ├── LPCM 16-bit 44100Hz Mono.wav
│ ├── LPCM 16-bit 44100Hz Stereo (extensible).wav
│ ├── LPCM 16-bit 44100Hz Stereo.wav
│ ├── LPCM 16-bit 48000Hz Stereo.wav
│ ├── LPCM 24-bit 96000Hz Stereo.wav
│ ├── LPCM 8-bit 8000Hz Stereo.wav
│ ├── Lame CBR 128 44100Hz Stereo (APIC frame - JPEG).mp3
│ ├── Lame CBR 128 44100Hz Stereo (APIC frame - PNG).mp3
│ ├── Lame CBR 128 44100Hz Stereo (ID3v1 missing values).mp3
│ ├── Lame CBR 128 44100Hz Stereo (ID3v1).mp3
│ ├── Lame CBR 128 44100Hz Stereo (ID3v2.3 Latin1 Extended Header).mp3
│ ├── Lame CBR 128 44100Hz Stereo (ID3v2.3 Latin1).mp3
│ ├── Lame CBR 128 44100Hz Stereo (ID3v2.3 UTF16 Unsynchronised).mp3
│ ├── Lame CBR 128 44100Hz Stereo (ID3v2.3 UTF16).mp3
│ ├── Lame CBR 128 44100Hz Stereo (ID3v2.4 Latin1).mp3
│ ├── Lame CBR 128 44100Hz Stereo (ID3v2.4 UTF16 Big Endian).mp3
│ ├── Lame CBR 128 44100Hz Stereo (ID3v2.4 UTF16 Unsynchronised Frames with data length).mp3
│ ├── Lame CBR 128 44100Hz Stereo (ID3v2.4 UTF16 Unsynchronised Frames).mp3
│ ├── Lame CBR 128 44100Hz Stereo (ID3v2.4 UTF8).mp3
│ ├── Lame CBR 128 44100Hz Stereo (no header).mp3
│ ├── Lame CBR 128 44100Hz Stereo.mp3
│ ├── Lame CBR 128 48000Hz Stereo.mp3
│ ├── Lame CBR 24 8000Hz Stereo.mp3
│ ├── Lame CBR 64 44100Hz Mono.mp3
│ ├── Lame VBR Standard 44100Hz Stereo.mp3
│ ├── Opus VBR 44100Hz Mono.opus
│ ├── Opus VBR 44100Hz Stereo (PICTURE comment - JPEG).opus
│ ├── Opus VBR 44100Hz Stereo (PICTURE comment - PNG).opus
│ ├── Opus VBR 44100Hz Stereo (Tagged using COMMENT).opus
│ ├── Opus VBR 44100Hz Stereo (Tagged using R128).opus
│ ├── Opus VBR 44100Hz Stereo (Tagged using REPLAYGAIN with '+' sign).opus
│ ├── Opus VBR 44100Hz Stereo (Tagged using REPLAYGAIN with missing 'dB').opus
│ ├── Opus VBR 44100Hz Stereo (Tagged using REPLAYGAIN).opus
│ ├── Opus VBR 44100Hz Stereo (Tagged using TOTALTRACKS).opus
│ ├── Opus VBR 44100Hz Stereo (Tagged using TRACKCOUNT).opus
│ ├── Opus VBR 44100Hz Stereo (Tagged using TRACKTOTAL).opus
│ ├── Opus VBR 44100Hz Stereo (Tagged using YEAR).opus
│ ├── Opus VBR 44100Hz Stereo (Tagged using defaults).opus
│ ├── Opus VBR 44100Hz Stereo (Tagged using extended DATE).opus
│ ├── Opus VBR 44100Hz Stereo (Tagged using invalid DATE).opus
│ ├── Opus VBR 44100Hz Stereo (Tagged using invalid TRACKNUMBER).opus
│ ├── Opus VBR 44100Hz Stereo (Tagged using mixed-case fields).opus
│ ├── Opus VBR 44100Hz Stereo.opus
│ ├── Opus VBR 48000Hz Stereo.opus
│ ├── Opus VBR 8000Hz Stereo.opus
│ ├── Opus VBR 96000Hz Stereo.opus
│ ├── PNG 24-bit 1280 x 935.png
│ ├── QAAC TVBR 91 44100Hz Mono.m4a
│ ├── QAAC TVBR 91 44100Hz Stereo (Tagged).m4a
│ ├── QAAC TVBR 91 44100Hz Stereo.m4a
│ ├── QAAC TVBR 91 48000Hz Stereo.m4a
│ ├── QAAC TVBR 91 8000Hz Stereo.m4a
│ ├── Track 1 LPCM 16-bit 44100Hz Mono.wav
│ ├── Track 1 LPCM 16-bit 44100Hz Stereo.wav
│ ├── Track 1 LPCM 16-bit 48000Hz Stereo.wav
│ ├── Track 1 LPCM 24-bit 96000Hz Stereo.wav
│ ├── Track 1 LPCM 8-bit 8000Hz Stereo.wav
│ ├── Track 2 LPCM 16-bit 44100Hz Mono.wav
│ ├── Track 2 LPCM 16-bit 44100Hz Stereo.wav
│ ├── Track 2 LPCM 16-bit 48000Hz Stereo.wav
│ ├── Track 2 LPCM 24-bit 96000Hz Stereo.wav
│ ├── Track 2 LPCM 8-bit 8000Hz Stereo.wav
│ ├── Track 3 LPCM 16-bit 44100Hz Mono.wav
│ ├── Track 3 LPCM 16-bit 44100Hz Stereo.wav
│ ├── Track 3 LPCM 16-bit 48000Hz Stereo.wav
│ ├── Track 3 LPCM 24-bit 96000Hz Stereo.wav
│ ├── Track 3 LPCM 8-bit 8000Hz Stereo.wav
│ ├── Vorbis Quality 3 44100Hz Mono.ogg
│ ├── Vorbis Quality 3 44100Hz Stereo (PICTURE comment - JPEG).ogg
│ ├── Vorbis Quality 3 44100Hz Stereo (PICTURE comment - PNG).ogg
│ ├── Vorbis Quality 3 44100Hz Stereo (Tagged using COMMENT).ogg
│ ├── Vorbis Quality 3 44100Hz Stereo (Tagged using ReplayGain with '+' sign).ogg
│ ├── Vorbis Quality 3 44100Hz Stereo (Tagged using ReplayGain with missing 'dB').ogg
│ ├── Vorbis Quality 3 44100Hz Stereo (Tagged using TOTALTRACKS).ogg
│ ├── Vorbis Quality 3 44100Hz Stereo (Tagged using TRACKCOUNT).ogg
│ ├── Vorbis Quality 3 44100Hz Stereo (Tagged using TRACKTOTAL).ogg
│ ├── Vorbis Quality 3 44100Hz Stereo (Tagged using YEAR).ogg
│ ├── Vorbis Quality 3 44100Hz Stereo (Tagged using defaults).ogg
│ ├── Vorbis Quality 3 44100Hz Stereo (Tagged using extended DATE).ogg
│ ├── Vorbis Quality 3 44100Hz Stereo (Tagged using invalid DATE).ogg
│ ├── Vorbis Quality 3 44100Hz Stereo (Tagged using invalid ReplayGain fields).ogg
│ ├── Vorbis Quality 3 44100Hz Stereo (Tagged using invalid TRACKNUMBER).ogg
│ ├── Vorbis Quality 3 44100Hz Stereo (Tagged using mixed-case fields).ogg
│ ├── Vorbis Quality 3 44100Hz Stereo.ogg
│ ├── Vorbis Quality 3 48000Hz Stereo.ogg
│ ├── Vorbis Quality 3 8000Hz Stereo.ogg
│ ├── Vorbis Quality 3 96000Hz Stereo.ogg
│ └── µ-law 44100Hz Stereo.wav
├── LICENSE
├── Logo.png
└── README.md
/AudioWorks/Directory.Build.props:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net8.0
5 | 12.0
6 | enable
7 | $(GITHUB_RUN_NUMBER)
8 | 0
9 | AudioWorks
10 | © 2018 Jeremy Herbison
11 | en-US
12 | true
13 | true
14 | $(NuspecProperties);Copyright=$(Copyright)
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/AudioWorks/src/AudioWorks.Api/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | /* Copyright © 2018 Jeremy Herbison
2 |
3 | This file is part of AudioWorks.
4 |
5 | AudioWorks is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public
6 | License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later
7 | version.
8 |
9 | AudioWorks is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
10 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
11 | details.
12 |
13 | You should have received a copy of the GNU Affero General Public License along with AudioWorks. If not, see
14 | . */
15 |
16 | using System;
17 | using System.Runtime.CompilerServices;
18 |
19 | [assembly: CLSCompliant(true)]
20 |
21 | [module: SkipLocalsInit]
22 |
--------------------------------------------------------------------------------
/AudioWorks/src/AudioWorks.Api/AudioWorks.Api.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 2.1.0
5 | $(VersionPrefix).$(Revision)
6 | 2.0.0.0
7 | The primary AudioWorks API. AudioWorks is a cross-platform, multi-format audio conversion and tagging suite.
8 | Icon.png
9 | music encode decode convert export tag cover art FLAC MP3 ID3 Lame MP4 AAC Apple ALAC Ogg Vorbis Opus ReplayGain EBUR128
10 | Readme.md
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/AudioWorks/src/AudioWorks.Api/ExtensionProviderWrapper.cs:
--------------------------------------------------------------------------------
1 | /* Copyright © 2018 Jeremy Herbison
2 |
3 | This file is part of AudioWorks.
4 |
5 | AudioWorks is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public
6 | License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later
7 | version.
8 |
9 | AudioWorks is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
10 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
11 | details.
12 |
13 | You should have received a copy of the GNU Affero General Public License along with AudioWorks. If not, see
14 | . */
15 |
16 | using System.Collections.Generic;
17 | using System.Composition;
18 | using AudioWorks.Extensibility;
19 |
20 | namespace AudioWorks.Api
21 | {
22 | static class ExtensionProviderWrapper
23 | {
24 | internal static IEnumerable>> GetFactories()
25 | where T : class =>
26 | ExtensionProvider.GetFactories();
27 |
28 | internal static IEnumerable> GetFactories(string key, string value)
29 | where T : class =>
30 | ExtensionProvider.GetFactories(key, value);
31 | }
32 | }
--------------------------------------------------------------------------------
/AudioWorks/src/AudioWorks.Api/Icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jherby2k/AudioWorks/5933f9285c05d6e98ded153653befe414ddce18f/AudioWorks/src/AudioWorks.Api/Icon.png
--------------------------------------------------------------------------------
/AudioWorks/src/AudioWorks.Commands/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | /* Copyright © 2018 Jeremy Herbison
2 |
3 | This file is part of AudioWorks.
4 |
5 | AudioWorks is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public
6 | License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later
7 | version.
8 |
9 | AudioWorks is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
10 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
11 | details.
12 |
13 | You should have received a copy of the GNU Affero General Public License along with AudioWorks. If not, see
14 | . */
15 |
16 | using System;
17 |
18 | [assembly: CLSCompliant(false)]
19 |
--------------------------------------------------------------------------------
/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 2.1.0
5 | $(VersionPrefix).$(Revision)
6 | true
7 | false
8 | false
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psd1:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jherby2k/AudioWorks/5933f9285c05d6e98ded153653befe414ddce18f/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psd1
--------------------------------------------------------------------------------
/AudioWorks/src/AudioWorks.Commands/AudioWorks.Commands.psm1:
--------------------------------------------------------------------------------
1 | #
2 | # Script module for module 'AudioWorks.Commands'
3 | #
4 | Set-StrictMode -Version Latest
5 |
6 | # Set up some helper variables to make it easier to work with the module
7 | $PSModule = $ExecutionContext.SessionState.Module
8 | $PSModuleRoot = $PSModule.ModuleBase
9 |
10 | $binaryModuleRoot = Join-Path -Path $PSModuleRoot -ChildPath 'net8.0'
11 | $binaryModulePath = Join-Path -Path $binaryModuleRoot -ChildPath 'AudioWorks.Commands.dll'
12 |
13 | $binaryModule = Import-Module -Name $binaryModulePath -PassThru
14 |
15 | # When the module is unloaded, remove the nested binary module that was loaded with it
16 | $PSModule.OnRemove = {
17 | Remove-Module -ModuleInfo $binaryModule
18 | }
19 |
--------------------------------------------------------------------------------
/AudioWorks/src/AudioWorks.Commands/CmdletLoggerProvider.cs:
--------------------------------------------------------------------------------
1 | /* Copyright © 2018 Jeremy Herbison
2 |
3 | This file is part of AudioWorks.
4 |
5 | AudioWorks is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public
6 | License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later
7 | version.
8 |
9 | AudioWorks is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
10 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
11 | details.
12 |
13 | You should have received a copy of the GNU Affero General Public License along with AudioWorks. If not, see
14 | . */
15 |
16 | using System.Collections.Concurrent;
17 | using System.Diagnostics.CodeAnalysis;
18 | using Microsoft.Extensions.Logging;
19 |
20 | namespace AudioWorks.Commands
21 | {
22 | sealed class CmdletLoggerProvider : ILoggerProvider
23 | {
24 | readonly ConcurrentQueue