Recursive Audio Converter: sviluppatori venite a me!

Pagina 1 di 4 1 2 3 4 ultimo
Visualizzazione dei risultati da 1 a 10 su 40
  1. #1
    kibibyte
    Registrato
    Nov 2016
    Messaggi
    217
    configurazione

    Predefinito Recursive Audio Converter: sviluppatori venite a me!

    Preambolo

    Ho iniziato a scrivere questo software, che nient'altro è che un wrapper per SoX e CamillaDSP (usandoli in pipe) per le mie seguenti necessità:
    - Convertire in batch molteplici file audio in differenti cartelle senza dovermi preoccupare del loro sample-rate e bit-depth, applicando filtri e/o upsampling
    - Rimpiazzare SoX per gestire la convoluzione, da utilizzatore di BruteFir non ho mai riscontrato risultati simili, può tranquillamente essere placebo ma ho sempre ottenuto risultati un gradino sotto utilizzando SoX.
    - Liberarmi della prolissa e confusionaria sintassi di SoX e della scomoda sintassi via file di configurazione YAML di CamillaDSP.


    Funzionamento e sintassi

    Sintassi:

    Usage: java -jar RecursiveAudioConverter.jar [PARAMETERS]
    Parameters:
    --input-dir [ex. /home/music/]
    --input-format [ex. flac]
    --output-dir [fulldir/single_subfolder/.] (use . to specify the same folder. If input and output formats are the same old files will be overwritten)
    --output-format [ex. dsf]
    --output-bit [ex. 24]
    --output-rate [44100-384000|NextSync|MaxSync]
    --convolution [ex /home/filters/fir1.dbl]
    --debug


    File di configurazione

    #Recursive Audio Converter Config
    #To specify the directories use the full path. ex. /home/folder/sox
    Threads=12
    SoXDir=/home/simone/sox
    CamillaDSPDir=/home/simone/camilladsp
    DebugFile=/home/simone/debug.log
    Normalize=0 #[dB, 0=inactive. Not yet implemented]

    #ResamplerQuality [Synchronous|FastAsync|BalancedAsync|AccurateAsync]
    #ConvolutionFileFormat [TEXT|S16LE|S24LE|S24LE3|S32LE|FLOAT32LE|FLOAT64LE]

    ResamplerQuality=AccurateAsync
    ConvolutionFileFormat=FLOAT64LE

    #Recursive Audio Converter File Formats config
    CompressionLevel=8


    Esempi:

    Ad esempio voglio convertire un X numero di files presenti in una cartella (e sottocartelle incluse) da FLAC a WAVPACK, facendo un upsampling alla frequenza di campionamento del file di input *2:
    --input-dir /musica --output-dir . --input-format flac --output-format wv --output-bit 24 --output-rate NextSync

    Oppure voglio effettuare l'upsample di file provenienti da un SACD a dsd256 applicando un filtro di convoluzione:
    --input-dir /home/musica --output-dir . --input-format dsf --output-format dsf --output-rate 11289600 --convolution /home/filtro.txt


    Più tardi aggiungerò informazioni più specifiche per quanto riguarda il funzionamento e la to-do list.
    Per il momento è una beta, le classi che wrappano le funzionalità di CamillaDSP e SoX son (quasi)complete e funzionanti in modo tale da velocizzare lo sviluppo.


    https://audiodigitale.eu/?p=293
    Ultima modifica di SimoneFil : 03-11-2020 a 01:03

  2. #2
    kibibyte
    Registrato
    Nov 2016
    Messaggi
    217
    configurazione

    Predefinito


    Proseguo da dove ho interrotto:

    L'intero funzionamento è basato interamente su l'utilizzo di SoX essenzialmente per la conversione tra formati, e CamillaDSP per resampling e convolution (camilladsp accetta in input solo raw e manda in output raw). Eccezion fatta per il DSD che è ancora relegato a SoX (anche se sembra che approderà su camilla).

    Se non fosse per il DSD avrei optato per utilizzare Freac al posto di SoX per la conversione tra formati, in quanto espone molte più opzioni per la compressione e mantiene i tag, a differenza di SoX.

    Ovviamente le funzioni esposte e wrappate all'interno del codice sono filtrare seguento l'uso e il target di Recursive Audio Converter. Non ha senso esporre effetti come echo e riverbero presenti in SoX, ad esempio.


    To-Do


    - Implementare la possibilità di input e output da pipe, ora come ora è solo da/a file. ( e si potrebbe pensare pure a input/output direttamente da interfaccia audio)FATTO
    - Aggiungere compatibilità con Win, ora è compatibile con sistemi Unix-Like. è un lavoro veloce in quanto la differenza sta nella sintassi di come son scritte le directory: \ su Win come separatore / su Unix. Per il resto essendo scritto in Java non ci sono problemi per l'uso su diversi o.s. e piattaforme FATTO
    - Aggiungere la possibilità di far leggere a Recursive Audio Converter una cartella contenente i filtri fir invece di specificarne uno singolo. Questo è necessario nel caso si voglia convertire in bathch molteplici file facendo upsample utilizzando l'opzione NextSync. In questo caso se i file avranno sample rate differenti sarà necessario avere filtri a un sample rate differente. FATTO
    - Wrappare l'opzione gain su Camilla, necessaria in particolare per conversioni DSD->PCM dove è necessario applicare un gain +6 FATTO
    - Aggiungere in maniera pensata l'opzione per la normalizzazione. Dovrebbe essere utilizzabile unicamente in caso di input da pipe. Se utilizzata per una conversione in batch, specialmente se accoppiata con resample/convoluzione ha un memory usage spaventoso (come è normale che sia) FATTO
    Ultima modifica di SimoneFil : 03-11-2020 a 01:04

  3. #3
    kibibyte
    Registrato
    Nov 2016
    Messaggi
    217
    configurazione

    Predefinito

    Update:
    1- Aggiunta compatibilità con sistemi Windows
    2- Aggiunta possibilità di utilizzare filtri in differenti sample rates in maniera dinamica. Mi spiego:
    Nel caso si volesse utilizzare l'upsample con parametro NextSync su files con differenti frequenze di campionamento, O, appena finirò di implementarla, si vorrà utilizzare RecursiveAudioConverter facendogli leggere il file da pipe, sarebbe impossibile fornire un unico file di filtro a una fissata frequenza di campionamento. Per evitare ciò:

    Nel file di configurazione Config.properties impostare UseMultipleConvolutionFiles a true
    Quando si chiama RecursiveAudioConverter, come argomento per la convoluzione, fornire la cartella contenente i filtri, quindi ad esempio --convolution /home/filtri
    I filtri nella cartella andranno nominati con la seguente sintassi impulse[sampleRate].[estensione]. Ad esempio impulse44100.txt, oppure impulse176400.dbl

    Da un breve test effettuato facendo una conversione di 110 file in multithread, con upsample alla massima qualità a frequenza prossima sincrona, bit depth 24bit, convoluzione con filtro a 262144 taps, salvataggio del file di output in FLAC al massimo livello di compressione ho ottenuto un throughput medio di 25MB/s su un i7-9750h. Binari non compilati con ottimizzazioni per la mia cpu ma opzioni generiche.

    Update Pubblicata la release 0.2 su GitHub con le sopracitate modifiche.

    Prossimo passo l'implementazione del gain rendendo il valore impostabile (spesso con upsample e convoluzione è necessario, anche se l'impulso applicato è sempre sotto 0dB NON implica necessariamente che l'output non possa clippare!).
    Quindi la possibilità di ricevere input e mandare output da pipe (devo pensarlo bene per evitare deadlock o ram mangiata all'infinito visto che devo gestirlo da Java), e infine file di preset, così da non dover scrivere tutte le opzioni su command line e banalmente avviare con java -jar RecursiveAudioConverter.jar /home/upsample.preset. Questo in vista di una possibile implementazione nella logica di LMS.


    Update 25/08
    pubblicata v0.3.
    Aggiunta l'opzione di normalizzare il file a fine processamento
    Aggiunta lìopzione di applicare gain (negativo) prima del processamento. Pur fornendo un filtro con gain negativo e che quindi non supera i 0dB, NON garantisce (anche se in rari casi) che non si verifichi clipping. Sempre meglio dare un -1 o -2 di gain di sicurezza prima di applicare i filtri (non si perde dinamica perchè il file viene prima convertito in float64)
    Ultima modifica di SimoneFil : 25-08-2020 a 20:15

  4. #4
    tebibyte
    Registrato
    Aug 2011
    Età
    51
    Messaggi
    2,928
    configurazione

    Predefinito

    hai idea a cosa sia dovuto questo errore?

    codice:
    java -jar RecursiveAudioConverter.jar --input-dir /tmp --output-dir . --input-format flac --output-format wav --debug
    Error: A JNI error has occurred, please check your installation and try again
    Exception in thread "main" java.lang.UnsupportedClassVersionError: com/RAC/Main has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
    	at java.lang.ClassLoader.defineClass1(Native Method)
    	at java.lang.ClassLoader.defineClass(ClassLoader.java:757)
    	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    	at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
    	at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
    	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
    Ultima modifica di antonellocaroli : 13-09-2020 a 21:16

  5. #5
    kibibyte
    Registrato
    Nov 2016
    Messaggi
    217
    configurazione

    Predefinito

    Originariamente inviato da antonellocaroli
    hai idea a cosa sia dovuto questo errore?

    codice:
    java -jar RecursiveAudioConverter.jar --input-dir /tmp --output-dir . --input-format flac --output-format wav --debug
    Error: A JNI error has occurred, please check your installation and try again
    Exception in thread "main" java.lang.UnsupportedClassVersionError: com/RAC/Main has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
    	at java.lang.ClassLoader.defineClass1(Native Method)
    	at java.lang.ClassLoader.defineClass(ClassLoader.java:757)
    	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    	at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
    	at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
    	at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
    Scarica il JRE 14 di Java, avrai una versione più vecchia. (se sei su linux openjdk14)
    La prossima release la compilerò con un target di versione minore per aumentare la compatibilità ed evitare di costringere ad aggiornare Java

    Poi, se hai difficoltà a compilare i binari di CamillaDSP dimmelo che li allego qui.

    P.S. lo sviluppo non è in pausa, sto facendo un GUI per Windows per poter favorire l'uso in ambito conversione offline. Per poi infine concludere aggiungendo il supporto alla copia dei tag ai brani convertiti. Poi una volta chiuso questo capitolo proverò a modificarlo per poterlo utilizzare in pipe
    Ultima modifica di SimoneFil : 13-09-2020 a 22:49

  6. #6
    tebibyte
    Registrato
    Aug 2011
    Età
    51
    Messaggi
    2,928
    configurazione

    Predefinito

    Originariamente inviato da SimoneFil
    Scarica il JRE 14 di Java, avrai una versione più vecchia. (se sei su linux openjdk14)
    La prossima release la compilerò con un target di versione minore per aumentare la compatibilità ed evitare di costringere ad aggiornare Java

    Poi, se hai difficoltà a compilare i binari di CamillaDSP dimmelo che li allego qui.

    P.S. lo sviluppo non è in pausa, sto facendo un GUI per Windows per poter favorire l'uso in ambito conversione offline. Per poi infine concludere aggiungendo il supporto alla copia dei tag ai brani convertiti. Poi una volta chiuso questo capitolo proverò a modificarlo per poterlo utilizzare in pipe
    uso virtual/jdk e virtual/jre (versione 1.8.0) in linux (gentoo), non ho problemi con altre applicazioni java

    Camilla giá l ho compilato...
    Ultima modifica di antonellocaroli : 14-09-2020 a 07:43

  7. #7
    kibibyte
    Registrato
    Nov 2016
    Messaggi
    217
    configurazione

    Predefinito

    Originariamente inviato da antonellocaroli
    uso virtual/jdk e virtual/jre (versione 1.8.0) in linux (gentoo), non ho problemi con altre applicazioni java

    Camilla giá l ho compilato...
    Nuova release 0.4. Ho fixato un po' di bug, Java minimo richiesto abbassato all'ultima LTS, quindi versione 11.
    La versione 8 è troppo vecchia e non include funzioni che utilizzo nel codice.

  8. #8
    kibibyte
    Registrato
    Nov 2016
    Messaggi
    217
    configurazione

    Predefinito

    Aggiunta una versione con GUI (solo per windows): https://audiodigitale.eu/repo/Recurs...nverterGUI.zip

    Clicca sull'immagine per ingrandirla

Nome:   Recursive-Audio-Converter-GUI.png
Visite: 88
Dimensione:   24.1 KB
ID: 18077

  9. #9
    kibibyte
    Registrato
    Nov 2016
    Messaggi
    217
    configurazione

    Predefinito

    Nuova versione. Il nome RecursiveAudioConverter rimarrà per la versione con GUI utilizzabile per conversioni in batch offline.

    Per quanto riguarda invece la versione utilizzabile con LMS si chiamerà YCLD, supporta input/output da pipes e lettura degli header degli stream in ingresso (solo per wav). Per evitare di riscrivere tutto rilinko al post su DIYAudio Dynamic transcoding and convolution in Logitechmediaserver

  10. #10
    tebibyte
    Registrato
    Aug 2011
    Età
    51
    Messaggi
    2,928
    configurazione

    Predefinito

    Originariamente inviato da SimoneFil
    Nuova versione. Il nome RecursiveAudioConverter rimarrà per la versione con GUI utilizzabile per conversioni in batch offline.

    Per quanto riguarda invece la versione utilizzabile con LMS si chiamerà YCLD, supporta input/output da pipes e lettura degli header degli stream in ingresso (solo per wav). Per evitare di riscrivere tutto rilinko al post su DIYAudio Dynamic transcoding and convolution in Logitechmediaserver
    Scusa ma non ho capito, adesso YCLD puó essere usato anche per le conversioni in batch? oltre alla convulazione in LMS?

    Altra domanda, non si riesce propio a farlo funzionare con java 8?

Pagina 1 di 4 1 2 3 4 ultimo

Informazioni Thread

Users Browsing this Thread

Ci sono attualmente 1 utenti che stanno visualizzando questa discussione. (0 utenti e 1 ospiti)

Regole d'invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
nexthardware.com - © 2002-2022