2013-01-02 20 views
9

Io sto leggendo un file wav attraverso AudioInputStream in un array di byte,Devo preoccuparmi di big endian e little endian quando leggo i dati tramite AudioInputStream?

AudioInputStream audiofile = AudioSystem.getAudioInputStream(f); 
    byte[] audio=new byte[numberofframes*framesize]; 
    int bytes=audiofile.read(audio); 

ho bisogno per organizzare i byte di un campione si considera che i dati sono disposti in little endian o se l'AudioInputStream fa per me?

+0

stai leggendo da file? –

+0

sì, tramite JFilechooser, File f = chooser.getSelectedFile(); –

+0

'framesize' Qual è il valore di questo? Se '1', endian non è rilevante. Se '4', lo è. –

risposta

1

Big- versus little-endian è importante se i dati sono codificati in più di un singolo byte, ad es. Profondità di bit di 16 o più, indipendentemente dal numero di canali. Java non organizza automaticamente i byte PCM in un ordine predefinito, ma li accetta solo.

Quello che segue è la più chiara, la sezione miglior singolo scritto dei tutorial java audio, imho, e copre le questioni relative a formati e le loro conversioni:

http://docs.oracle.com/javase/tutorial/sound/converters.html

+0

Quindi dici che l'array di byte avrà dati audio formattati, ad esempio in Little Endian, che dovrò convertire da solo per leggere i campioni? –

+0

Le linee di output possono essere Big o Little-Endian, sì? Se inserisci il tipo opposto, allora sono sicuro al 90% che dovrai fare uno scambio dei byte prima di emettere. Ma probabilmente ci sarà un convertitore per questo, quindi non devi necessariamente sporcarti le mani a livello di byte. Hai visto il link che ho inviato? Non sono sicuro di quanto sia appropriato il termine "Dati audio formattati" per i dati PCM. Se la codifica è a 16 bit o superiore, i byte devono essere in un ordine o nell'altro, indipendentemente. Non penso che AudioInputStream "si interessi", ma porta solo byte grezzi di PCM. –