Differenze tra le versioni di "Estrarre informazioni generali da un file audio aiff con le sole funzioni di Gambas"

Da Gambas-it.org - Wikipedia.
 
(4 versioni intermedie di uno stesso utente non sono mostrate)
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
   Dim bb As Byte[]
+
   Dim b, c As Byte
 
   Dim dur As Float
 
   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
 
    
 
    
  Print "File aiff: "; Null, aiff
+
  Seek #fl, InStr(File.Load(aiff), "COMM") + 8
  info.nome = aiff
+
  Read #fl, b
 +
  Print "Canali:         "; b
 +
  info.canali = b
 
    
 
    
  fl = Open aiff For Read
+
  For c = 1 To 4
 +
    Read #fl, b
 +
    i = Shl(i, 8) Or b
 +
  Next
 +
  Print "Numero frames:  "; i; " byte"
 +
  info.frames = i
 
   
 
   
   bb = New Byte[](4)
+
  Seek #fl, Seek(fl) + 1
 +
  Read #fl, b
 +
  Print "Risoluzione:   "; b; " bit"
 +
  info.risoluzione = b
 
   
 
   
  Seek #fl, 4
+
  i = 0
  bb.Read(fl, 0, 4)
+
  Seek #fl, Seek(fl) + 2
  i = bb[3]
+
  For c = 1 To 2
  i += bb[2] * 256      <FONT Color=gray>' ''&0100''</font>
+
     Read #fl, b
  i += bb[1] * 65536    <FONT Color=gray>' ''&010000''</font>
+
    i = Shl(i, 8) Or b
  i += bb[0] * 16777216 <FONT Color=gray>' ''&01000000''</font>
+
  Next
  Print "Dimensione: "; Null, i + 8; " byte"
+
  Print "Frequenza:     "; i; " hertz"
  info.dimensione = i + 8
+
  info.frequenza = i
      
+
  Seek #fl, 21
+
  fl.Close
  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      <FONT Color=gray>' ''&0100''</font>
 
  i += bb[1] * 65536    <FONT Color=gray>' ''&010000''</font>
 
  i += bb[0] * 16777216 <FONT Color=gray>' ''&01000000''</font>
 
  Print "Numero frames: "; Null, i * 4; " byte"
 
  info.frames = i * 4
 
 
 
 
   
 
   
  bb.Read(fl, 0, 2)
+
  dur = info.frames / info.frequenza
  Print "Risoluzione: "; Null, bb[1]; " bit"
+
  Print "Durata:         "; Time(0, 0, 0, dur * 1000)
  info.risoluzione = bb[1]
 
 
 
   
 
  Seek #fl, 30
 
  bb.Read(fl, 0, 2)
 
  i = bb[1]
 
  i += bb[0] * 256      <FONT Color=gray>' ''&0100''</font>
 
  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'''
 
  '''End'''
 
  
  
Riga 79: Riga 74:
 
=Riferimenti=
 
=Riferimenti=
 
* http://it.wikipedia.org/wiki/AIFF
 
* http://it.wikipedia.org/wiki/AIFF
* http://muratnkonar.com/aiff/index.html
+
* http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/AIFF.html
* http://www.onicos.com/staff/iz/formats/aiff.html
 
* http://www.lim.di.unimi.it/IEEE/TRAVIS/AIFFC.HTM
 
* http://www-mmsp.ece.mcgill.ca/documents/audioformats/aiff/aiff.html
 
 
* http://paulbourke.net/dataformats/audio/
 
* http://paulbourke.net/dataformats/audio/
 
* http://multimedia.cx/mirror/AudioIFF1_2_1.htm
 
* http://multimedia.cx/mirror/AudioIFF1_2_1.htm
* http://lehre.hki.uni-koeln.de/kurz/kurz1/planets/fileformats/AIFFSpecs.pdf
 
 
* 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