Come realizzare un convertitore audio in java?

vorrei realizzare un convertitore audio in java ma non so cosa in teoria dovrei fare. Non postate codice ma solamente indicazioni, link e dritte. Grazie mille

2 risposte

Classificazione
  • 8 anni fa
    Risposta preferita

    Di convertitori, tecnicamente parlando, non credo ne esistano al mondo.

    Quello che si fa è affiancare un decoder a un encoder. Quindi, il convertitore è composto da due pezzi. Il primo pezzo decodifica l'audio, trasformandolo dal formato in cui si trova al formato "RAW" (cioè completo e non compresso). Poi, l'encoder codifica l'audio RAW in un altro formato.

    I due pezzi funzionano in parallelo, secondo un design di tipo pipe (l'output del decoder va immediatamente in input all'encoder).

    Ciò detto, per implementare il decoder, devi implementare gli algoritmi di decodifica dei formati che vuoi poter leggere. I formati sono standard (alcuni aperti, molti a pagamento), e li trovi tutti su Internet. Per codificare, devi fare la stessa cosa, ma al contrario, cioè implementare un algoritmo che trasformi l'audio RAW nel formato del file di destinazione.

    Postilla non ovvia: l'audio RAW è una sequenza di numeri a N bit (diciamo un enorme array). Solitamente, si usa audio a 16 bit, solo pochi formati supportano audio a 24 o 32bit.

    Formati liberi sono:

    - Vorbis (l'audio dei file ogg): http://xiph.org/vorbis/doc/

    Uno stream vorbis va inserito in un file con formato ogg: http://xiph.org/ogg/doc/

    - FLAC: http://flac.sourceforge.net/format.html

    Formati a pagamento sono:

    - mp3 (parte audio degli standard MPEG):

    http://www.iso.org/iso/iso_catalogue/catalogue_tc/...

    http://www.iso.org/iso/home/store/catalogue_ics/ca...

    - wma: Il formato è proprietario, Microsofto fornisce decoder e encoder già compilati, che puoi solo richiamare dalla tua applicazione.

    Ad ogni modo, nessun convertitore moderno implementa veramente encoder e decoder al proprio interno.

    Quello che si fa è semplicemente mettere insieme pezzi già fatti. Peraltro, la comunità open source mette a disposizioni componenti di buona qualità a questo scopo:

    - LAME, encoder MP3 di ottima qualità: http://lame.sourceforge.net/

    - MPlayer/Mencoder, decoder e encoder audio e video: http://www.mplayerhq.hu/design7/news.html

    - FFMpeg: decoder e encoder audio e video, focalizzato sui formati MPEG: http://ffmpeg.org/

    - libav: fork di FFMpeg: http://libav.org/

    Usarli da Java, però, presenta parecchie difficoltà, per via della macchina virtuale che poco supporta interazioni con l'esterno. Potresti usare .NET invece di Java, oppure creare un wrapper molto semplice in C attorno alla libreria che hai scelto, e richiamare quello dal programma Java.

    In ultimo, la scelta più difficile, che è quella di usare JNI per creare una classe Java, implementata in C++, che richiami le librerie.

  • maxon
    Lv 5
    8 anni fa

    Se lo vuoi comunque fare in Java vedi "Java Media Framework"

Altre domande? Fai una domanda e ottieni le risposte che cerchi.