music-kraken-core/notes.md
2023-01-09 11:36:58 +01:00

110 lines
3.9 KiB
Markdown

# TO DO
- Create a super class for audio_source, from which yet to come classes like Musify or Youtube inherit.
- be able to select multiple things at once (eg "0, 3, 5, 6") and then download this selection with ok
- add the file system as audio source
- add complete search of musify (scraping of artist page etc.) as last resort
- add a check if the songs truly are the same with non changebal attributes (length etc.)
- get additional ISRCs
- add Deezer as additional source
- add a config file where you should be able to set:
- folder structure (genre/artist/release/track.mp3 eg.)
- proxies (maybe a boolean if tor should be enabled)
- toggling of audio sources and sorting priorities of audio sources
# Which "Modules" do I have
## Overview
- fetching of metadata
- creating the target paths/filenames
- fetching of the download sourced
- downloading of the mp3
- fetching of the lyrics
## Naming and Structure of Modules
- utils
- shared (equivalent to global variables and constants)
- config
- database
- some static methods that are in general usefull for me
- tagging
- song (within a class Song used to get and set the metadata of mp3 files)
- metadata
- search
- fetch
- target
- audio_source
- fetch_source
- fetch_audio
- sources
- musify
- youtube
- lyrics
- lyrics
- genius (will eventually be moved in a folder with lyric sources)
# Wrong Audio
- Crystal F - Hanging Man
# Did not found whole release
- Crystal F - Trail Mix 2 (Vollmond)
- Crystal F - Was ist blos mit Hauke los
- Psychonaut 4 - Neurasthenia (Sweet Decadence)
# Audio Formats
[Wikipedia](https://en.wikipedia.org/wiki/Audio_file_format)
> It is important to distinguish between the audio coding format, the container containing the raw audio data, and an audio codec.
## audio coding format
[Wikipedia](https://en.wikipedia.org/wiki/Audio_coding_format)
The audio coding format is a format, which tries to store audio in a minimal space, while still allowing a decent quality.
There are two types:
1. lossless compression
2. lossy compression
[Here a comperison of audio coding formats.](https://en.wikipedia.org/wiki/Comparison_of_audio_coding_formats)
The two criterias, which NEED to be met is:
1. open source
2. the encoder as well as the player need to be free to use
## container
[Wikipedia](https://en.wikipedia.org/wiki/Container_format)
A container embeddes the metadata in a file. In this case I am interested in containers regarding audio.
### considerations
Important differences between container, that I need to consider when choosing one, *cuz I only implement this shit once*, are:
1. advanced content, meaning which fields there are, for example title, length, ...
2. popularity *(the more poppular it is, the better will be the support between different software)*
3. support for different [codec features](#audio-codec) *(older codecs might not support newer frames)*
4. overhead *(different file size with different data, though this certainly is less an issue with audio)*
5. support streaming the media
These destinctions are sorted from top to bottom.
## audio codec
[Wikipedia](https://en.wikipedia.org/wiki/Audio_codec)
The audio codec is simply software/hardware, to convert audio from an [audio coding format](#audio-coding-format) to playable audio and vice versa.
# ID3
[ID3](https://en.wikipedia.org/wiki/ID3) is a metadata container format for audio. I am going for [ID3v2](https://en.wikipedia.org/wiki/ID3#ID3v2)
An Application can define its own types of frames.
There are standard frames for containing cover art, BPM, copyright and license, lyrics, and arbitrary text and URL data, as well as other things.
Version 2.4 of the specification prescribes that all text fields (the fields that start with a T, except for TXXX) can contain multiple values separated by a null character. The null character varies by [character encoding](https://en.wikipedia.org/wiki/Character_encoding).
[id3 fields docs](https://docs.puddletag.net/source/id3.html)