Differenze tra le versioni di "Estrarre informazioni generali da un file audio aiff con le sole funzioni di Gambas"
Da Gambas-it.org - Wikipedia.
(Creata pagina con 'Il formato '''AIFF''' (''Audio Interchange File Format'') è utilizzato per immagazzinare dati audio secondo il metodo di rappresentazione digitale ''Pulse-code modulation'' (...') |
|||
Riga 30: | Riga 30: | ||
bb = New Byte[](4) | bb = New Byte[](4) | ||
− | + | ||
Seek #fl, 4 | Seek #fl, 4 | ||
bb.Read(fl, 0, 4) | bb.Read(fl, 0, 4) | ||
i = bb[3] | i = bb[3] | ||
− | i += bb[2] * 256 ' &0100 | + | i += bb[2] * 256 <FONT Color=gray>' ''&0100''</font> |
− | i += bb[1] * 65536 ' &010000 | + | i += bb[1] * 65536 <FONT Color=gray>' ''&010000''</font> |
− | i += bb[0] * 16777216 ' &01000000 | + | i += bb[0] * 16777216 <FONT Color=gray>' ''&01000000''</font> |
Print "Dimensione: "; Null, i + 8; " byte" | Print "Dimensione: "; Null, i + 8; " byte" | ||
info.dimensione = i + 8 | info.dimensione = i + 8 | ||
Riga 48: | Riga 48: | ||
bb.Read(fl, 0, 4) | bb.Read(fl, 0, 4) | ||
i = bb[3] | i = bb[3] | ||
− | i += bb[2] * 256 ' &0100 | + | i += bb[2] * 256 <FONT Color=gray>' ''&0100''</font> |
− | i += bb[1] * 65536 ' &010000 | + | i += bb[1] * 65536 <FONT Color=gray>' ''&010000''</font> |
− | i += bb[0] * 16777216 ' &01000000 | + | i += bb[0] * 16777216 <FONT Color=gray>' ''&01000000''</font> |
Print "Numero frames: "; Null, i * 4; " byte" | Print "Numero frames: "; Null, i * 4; " byte" | ||
info.frames = i * 4 | info.frames = i * 4 | ||
Riga 63: | Riga 63: | ||
bb.Read(fl, 0, 2) | bb.Read(fl, 0, 2) | ||
i = bb[1] | i = bb[1] | ||
− | i += bb[0] * 256 ' &0100 | + | i += bb[0] * 256 <FONT Color=gray>' ''&0100''</font> |
Print "Frequenza: "; Null, i; " hertz" | Print "Frequenza: "; Null, i; " hertz" | ||
info.frequenza = i | info.frequenza = i |
Versione delle 13:01, 6 mag 2015
Il formato AIFF (Audio Interchange File Format) è utilizzato per immagazzinare dati audio secondo il metodo di rappresentazione digitale Pulse-code modulation (PCM). Pertanto, essi non sono compressi.
E' possibile estrarre alcune informazioni generiche relative al file ed all'audio dal blocco iniziale, comune a tutti i file di tipo aiff, anche mediante le sole risorse di Gambas.
Mostriamo un semplice esempio:
Public Struct InfoAIFF nome As String dimensione As Integer canali As Byte frames As Integer risoluzione As Byte frequenza As Integer End Struct Public Sub Main() Dim info As New InfoAIFF Dim aiff As String = "/percorso/del/file.aiff" Dim fl As File Dim i As Integer Dim bb As Byte[] Dim dur As Float Print "File aiff: "; Null, aiff info.nome = aiff fl = Open aiff For Read bb = New Byte[](4) Seek #fl, 4 bb.Read(fl, 0, 4) i = bb[3] i += bb[2] * 256 ' &0100 i += bb[1] * 65536 ' &010000 i += bb[0] * 16777216 ' &01000000 Print "Dimensione: "; Null, i + 8; " byte" info.dimensione = i + 8 Seek #fl, 21 bb.Read(fl, 0, 1) Print "Canali: "; Null, bb[0] info.canali = bb[0] bb.Read(fl, 0, 4) i = bb[3] i += bb[2] * 256 ' &0100 i += bb[1] * 65536 ' &010000 i += bb[0] * 16777216 ' &01000000 Print "Numero frames: "; Null, i * 4; " byte" info.frames = i * 4 bb.Read(fl, 0, 2) Print "Risoluzione: "; Null, bb[1]; " bit" info.risoluzione = bb[1] Seek #fl, 30 bb.Read(fl, 0, 2) i = bb[1] i += bb[0] * 256 ' &0100 Print "Frequenza: "; Null, i; " hertz" info.frequenza = i fl.Close dur = (info.frames / (info.canali * 2)) / info.frequenza Print "Durata: "; Null, CStr(Date(0, 0, 0, 0, 0, 0, dur * 1000)) End
Riferimenti
- http://it.wikipedia.org/wiki/AIFF
- http://muratnkonar.com/aiff/index.html
- http://www.onicos.com/staff/iz/formats/aiff.html
- http://www-mmsp.ece.mcgill.ca/documents/audioformats/aiff/aiff.html
- http://paulbourke.net/dataformats/audio/
- http://multimedia.cx/mirror/AudioIFF1_2_1.htm
- http://web.archive.org/web/20071219035740/http://www.cnpbagwell.com/aiff-c.txt