Differenze tra le versioni di "Estrarre informazioni generali da un file audio aiff con le sole funzioni di Gambas"
Da Gambas-it.org - Wikipedia.
(Una versione intermedia di uno stesso utente non è mostrata) | |||
Riga 15: | Riga 15: | ||
− | + | Public Sub Main() | |
Dim info As New InfoAIFF | Dim info As New InfoAIFF | ||
− | Dim aiff As String = "<FONT Color= | + | Dim aiff As String = "<FONT Color=darkgreen>''/percorso/del/file.aiff''</font>" |
Dim fl As File | Dim fl As File | ||
Dim i As Integer | Dim i As Integer | ||
− | Dim | + | Dim b, c As Byte |
Dim dur As Float | Dim dur As Float | ||
Riga 68: | Riga 68: | ||
Print "Durata: "; Time(0, 0, 0, dur * 1000) | Print "Durata: "; Time(0, 0, 0, dur * 1000) | ||
− | + | End | |
Versione attuale delle 03:47, 19 giu 2024
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 b, c As Byte Dim dur As Float Print "File aiff: "; aiff info.nome = aiff fl = Open aiff For Read Seek #fl, 4 For c = 1 To 4 Read #fl, b i = Shl(i, 8) Or b Next Print "Dimensione: "; i + 8; " byte" info.dimensione = i + 8 Seek #fl, InStr(File.Load(aiff), "COMM") + 8 Read #fl, b Print "Canali: "; b info.canali = b For c = 1 To 4 Read #fl, b i = Shl(i, 8) Or b Next Print "Numero frames: "; i; " byte" info.frames = i Seek #fl, Seek(fl) + 1 Read #fl, b Print "Risoluzione: "; b; " bit" info.risoluzione = b i = 0 Seek #fl, Seek(fl) + 2 For c = 1 To 2 Read #fl, b i = Shl(i, 8) Or b Next Print "Frequenza: "; i; " hertz" info.frequenza = i fl.Close dur = info.frames / info.frequenza Print "Durata: "; Time(0, 0, 0, dur * 1000) End