module MorseWave

Данный модуль, отвечает за запись фразы, в файл в формате .wav

Constants

CURRENT_PATH

Путь необходимый для создания массива путей к файлам. Возвращает в родительский католог

ORIGINAL_PATH

Текущий путь к папке с программой

Public Class Methods

text_to_wave(morse) click to toggle source
# File lib/morsify/morse_wave.rb, line 18
def self.text_to_wave(morse)
  text = Telegraph.morse_to_text(morse)

  unless text.nil?
    # разбиваем слово на буквы, включая пробелы
    letters = text.downcase.strip.split('')

    # массив путей к файлам
    paths = to_paths_array(letters)

    # проверка существуют ли файлы по заданному пути
    check_paths(paths)

    # создаем имя будущего файла
    file_of_name = generate_file_name

    # cохраняем файл в формате .wav
    write_to_wave(file_of_name, paths)
  end
end

Private Class Methods

check_paths(paths) click to toggle source

метод который проверяет, существуют ли файлы по заданному пути

# File lib/morsify/morse_wave.rb, line 107
def self.check_paths(paths)
  paths.each do |path|
    abort "File #{path} does not exist!" unless File.exist?(path)
  end
end
generate_dir(name_of_folder) click to toggle source

метод который создает папку, если она не была создана после чего переходит в директорию

# File lib/morsify/morse_wave.rb, line 130
def self.generate_dir(name_of_folder)
  Dir.mkdir(name_of_folder) unless File.exist?(name_of_folder)
  Dir.chdir(name_of_folder)
end
generate_file_name() click to toggle source

метод который отвечает за создание названия файла

# File lib/morsify/morse_wave.rb, line 119
def self.generate_file_name
  Time.now.strftime('%H-%M-%S') + '.wav'
end
generate_name_folder() click to toggle source

метод который отвечает за создание имени папки

# File lib/morsify/morse_wave.rb, line 124
def self.generate_name_folder
  Time.now.strftime('%d-%m-%Y')
end
replace_chars(letters) click to toggle source

метод который заменяет: (,.?!) на их названия

# File lib/morsify/morse_wave.rb, line 65
def self.replace_chars(letters)
  replacements = {
    ',' => 'comma',
    '.' => 'dot',
    '!' => 'exclamation',
    '?' => 'question'
  }

  letters.map do |letter|
    if replacements.key?(letter)
      replacements[letter]
    else
      letter
    end
  end
end
replace_white_space(letters) click to toggle source

метод который заменяет пробелы на 'pause'

# File lib/morsify/morse_wave.rb, line 60
def self.replace_white_space(letters)
  letters.map { |letter| letter == ' ' ? 'pause' : letter }
end
to_paths_array(letters) click to toggle source

метод который возвращает массив путей к файлам

# File lib/morsify/morse_wave.rb, line 42
def self.to_paths_array(letters)
  # массив путей к файлам
  paths = []

  # массив букв где пробел заменен на 'pause'
  chars = replace_white_space(letters)

  # массив символов где (,.?!) заменены на их названия
  chars = replace_chars(chars)

  # создаем массив путей к файлам
  chars.each { |char| paths << CURRENT_PATH + '/src/sound/' + char + '.wav' }

  # возвращаем массив путей к файлам
  paths
end
view_save_path() click to toggle source

метод который показывает куда был сохранен файл

# File lib/morsify/morse_wave.rb, line 114
def self.view_save_path
  Dir.pwd
end
write_to_wave(file_of_name, paths) click to toggle source

метод который сохраняет звуки азбуки морзе в один файл

# File lib/morsify/morse_wave.rb, line 83
def self.write_to_wave(file_of_name, paths)
  # создаем папку records, если она не была создана
  # после чего переходим в директорию records
  generate_dir('records')

  # имя подпапки в формате: ('%d-%m-%Y')
  name_of_folder = generate_name_folder

  # создаем подпапку, если она не была создана
  # после чего переходим в директорию
  generate_dir(name_of_folder)

  Writer.new(file_of_name, Format.new(:mono, :pcm_16, 44_100)) do |writer|
    paths.each do |file_name|
      Reader.new(file_name).each_buffer do |buffer|
        writer.write(buffer)
      end
    end
  end
  # возвращаем путь куда был сохранен файл
  "Generate wave file: #{view_save_path}/#{file_of_name}"
end