Newsgroup: it.comp.lang.visual-basic
Titolo: [?] come si fa a convertire un file.wav da un formato ad un altro formato .wav

Mi spiego, ho dei file .wav in formato 8 Bit Mono 11025 Hz e devo 
convertirli in file .wav ma con le seguenti caratteristiche:
CCITT, mu-law, 8000 Hz,8 bit, mono.
Sono quasi completamente a digiuno su file audio e dintorni, qualcuno sa 
indicarmi come fare o dove reperire le informazioni necessarie?
Grazie mille a tutti.
|ciccio|


Ommammasanta... Vediamo qual e' il sistema piu' semplice.
Anzitutto devi ottenere uno stream a 8kHz, cosa che puoi fare o interpolando
11:8, e droppando un pacchetto (byte) ogni 441, oppure droppando, assai piu'
brutalmente, 3025 pacchetti su 11025.
Per capire come interpolare ti serve anzitutto sapere che codifica usa uno
stream pcm mono. A questa pagina 
http://www.wotsit.org/search.asp
 trovi il
formato di codifica MS per i file wav, e dovresti anche trovarci le
codifiche di compressione standard per i formati wave audio.
Anzitutto devi decidere cosa fare col 441o byte del flusso originale: puoi
dropparlo oppure interpolarlo al precedente, non dovrebbe cambiare molto.
Dopodiche', per una compressione 11:8 puoi interpolare tra loro il secondo e
terzo, il quinto e il sesto, e l'ottavo e il nono pacchetto di ogni blocco
di 11.
Cosi' facendo fai sparire tre pacchetti ogni undici, ottenendo uno stream a
8kHz Mono.
Oppure puoi fregartene dell'interpolazione e droppare il secondo, il quinto
e il nono byte di ogni gruppo di undici, peggiori la qualita' del suono ma
dovrebbe essere comunque ragionevole.
Ora hai uno stream a 8kHz Mono, percui devi solo (si fa per dire) convertire
i valori da codifica lineare in codifica u-law.
A questo indirizzo:
http://www.speech.cs.cmu.edu/comp.speech/Section2/Q2.7.html
Trovi un programma (in C) che effettua la conversione.
I sample utilizzati sono a 16 bit, quindi vanno convertiti.
La conversione va effettuata con una tabella (array) da 256 elementi a 16
bit, che *per una codifica lineare (senza segno o in complemento a 2)*
potrebbe essere una cosa del tipo:
  INDICE        VALORE
00000000 -> 0000000000000001
00000001 -> 0000000000000011
00000010 -> 0000000000001100
00000011 -> 0000000000001111
00000100 -> 0000000000110000
00000101 -> 0000000000110011
00000111 -> 0000000000111111
Mentre per una codifica *lineare* in magnitudine e segno sarebbe molto
simile, ma con l'ottavo bit da riportare solo nel sedicesimo, non nel
quindicesimo e sedicesimo bit della nuova word.
Pero' devi vedere se la codifica Mono e' lineare senza segno, lineare in
complemento a due, lineare magnitudine e segno, logaritmica senza segno,
logaritmica in complemento a due o logaritmica in magnitudine e segno.
Se e' logaritmica ti serve un programma che ti decodifichi i tuoi 8 bit in
16 bit lineari, che poi darai in pasto al convertitore u-law.
HTH,
*

 16 bit lineari, che poi darai in pasto al convertitore u-law.
AZZ ! se quello è il modo semplice... menomale che ci ho rinunciato :-)
(cfr.:
http://www.google.com/groups?threadm=b72cqc%24akbp4%241%40ID-108681.news.dfncis.de
e
http://www.google.com/groups?selm=b7mtua%242jih3%241%40ID-108681.news.dfncis.de
)
Bye, G.

 
grazie mille, adesso inizio ma credo che la faccenda sia moooolto più 
complicata del previsto.
Spero di riuscire in tempo utile.
Farò seguire se e come sono riuscito nell'intento.
Ancora grazie a tutti e se avete altre idee o suggerimenti fatevi 
avanti! :-)
|ciccio|


Come Paperino mi faceva notare un post piu' sopra, forse ti conviene
verificare la fattibilita' della conversione usando dei codec standard.
Ciaotutti,
*

Ci sto lavorando e la cosa è meno semplice del previsto :-(
adesso do un occhio a BASS come suggerito nei riferimenti forniti da 
paperino.
Vi terrò aggiornati e ancora grazie mille per il supporto
|ciccio|