superiorlu/morse_code

View on GitHub
lib/morse_code/wave.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
require 'wavefile'
require 'digest'
module MorseCode
  class Wave
    include WaveFile

    attr_reader :message

    def initialize(message, frequency = 600, sample_rate = 8000)
      @message = message
      @sample_rate = sample_rate
      @sample = MorseCode::Sample.new(message, frequency, sample_rate)
    end

    def generate
      buffer = WaveFile::Buffer.new(pcm_samples, WaveFile::Format.new(:mono, :float, @sample_rate))
      WaveFile::Writer.new(filepath, WaveFile::Format.new(:mono, :pcm_16, @sample_rate)) do |writer|
        writer.write(buffer)
      end
      filepath
    end

    private

    def filepath
      "/tmp/morse_code-#{filename}"
    end

    def filename
      "#{Digest::MD5.hexdigest(message)[0, 10]}.wav"
    end

    def pcm_samples
      @pcm_samples ||= @sample.pcm_samples
    end
  end
end