Class: Arquivo::C118mp3

Inherits:
String
  • Object
show all
Defined in:
lib/arquivo/mp3.rb

Overview

permite processar documentos em audio

Instance Attribute Summary collapse

processamento collapse

segmentacao collapse

Instance Method Summary collapse

Constructor Details

#initialize(mp3, opt) ⇒ C118mp3

Returns MP3 c118.

Parameters:

  • mp3 (String)

    MP3 c118

  • opt (Hash)

    parametrizar MINUTA

Options Hash (opt):

  • :amount (Numeric) — default: 0.00001

    qtd ruido a ser removido,

  • :rate (Numeric) — default: 16

    sample rate - radio-16k, CD-44.1k, PC-48k, pro-96k



22
23
24
25
26
27
28
# 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

Instance Attribute Details

#baseString (readonly)

Returns base do documento.

Returns:

  • (String)

    base do documento



11
12
13
# File 'lib/arquivo/mp3.rb', line 11

def base
  @base
end

#extString (readonly)

Returns extensao do documento.

Returns:

  • (String)

    extensao do documento



9
10
11
# File 'lib/arquivo/mp3.rb', line 9

def ext
  @ext
end

#fileString (readonly)

Returns nome do documento.

Returns:

  • (String)

    nome do documento



7
8
9
# File 'lib/arquivo/mp3.rb', line 7

def file
  @file
end

#opcoesHash (readonly)

Returns opcoes parametrizar MINUTA.

Returns:

  • (Hash)

    opcoes parametrizar MINUTA



15
16
17
# File 'lib/arquivo/mp3.rb', line 15

def opcoes
  @opcoes
end

#sizeInteger (readonly)

Returns tamanho do documento.

Returns:

  • (Integer)

    tamanho do documento



13
14
15
# File 'lib/arquivo/mp3.rb', line 13

def size
  @size
end

Instance Method Details

#cmd_segmenta(tempos, pse, cmd) ⇒ String

Returns comando para segmentar minuta.

Parameters:

  • cmd (String)

    comando para segmentar minuta

  • tempos (Array)

    lista tempos para segmentar minuta

  • pse (Integer)

    numero do segmento em processamento

Returns:

  • (String)

    comando para segmentar minuta



69
70
71
72
73
74
75
76
77
78
79
# 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) ⇒ String

Returns nome do segmento.

Parameters:

  • pse (Integer)

    numero do segmento em processamento

Returns:

  • (String)

    nome do segmento



61
62
63
# 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) ⇒ String

Returns opcoes reducao ruido de fundo.

Parameters:

  • npr (String)

    perfil do silencio

Returns:

  • (String)

    opcoes reducao ruido de fundo



40
41
42
# File 'lib/arquivo/mp3.rb', line 40

def onoise(npr)
  npr ? "noisered #{npr} #{format('%<v>.9f', v: opcoes[:amount])} " : ''
end

#orateString

Returns opcoes sample rate & channels.

Returns:

  • (String)

    opcoes sample rate & channels



45
46
47
# File 'lib/arquivo/mp3.rb', line 45

def orate
  "rate -v #{opcoes[:rate]}k channels 1"
end

#processa_mp3(npr) ⇒ Object

Processa mp3 para arquivo

Parameters:

  • npr (String)

    perfil do silencio



34
35
36
# 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) ⇒ Object

Segmenta minuta segundo lista tempos

Examples:

tempos

["120", "10:11", "[[h:]m:]s", ...]

Parameters:

  • tempos (Array)

    lista tempos para segmentar minuta



55
56
57
# File 'lib/arquivo/mp3.rb', line 55

def segmenta_minuta(tempos)
  system cmd_segmenta(['0'] + tempos, 0, '')
end

#segmenta_minuta?Boolean

Returns posso segmentar minuta?.

Returns:

  • (Boolean)

    posso segmentar minuta?



82
83
84
85
86
87
88
89
90
91
92
# 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