Module: AudioInfo

Defined in:
lib/audioinfo.rb

Defined Under Namespace

Classes: Aiff, Ape, Au, Audiofile, FileName, Flac, Mp3, Mpc, Ogg, Shn, Snd, Tipo, Virtual, Wav

Constant Summary collapse

SUPPORT =
%w{flac ogg mp3 wav aiff au snd shn ape mpc}

Class Method Summary collapse

Class Method Details

.determinarTipoExtension(sFile) ⇒ Object

Determina el tipo de archivo, a partir de su extensi�n



93
94
95
96
97
98
99
100
# File 'lib/audioinfo.rb', line 93

def self.determinarTipoExtension(sFile)
  sSupport=SUPPORT.join('|')
  if sFile=~/\.(#{sSupport})$/i
    return $1.downcase
  else
    return false
  end
end

.determinarTipoFile(sFile) ⇒ Object

Determina el tipo de archivo, a partir del comando file



81
82
83
84
85
86
87
88
89
90
91
# File 'lib/audioinfo.rb', line 81

def self.determinarTipoFile(sFile)
  sTipo=`file -L -b \"#{sFile}\"`
  if sTipo=~/^FLAC/
    return 'flac'
  elsif sTipo=~/^MP3/
    return 'mp3'
    elsif sTipo=~/Ogg.*Vorbis audio/
    return 'ogg'
  end
  false
end

.infoFile(sFile) ⇒ Object

entrega un objeto AudioInfo::Tipo



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/audioinfo.rb', line 56

def self.infoFile(sFile)
  # primero, identificar el tipo de archivo
  return false if !File.stat(sFile).file?
  return false  if !(tipo=determinarTipoFile(sFile)) and !(tipo=determinarTipoExtension(sFile))
  # ok, existe. Ahora, obtengo la informaci�n sobre �l de la manera 'legal'
  begin
    oInfoTags=self.const_get(tipo.capitalize.intern).new(sFile)
  rescue StandardError => ex
    print "Error in file #{sFile} "+ex
    print ex.backtrace
    return false
  end
  # Si falta alg�n dato, lo trato de obtener del nombre del archivo
  if oInfoTags.incompleto?
    # ahora verifico que esten todos los datos en orden.
    oNombre=AudioInfo::FileName.new(sFile)
    oInfoTags.merge(oNombre)
    # si todav�a falta algo, lo arreglo
    oInfoTags.album='Desconocido' if oInfoTags.album.nil?
    oInfoTags.artist='Desconocido' if oInfoTags.artist.nil?
  end
  # Si no, busco por el nombre
  return oInfoTags
end