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 21: Riga 21:
 
   Dim fl As File
 
   Dim fl As File
 
   Dim i As Integer
 
   Dim i As Integer
   Dim bb As Byte[]
+
   Dim b, c As Byte
 
   Dim dur As Float
 
   Dim dur As Float
 
   
 
   
Riga 78: Riga 78:
 
* http://multimedia.cx/mirror/AudioIFF1_2_1.htm
 
* http://multimedia.cx/mirror/AudioIFF1_2_1.htm
 
* http://web.archive.org/web/20071219035740/http://www.cnpbagwell.com/aiff-c.txt
 
* http://web.archive.org/web/20071219035740/http://www.cnpbagwell.com/aiff-c.txt
* http://sox.sourceforge.net/AudioFormats-11.html#ss11.1
 

Versione attuale delle 19:49, 22 set 2022

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


Riferimenti