opus conversie
This commit is contained in:
@@ -1,22 +1,129 @@
|
||||
# audio-library-manager
|
||||
|
||||
First setup for `flac-48khz-manager.rkt`.
|
||||
Tools for maintaining audio library trees.
|
||||
|
||||
The command keeps a FLAC directory tree at a maximum sample rate of 48 kHz.
|
||||
Files above the configured threshold are converted in place through a Racket place.
|
||||
The conversion path uses `racket-audio/audio-encoder` dynamically, so the package can still compile on systems where the native audio libraries are not installed yet.
|
||||
The package currently contains two managers:
|
||||
|
||||
Default files below the FLAC root:
|
||||
- `flac-48khz-manager.rkt`: keeps a FLAC tree at a maximum sample rate of 48 kHz.
|
||||
- `flac2opus-manager.rkt`: mirrors a FLAC source tree to an Opus target tree.
|
||||
|
||||
Both managers use the same administration files in the source tree:
|
||||
|
||||
- `.music-info.db`: keystore state database
|
||||
- `.flac-48khz-manager.ini`: configuration
|
||||
- `.flac-48khz-manager.log`: log file
|
||||
|
||||
The `flac2opus` state uses its own key prefix in `.music-info.db`, so it can share
|
||||
the same database with the 48 kHz manager without mixing state entries.
|
||||
|
||||
## FLAC 48 kHz manager
|
||||
|
||||
The command keeps a FLAC directory tree at a maximum sample rate of 48 kHz.
|
||||
Files above the configured threshold are converted in place through a Racket
|
||||
place. The conversion path uses `racket-audio/audio-encoder` dynamically, so the
|
||||
package can still compile on systems where the native audio libraries are not
|
||||
installed yet.
|
||||
|
||||
Run:
|
||||
|
||||
```sh
|
||||
racket flac-48khz-manager.rkt /path/to/flac-tree
|
||||
```
|
||||
|
||||
When a FLAC file has no embedded picture and the same directory contains one of
|
||||
`cover.jpg`, `folder.jpg`, `cover.png` or `folder.png`, the manager embeds that
|
||||
image as front-cover picture before fingerprinting/conversion. This keeps FLAC
|
||||
artwork consistent before a later Opus mirror is made.
|
||||
|
||||
The `flac-48khz-manager` scanner only processes `.flac` files. Other files such
|
||||
as `.mp3`, booklets and cover images are ignored by this manager.
|
||||
|
||||
## FLAC to Opus mirror manager
|
||||
|
||||
The command mirrors a source directory to a target directory. FLAC files are
|
||||
converted to Ogg Opus files with extension `.opus`; all other regular files are
|
||||
copied unchanged, preserving their relative path and modification time. Examples
|
||||
include `booklet.pdf`, `cover.jpg`, `folder.png`, cue sheets, text files and
|
||||
other sidecar files.
|
||||
|
||||
Run:
|
||||
|
||||
```sh
|
||||
racket flac2opus-manager.rkt /path/to/flac-tree /path/to/opus-tree
|
||||
racket flac2opus-manager.rkt --kbps 192 /path/to/flac-tree /path/to/opus-tree
|
||||
```
|
||||
|
||||
The default Opus bitrate is 224 kbps. The library API exposes the same setting
|
||||
as keyword argument:
|
||||
|
||||
```racket
|
||||
(manage-flac2opus-tree source-directory target-directory #:kbps 224)
|
||||
```
|
||||
|
||||
Metadata is copied through `racket-audio/taglib` and `racket-audio/audio-encoder`:
|
||||
ordinary TagLib properties are transferred, embedded pictures are transferred,
|
||||
and an additional `FLAC2OPUS` comment is written to mark the conversion.
|
||||
|
||||
The manager removes target files that belonged to source files which disappeared
|
||||
since the previous run. It deliberately does not mirror its own root-level
|
||||
administration files: `.music-info.db`, `.flac-48khz-manager.ini` and
|
||||
`.flac-48khz-manager.log`.
|
||||
|
||||
Paths are handled as Racket paths rather than by splitting on `/`, so Windows
|
||||
absolute paths and UNC paths such as `\\panderleou\music` are preserved by the
|
||||
platform path implementation.
|
||||
|
||||
## Configuration
|
||||
|
||||
Important configuration keys are created automatically in `.flac-48khz-manager.ini`.
|
||||
SMTP reports are HTML and only summarize counters and errors.
|
||||
The same file is used by both managers.
|
||||
|
||||
```ini
|
||||
[manager]
|
||||
max-sample-rate=48000
|
||||
hash-algorithm="sha256"
|
||||
change-detection="flac-taglib"
|
||||
dry-run=#f
|
||||
display-log=#t
|
||||
log-file=".flac-48khz-manager.log"
|
||||
compression-level=5
|
||||
|
||||
[mail]
|
||||
enabled=#f
|
||||
send-on-success=#f
|
||||
send-on-error=#t
|
||||
host=""
|
||||
port=25
|
||||
tls=#f
|
||||
username=""
|
||||
password=""
|
||||
from=""
|
||||
to=""
|
||||
cc=""
|
||||
bcc=""
|
||||
subject-prefix="[flac-48khz-manager]"
|
||||
```
|
||||
|
||||
SMTP reports are HTML and summarize counters and errors.
|
||||
|
||||
## Change detection
|
||||
|
||||
The default change detection is `flac-taglib`:
|
||||
|
||||
1. unchanged files are skipped with a cheap `size` + `mtime` comparison;
|
||||
2. new or visibly changed files get a semantic fingerprint;
|
||||
3. for FLAC files, the semantic fingerprint consists of FLAC STREAMINFO data,
|
||||
including the FLAC audio MD5 signature, plus TagLib properties and embedded
|
||||
picture metadata/content hash;
|
||||
4. for non-FLAC files in the Opus mirror, the default is `mtime` + `size`;
|
||||
5. full-file hashing is available by setting `change-detection="hash"`.
|
||||
|
||||
This avoids reading every complete audio file during a normal run, which matters
|
||||
on Windows and network shares.
|
||||
|
||||
## FLAC files with ID3v2 prefixes
|
||||
|
||||
Version 0.1.4 accepts native FLAC files that start directly with `fLaC`, and FLAC
|
||||
files with an ID3v2 tag before the `fLaC` marker. The latter occurs in some
|
||||
libraries and is accepted by players such as foobar2000/libFLAC. The fast
|
||||
STREAMINFO reader skips the ID3v2 prefix before reading the FLAC metadata.
|
||||
|
||||
Reference in New Issue
Block a user