Differenze tra le versioni di "Estrarre informazioni generali da un file audio aiff con le sole funzioni di Gambas"
Da Gambas-it.org - Wikipedia.
Riga 18: | Riga 18: | ||
Dim info As New InfoAIFF | Dim info As New InfoAIFF | ||
− | Dim aiff As String = "''/percorso/del/file.aiff''" | + | Dim aiff As String = "<FONT Color=gray>''/percorso/del/file.aiff''</font>" |
Dim fl As File | Dim fl As File | ||
Dim i As Integer | Dim i As Integer | ||
Riga 70: | Riga 70: | ||
dur = (info.frames / (info.canali * 2)) / info.frequenza | dur = (info.frames / (info.canali * 2)) / info.frequenza | ||
− | Print "Durata: "; Null, CStr( | + | Print "Durata: "; Null, CStr(Time(0, 0, 0, dur * 1000)) |
'''End''' | '''End''' |
Versione delle 16:51, 29 giu 2021
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(Time(0, 0, 0, dur * 1000)) End
Riferimenti
- http://it.wikipedia.org/wiki/AIFF
- http://muratnkonar.com/aiff/index.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
- http://sox.sourceforge.net/AudioFormats-11.html#ss11.1