====== Elaborazione audio ======
===== Estrazione (ripping) audio CD =====
Il programma **''ripit''** unito a **''cdparanoia''** e ''**oggenc**'' (rispettivamente dai pacchetti Debian
**ripit**, **cdparanoia** e **vorbis-tools**) consente di estrarre le tracce audio da un CD e salvarle in formato .ogg con un unico comando. Se possibile titoli e altre informazioni sul brano sono recuperate dal database on-line **freedb.org**.
Ecco la ricetta:
ripit --ripper 1 --coder 1 --quality 6 --outputdir $HOME/music --playlist 0 --archive
La qualità 6 per ''oggenc'' significa circa **192 kbit/s**.
===== Confronto fra tracce audio =====
Il comando **''shncmp''** dal pacchetto Debian **shntool** consente di confrontare due tracce audio. Dovrebbe permettere anche di compensare eventuali shift fra una traccia e l'altra. In caso di differenza tuttavia non indica //quanta// differenza esiste.
Con **''audacity''** è possibile inevece //vedere// la differenza fra due tracce. Ecco il procedimento:
* Aprire la prima traccia.
* Dal menu //File//, //Import//, //Audio// aprire la seconda traccia.
* Se le due tracce non sono allineate tagliare lo shift; per farlo è necessario che le due tracce **non** sia collegate: //Tracks//, //Link Tracks//.
* Selezionare la prima traccia e dal menu //Effect// scegliere //Invert//.
* Selezionare entrambe le tracce e dal menu //Tracks// scegliere //Mix and Render//.
La traccia risultate è **la differenza** tra le due.
===== Database freedb.org =====
Il database di titoli di CD [[http://www.freedb.org/]] è liberamente consultabile ed aggiornabile.
Ogni disco viene identificato da un **genere** e da un **ID**, tale classificazione è salvata localmente nella directory **''$HOME/.cddb/''** da programmi tipo ''ripit'' o analoghi che usano la libreria ''libcddb2''.
Se localmente abbiamo un file di nome **''$HOME/.cddb/classical/82102618''**, dovrebbe esistere lo stesso file anche all'URL ''[[http://www.freedb.org/freedb/classical/82102618]]''.
È possibile inviare una nuova entry per posta elettronica, basta scrivere a [[freedb-submit@freedb.org]], mettendo come **''Subject: cddb classical 82102618''**, usando come corpo del messaggio il file cddb.
===== Formato APE =====
Per decodificare il formato lossless [[wp>Monkey's Audio]] (APE) si può usare il programma **''ffmpeg''** (dall'omonimo pacchetto Debian), ad esempio:
ffmpeg -i cd_image.ape cd_image.wav
===== Dividere un file audio in base ad un file CUE =====
[[http://aidanjm.wordpress.com/2007/02/15/split-lossless-audio-ape-flac-wv-wav-by-cue-file/|Articolo originale]].
Un file .cue contiene le informazioni sulle tracce di un CD-Audio in questo formato:
PERFORMER "Unknown Artist"
TITLE "Unknown Title"
FILE "CDImage.wav" WAVE
TRACK 01 AUDIO
TITLE "Track01"
PERFORMER "Unknown Artist"
INDEX 00 00:00:00
INDEX 01 00:00:33
TRACK 02 AUDIO
TITLE "Track02"
PERFORMER "Unknown Artist"
INDEX 00 11:26:10
INDEX 01 11:27:60
Il tag **''INDEX''** indica una posizione nel file audio nel formato **mm:ss:ff**, cioè //minuti//, //secondi// e //frame//. Nella struttura di un CD-Audio ci sono 75 frame per ogni secondo. La prima traccia utile è **INDEX 01** (vedi [[wp>Cue sheet (computing)]].
Installando i pacchetti Debian **cuetools** e **shntool** è possibile dividere un unico file nelle singole tracce:
cuebreakpoints CDImage.cue | shnsplit -o wav CDImage.wav
I file risultanti saranno nominati a partire da **''split-track01.wav''**.
Il tool ''cuebreakpoints'' produce una lista di posizioni nel formato **mm:ss.ff**. Per **N posizioni** verranno estratti **N+1 file**. Se la fine del file non viene rilevata automaticamente può capitare un errore nell'estrazione dell'ultima traccia; si può in quel caso aggiungere un breakpoint che indica (fittiziamente) l'ultima posizione utile del file.
**ATTENZIONE:** a volte vengono distribuiti CUE file sbagliati, dove l'INDEX è nel formato mm:ss:dd (minuti, secondi e decimi di secondo); un indizio è quando la terza componente assume valori maggiori o uguali a 74. Si può in questo caso dare in pasto a ''shnsplit'' una lista di breakpoints nel formato **mm:ss.ddd** (minuti, secondi e decimi di secondo). Oppure si converte i decimi di secondo in frame usando la formula ff = dd / 100 * 75.
**ATTENZIONE:** se il formato del file non è in qualità CD (44.1 kHz, 16 bit) il tool ''shnsplit'' non accetta i breakpoints nel formato **mm:ss.ff**, bisogna fornirli piuttosto nel formato **mm:ss.ddd**.
Il programma ''shnsplit'' può leggere direttamente anche il formato ape, bisogna installare il pacchetto **monkeys-audio** (disponibile nel repository [[https://deb-multimedia.org/|deb-multimedia.org]]) che contiene il codec //mac//, lo split in questo caso si fa con:
shnsplit -f CDImage.cue CDImage.ape
È possibile nello stesso modo gestire anche il formato **WavPack Lossless Audio**; è sufficiente installare il pacchetto Debian **wavpack** ed eseguire il comando:
cuebreakpoints file.wv.cue | shnsplit -o wav file.wv
==== File originale in formato FLAC ====
A volte viene distribuito un file FLAC senza il corrispondente .cue, ma le informazioni sulla suddivisione in tracce sono conenute al suo interno come ''CUESHEET block'' oppure come semplici metadati di testo, provare ad estrarre le informazioni con questi comandi:
metaflac --export-cuesheet-to=- file.flac
metaflac --list file.flac
Eventualmente con un editor di testo si deve ottenere un CUESHEET del tipo:
FILE "CDImage.wav" WAVE
TRACK 01 AUDIO
INDEX 01 00:00:00
TRACK 02 AUDIO
INDEX 01 05:14:73
TRACK 03 AUDIO
INDEX 01 11:07:58
Come descritto sopra per i file WAV, si può procedere alla suddivisione in singole tracce:
cuebreakpoints file.cue | shnsplit -o flac file.flac
I pacchetti Debian necessari sono **flac**, **cuetools** e **shntool**.
I file generati saranno del tipo **''split-track01.wav''**, è possibile generare i file anche in altro formato, ad esempio FLAC:
shnsplit -f CDImage.cue -o flac CDImage.ape
==== Qualità eccessiva nei file audio ====
Capita di trovare file audio in qualità superiore a quella del CD-Audio (44.1 kHz, 16 bit), sia in formato lossy che lossless. Per vari motivi può essere utile la conversione (con ovvia perdita, ad esempio per poter masterizzare un normale CD-Audio). Ecco una ricetta che utilizza **''sox''** per convertire un FLAC in WAV, facendo contemporaneamente il downsampling:
sox input_file.flac -r 44100 -b 16 output_file.wav
===== Suddivisione di un file mp3 =====
Estrarre una parte di un file ,mp3 può essere fatto senza fare il deconding e successivo encoding, che altrimenti introducono una perdita di qualità. In Debian GNU/Linux (dalla versione Squeeze) c'è il pacchetto **mp3splt** che contiene l'omonimo comando. Si deve indicare il punto di inizio e il punto di fine in **minuti.secondi**:
mp3splt file.mp3 110.57 127.23
===== Amplificazione senza ricodifica di un file mp3 o aac =====
Alcuni player supportano **speciali tag** che indicano a che volume deve essere riprodotto un brano. Esistono programmi che modificano tale tag dopo aver analizzato il singolo brano o una intera collezione, in modo che suoni a un volume normalizzato.
**ATTENZIONE**: Il pacchetto **mp3gain** è stato rimosso da Debian 9 perché privo di manutenzione (ultima versione in cui era disponibile: Debian 8 Jessie). In alternativa esiste il pacchetto **aacgain**, che aggiunge il supporto ai file audio AAC contenuti nel formato MP4. È disponibile nel repository [[http://www.deb-multimedia.org/|Deb-Multimedia]], non in quello ufficiale.
In teoria basterebbe un editor di tag per aggiungere il tag **replaygain_track_gain**, ma al momento (marzo 2018) né Kid3 né EasyTAG consentono l'aggiunta di tag custom.
Il programma **mp3gain** (dall'omonimo pacchetto Debian) consente di alterare il parametro "global gain" di un file mp3 senza effettuare la ricodifica. Usato in maniera automatica cerca il massimo guadagno applicabile senza raggiungere il clipping (taglio dei punti più alti) del segnale sonoro, ma nella maggior parte dei casi è accettabile il clipping per avere un volume mediamente più alto.
Il programma può lavorare su più di un file contemporaneamente, ad esempio per normalizzare tutti i brani di uno stesso album musicale. Vediamo invece come modificare una singola traccia.
mp3gain file.mp3
con questo comando viene analizzato il file e i risultati vengono scritti in alcuni tag all'interno del file stesso. Nelle successive eleborazioni vengono usate tali informazioni, a meno che non si usi l'opzione ''**%%-s r%%**'' che obblica a calcolarle di nuovo.
mp3gain -a file.mp3
con l'opzione ''**-a**'' si applica il massimo guadagno possibile evitando però il clipping del segnale.
mp3gain -g 1.2 file.mp3
con ''**%%-g%%**'' si applica il guadagno indicato, anche se questo comporterà un clipping del segnale audio.
Aprendo il file con Audacity si può notare l'esito dell'amplificazione, perché il programma applica il parametro "global gain" quando apre e decodifica il file.
In ogni caso le modifiche apportate al file sono salvate in un tag all'interno del file stesso, è possibile quindi annullarle lanciando il programma con l'opzione ''**%%-u%%**''.
===== Conversione da M4A a MP3 o OGG/Vorbis =====
C'è una insana abitudine a distribuire file musicali in contenitori **MPEG-4**, con audio codificato **AAC** e l'aggiunta di **iTunes info**, che si traduce in un flusso audio/video magari con un solo frame still-video. Il file con estensione .m4a viene solitamente interpretato (e convertito) appunto in un flusso audio/video, con evidente inutile sovraccarico.
Ecco una ricetta per convertire il file in un più classico MP3 oppure OGG/Vorbis, con l'opportuna qualità:
ffmpeg -i file.m4a -vn -q:a 1 file.mp3
ffmpeg -i file.m4a -vn -c:a libvorbis -qscale:a 9 file.ogg
Per il formato MP3 la qualità massima è **%%-q:a 0%%** (da 10 a 0), mentre per il formato Vorbis la qualità massima è **%%-qscale:a 10%%** (da 0 a 10).