alto is a program built for audio management.

alto, a music organizer

alto is a program built for audio management. It's purpose is to provide the user the means to create a path construct to move individual audio files to a select path while being provided with the metadata of the file through variables.

APNG showcasing alto

Installing

Simply grab a binary from Releases, if it is available. Otherwise go to building to learn how to build alto from source.

Building

You will need Go, Git, and a working internet connection so dependencies in go.mod can be installed.

$ git clone https://github.com/ItsLychee/alto
$ cd alto
$ go build ./cmd/alto
$ ./alto -help
# ...

Path constructs

You may be a bit confused about what the -format argument does, which is understandable. This section is dedicated to teach you on how you can use alto to its fullest to achieve the organization meant for you.

What is a path construct?

A path construct, as it implies, is a result of alto's processing of the -format string with the current file's metadata being used as reference. So when this manual brings up stuff like "omitting from the path construct" it simply means that X value won't be in the final result.

Examples

$ alto -format "{%artist%|unknown artist}/{%album%/}{%title%|%filename%}" -source source -destination destination

# Possible outcomes
Artist/Album/Title.flac # alto automatically appends the file extension if it isn't present in the path construct
Artist/Album/Filename.flac
Artist/Title.flac
Artist/Filename.flac
unknown artist/Album/Title.flac
unknown artist/Album/Filename.flac
unknown artist/Title.flac
unknown artist/Filename.flac

# Alto does the following 

# it checks if %artist% exists, if it doesn't then it'll return unknown artist
# Adds "/" after the first group (which is the contents wrapped with the curly braces)
# Returns %album%/ IF the variable %album% is not empty/nonexistent, otherwise it will return nothing
# Returns %title% IF the variable is not empty/nonexsitent, otherwise it will return %filename%, which will always contains a value

Variables

As you may have guessed, %filename% is a variable. Proper variables must have ASCII-only identifiers wrapped around with %, so while %name% is valid, %こんにちは% is not, although this requirement may change in the future.

List of default variables

You are provided with variables representing metadata, metadatic variables are just pipelines to the methods in dhowden's tag metadata interface, and alto will be kept updated to the latest and stable release.

  • %title%
  • %artist%
  • %album%
  • %albumartist%
  • %genre%
  • %composer%
  • %year%
  • %tracknumber%
  • %tracktotal%
  • %discnumber%
  • %disctotal%
  • %comment%
  • %format%
  • %filetype%
  • %filename% this variable is not handled by tag, but it's just a variable of the name of the current file

The variable names should be self-explantory, you can refer the link above to get a grasp of what each variable does based on the name of it.

Groups

Groups are a collection of fields which are separated by |, and enwrapped by { and }. A group's job is to start on the first field and see if it has a value, if it does not it will keep iterating over the list of fields until it finds a non-nil field. If it does not find a viable field, it will simply just be omitted from the path construct

Field

A field is a collection of string literals and variables. Unlike the outside of a group where only string literals and groups are parsed, variables are also parsed. So %variable% foobar in a field would be represented Variable StringLiteral in a field, but outside one it would be StringLiteral.

Separators

Separators are similar to logical ORs, which if either value is true, then return true, otherwise return false. Instead of returning a boolean, alto returns the evaluated field.

Similar Resources

Local-audio - Web walking audio tour platform proof-of-concept

Goal: Proof of concept for a Web Audio walk platform Data retention dynamdo db "time to live" expires in 1 day from creation of record set in add.go s

Jan 9, 2022

PolarDB Cluster Manager is the cluster management component of PolarDB for PostgreSQL, responsible for topology management, high availability, configuration management, and plugin extensions.

What is PolarDB Cluster Manager PolarDB Cluster Manager is the cluster management component of PolarDB for PostgreSQL, responsible for topology manage

Nov 9, 2022

A tool for secrets management, encryption as a service, and privileged access management

A tool for secrets management, encryption as a service, and privileged access management

Vault Please note: We take Vault's security and our users' trust very seriously. If you believe you have found a security issue in Vault, please respo

Jan 2, 2023

A tool for secrets management, encryption as a service, and privileged access management

A tool for secrets management, encryption as a service, and privileged access management

Deploy HCP Vault & AWS Transit Gateways via Terraform https://medium.com/hashicorp-engineering/deploying-hcp-vault-using-the-hcp-terraform-provider-5e

Nov 23, 2021

Kstone is an etcd management platform, providing cluster management, monitoring, backup, inspection, data migration, visual viewing of etcd data, and intelligent diagnosis.

Kstone is an etcd management platform, providing cluster management, monitoring, backup, inspection, data migration, visual viewing of etcd data, and intelligent diagnosis.

Kstone 中文 Kstone is an etcd management platform, providing cluster management, monitoring, backup, inspection, data migration, visual viewing of etcd

Dec 27, 2022

Zms - The Bhojpur ZMS is a software-as-a-service product applied in different risk management areas. It is a containment Zone Management System based on Bhojpur.NET Platform.

Bhojpur ZMS - Zone Management System The Bhojpur ZMS is a software-as-a-service product used as a Zone Management System based on Bhojpur.NET Platform

Sep 26, 2022

A program to build, run, and restart a Go program on code change

devrun A program to build, run, and restart a Go program on code change. It also supports watching all your Go imports too. So if you change the code

Apr 4, 2022

Package flac provides access to FLAC (Free Lossless Audio Codec) streams.

flac This package provides access to FLAC (Free Lossless Audio Codec) streams. Documentation Documentation provided by GoDoc. flac: provides access to

Jan 5, 2023

GAAD (Go Advanced Audio Decoder)

GAAD (Go Advanced Audio Decoder) Package currently provides AAC parsing capabilities. This package performs a full parse of AAC-LC and HE-AACv1 bitstr

Oct 24, 2022

Go tools for audio processing & creation ?

GoAudio ? GoAudio is an audio processing library, currently supporting WAVE files, although some tools such as the synth and breakpoints are encoding

Dec 23, 2022

Mini audio library

malgo Go bindings for miniaudio library. Requires cgo but does not require linking to anything on the Windows/macOS and it links only -ldl on Linux/BS

Dec 31, 2022

Sequence-based Go-native audio mixer for music apps

Mix https://github.com/go-mix/mix Sequence-based Go-native audio mixer for music apps See demo/demo.go: package main import ( "fmt" "os" "time"

Dec 1, 2022

Go bindings for the PortAudio audio I/O library

portaudio This package provides an interface to the PortAudio audio I/O library. See the package documentation for details. To build this package you

Jan 1, 2023

Go package capable of generating waveform images from audio streams. MIT Licensed.

waveform Go package capable of generating waveform images from audio streams. MIT Licensed. This library supports any audio streams which the azul3d/e

Nov 17, 2022

CLI audio player written in go.

CLI audio player written in go.

A very minimal CLI audio player.

Dec 13, 2022

Go bindings for audio capture and playback with ALSA and libasound

Go ALSA bindings These bindings allow capture and playback of audio via ALSA using the alsa-lib library. Installation go get github.com/cocoonlife/goa

Nov 26, 2022

Process audio files with pipelined DSP framework

Process audio files with pipelined DSP framework

phono is a command for audio processing. It's build on top of pipelined DSP framework. Installation Prerequisites: lame to enable mp3 encoding To link

Oct 4, 2022

Cgo bindings to PulseAudio's Simple API, for easily playing or capturing raw audio.

pulse-simple Cgo bindings to PulseAudio's Simple API, for easily playing or capturing raw audio. The full Simple API is supported, including channel m

Dec 17, 2022

Go package captcha implements generation and verification of image and audio CAPTCHAs.

Go package captcha implements generation and verification of image and audio CAPTCHAs.

Package captcha ⚠️ Warning: this captcha can be broken by advanced OCR captcha breaking algorithms. import "github.com/dchest/captcha" Package captch

Dec 30, 2022
Comments
  • The versioning problem of alto

    The versioning problem of alto

    The project alto was originally meant to be a useful music organizer and so it is as of today, but I received a suggestion from the Unofficial Go Discord to make the DSL's API publicly available, which so I did and from the looks of this it seems that the semantic versioning format is mandatory, or highly recommended.

    This creates somewhat of a logical problem:

    1. How should I incorporate changes in the CLI packages when it doesn't adversely affect the compatibility of the DSL API, because a new release makes the user think that there has been changes within the API's code when there hasn't
    2. Above applies inversely to the DSL changes as well, but not as bad because the CLI package is dependent on the DSL.

    This could be avoided by simply requiring the user to install the binary via Go's CLI, but from my own personal experience it's somewhat tedious to install Go's ~132MB package to create such an alto binary that is around 1-2MBs. I was once a person who had very limited and slow internet and saving every byte of my data usage counted, and once I got good internet I made a vow to myself that I would try to help out those who were like me by ensuring that they can download the least amount of bytes from software releases I would make in the future. Slow internet sucks and I want to help out those with it in any way I can.

    Separate versioning could work for this, and can ensure backwards compatibility with the previous releases which would be ideal. A trivial idea that is, but stress tends to affect the mind. However I do not have a solid idea of how I would implement version branching but I could probably intertwine the major number of the DSL together with the CLI versioning, as the current branching scheme is using major versions for good, obvious reasons.

    I will comment the new versioning scheme alto will use after I take some time and carefully think about it. Suggestions are appreciated

Package flac provides access to FLAC (Free Lossless Audio Codec) streams.

flac This package provides access to FLAC (Free Lossless Audio Codec) streams. Documentation Documentation provided by GoDoc. flac: provides access to

Jan 5, 2023
GAAD (Go Advanced Audio Decoder)

GAAD (Go Advanced Audio Decoder) Package currently provides AAC parsing capabilities. This package performs a full parse of AAC-LC and HE-AACv1 bitstr

Oct 24, 2022
Go tools for audio processing & creation ?

GoAudio ? GoAudio is an audio processing library, currently supporting WAVE files, although some tools such as the synth and breakpoints are encoding

Dec 23, 2022
Mini audio library

malgo Go bindings for miniaudio library. Requires cgo but does not require linking to anything on the Windows/macOS and it links only -ldl on Linux/BS

Dec 31, 2022
Sequence-based Go-native audio mixer for music apps

Mix https://github.com/go-mix/mix Sequence-based Go-native audio mixer for music apps See demo/demo.go: package main import ( "fmt" "os" "time"

Dec 1, 2022
Go bindings for the PortAudio audio I/O library

portaudio This package provides an interface to the PortAudio audio I/O library. See the package documentation for details. To build this package you

Jan 1, 2023
Go package capable of generating waveform images from audio streams. MIT Licensed.

waveform Go package capable of generating waveform images from audio streams. MIT Licensed. This library supports any audio streams which the azul3d/e

Nov 17, 2022
CLI audio player written in go.
CLI audio player written in go.

A very minimal CLI audio player.

Dec 13, 2022
Terrible Audio Downloader

Terrible Audio Downloader This is just a small go project I did for myself, to manage my audio library to get away from spotify. All it does is downlo

Oct 30, 2021
Audio visualizer in Go
Audio visualizer in Go

demo_audio_visualizer Simple audio visualizer in Go Used libraries: raylib-go go-mp3 oto go-dsp To disable the additional console window on Windows OS

Dec 4, 2022