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(Date(0, 0, 0, 0, 0, 0, dur * 1000))
+
   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