alto is a program built for audio management.

Overview

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.

Issues
  • 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

    annoucement 
    opened by ItsLychee 3
Releases(v1.1.0)
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

null 208 May 14, 2022
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

null 98 May 7, 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

Dylan Meeus 221 May 7, 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

Milan Nikolic 171 May 7, 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"

null 154 Apr 11, 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

Gordon Klaus 503 May 6, 2022
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

Matt Layher 349 Apr 18, 2022
CLI audio player written in go.

A very minimal CLI audio player.

Dave Hulihan 42 Apr 8, 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

null 0 Oct 30, 2021
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

Miretz 1 Mar 8, 2022
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

Kai Hendry 3 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

null 8 Dec 15, 2021
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

HashiCorp 24.1k May 12, 2022
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

Temur Yunusov 0 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 中文 Kstone is an etcd management platform, providing cluster management, monitoring, backup, inspection, data migration, visual viewing of etcd

TKEStack 529 May 13, 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

Bhojpur Consulting 0 Jan 2, 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

null 208 May 14, 2022
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

null 98 May 7, 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

Dylan Meeus 221 May 7, 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

Milan Nikolic 171 May 7, 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"

null 154 Apr 11, 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

Gordon Klaus 503 May 6, 2022
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

Matt Layher 349 Apr 18, 2022
CLI audio player written in go.

A very minimal CLI audio player.

Dave Hulihan 42 Apr 8, 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

null 35 Mar 21, 2022
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

pipelined 46 May 5, 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

Tommy 19 Jun 21, 2021
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

Dmitry Chestnykh 1.6k May 19, 2022
Discord screenshare, now with audio!

audio-share-discord-linux Discord screenshare, now with audio! Build Instructions go build . chmod +x audio-share-discord-linux ./audio-share-discord-

null 40 Apr 17, 2022