class Arquivo::C118mp3

permite processar documentos em audio

Attributes

base[R]

@return [String] base do documento

ext[R]

@return [String] extensao do documento

file[R]

@return [String] nome do documento

opcoes[R]

@return [Hash] opcoes parametrizar MINUTA

size[R]

@return [Integer] tamanho do documento

Public Class Methods

new(mp3, opt) click to toggle source

@param [String] mp3 MP3 c118 @param [Hash] opt parametrizar MINUTA @option opt [Numeric] :amount (0.00001) qtd ruido a ser removido, @option opt [Numeric] :rate (16) sample rate - radio-16k, CD-44.1k, PC-48k, pro-96k @return [C118mp3] MP3 c118

# File lib/arquivo/mp3.rb, line 22
def initialize(mp3, opt)
  @file = mp3
  @ext = File.extname(mp3).downcase
  @base = File.basename(mp3, File.extname(mp3))
  @size = `soxi -V0 -D #{mp3} #{O1}`.to_f
  @opcoes = opt
end

Public Instance Methods

cmd_segmenta(tempos, pse, cmd) click to toggle source

@param tempos (see segmenta_minuta) @param pse (see nome_segmento) @param [String] cmd comando para segmentar minuta @return [String] comando para segmentar minuta

# File lib/arquivo/mp3.rb, line 69
def cmd_segmenta(tempos, pse, cmd)
  return cmd[1..-1] unless pse < tempos.size

  o = nome_segmento(pse)
  cmd += ";sox #{file} #{base}/#{o}#{ext} trim #{tempos[pse]}"
  pse += 1
  cmd += " =#{tempos[pse]}" if pse < tempos.size
  puts o

  cmd_segmenta(tempos, pse, cmd + " #{O2}")
end
nome_segmento(pse) click to toggle source

@param [Integer] pse numero do segmento em processamento @return [String] nome do segmento

# File lib/arquivo/mp3.rb, line 61
def nome_segmento(pse)
  "sg#{format('%<v>02d', v: pse)}-#{base[/\d{8}/]}#{base[/-\w+/]}"
end
onoise(npr) click to toggle source

@param npr (see processa_mp3) @return [String] opcoes reducao ruido de fundo

# File lib/arquivo/mp3.rb, line 40
def onoise(npr)
  npr ? "noisered #{npr} #{format('%<v>.9f', v: opcoes[:amount])} " : ''
end
orate() click to toggle source

@return [String] opcoes sample rate & channels

# File lib/arquivo/mp3.rb, line 45
def orate
  "rate -v #{opcoes[:rate]}k channels 1"
end
processa_mp3(npr) click to toggle source

@!group processamento Processa mp3 para arquivo

@param [String] npr perfil do silencio

# File lib/arquivo/mp3.rb, line 34
def processa_mp3(npr)
  system "sox -G #{file} tmp/zip/#{base}.mp3 #{onoise(npr)}#{orate} #{O2}"
end
segmenta_minuta(tempos) click to toggle source

@!group segmentacao Segmenta minuta segundo lista tempos

@param [Array] tempos lista tempos para segmentar minuta @example tempos

["120", "10:11", "[[h:]m:]s", ...]
# File lib/arquivo/mp3.rb, line 55
def segmenta_minuta(tempos)
  system cmd_segmenta(['0'] + tempos, 0, '')
end
segmenta_minuta?() click to toggle source

@return [Boolean] posso segmentar minuta?

# File lib/arquivo/mp3.rb, line 82
def segmenta_minuta?
  return true if AT.include?(ext) && size.positive? && !File.exist?(base)

  if File.exist?(base)
    puts "erro: #{base} pasta ja existe"
  else
    puts 'erro: so consigo processar minutas com som ' \
         "e do tipo #{AT}"
  end
  false
end