Class: CarrierWave::AudioWaveform::WaveformData
- Inherits:
-
Object
- Object
- CarrierWave::AudioWaveform::WaveformData
- Defined in:
- lib/carrierwave/audio_waveform/waveform_data.rb,
lib/carrierwave/audio_waveform/waveform_data.rb
Defined Under Namespace
Classes: ArgumentError, Log, RuntimeError
Constant Summary collapse
- DefaultOptions =
{ pixels_per_second: 10, bits: 16 }
Class Method Summary collapse
-
.generate(source, options = {}) ⇒ Object
Generate a Waveform image at the given filename with the given options.
- .generate_json_filename(source) ⇒ Object
- .generate_waveform_data(source, options = DefaultOptions) ⇒ Object
Class Method Details
.generate(source, options = {}) ⇒ Object
Generate a Waveform image at the given filename with the given options.
Available options (all optional) are:
:convert_to_extension_before_processing => Symbolized extension (:wav, :mp3, etc.)
Useful if .wav or .mp3 isn't being passed in--you can convert to that format first.
:set_extension_before_processing => Symbolized extension (:wav, :mp3, etc.)
This is useful because CarrierWave will send files in with the wrong extension sometimes.
For instance, if this is nested under a version, that version may be an .mp3, but its parent
:pixels_per_second => The number of pixels per second to evaluate.
:bits => 8 or 16 bit precision
:logger => IOStream to log progress to.
Example:
CarrierWave::AudioWaveform::Waveformer.generate("Kickstart My Heart.wav")
CarrierWave::AudioWaveform::Waveformer.generate("Kickstart My Heart.wav", :method => :rms)
CarrierWave::AudioWaveform::Waveformer.generate("Kickstart My Heart.wav", :color => "#ff00ff", :logger => $stdout)
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/carrierwave/audio_waveform/waveform_data.rb', line 40 def generate(source, ={}) = DefaultOptions.merge() [:filename] ||= self.generate_json_filename(source) old_source = source if [:convert_to_extension_before_processing] source = generate_valid_source(source, [:convert_to_extension_before_processing]) elsif [:set_extension_before_processing] source = generate_proper_source(source, [:set_extension_before_processing]) end raise ArgumentError.new("No source audio filename given, must be an existing sound file.") unless source raise ArgumentError.new("No destination filename given for waveform") unless [:filename] raise RuntimeError.new("Source audio file '#{source}' not found.") unless File.exist?(source) @log = Log.new([:logger]) @log.start! @log.timed("\nGenerating...") do stdout_str, stderr_str, status = self.generate_waveform_data(source, ) if stderr_str.present? && !stderr_str.include?("Recoverable") raise RuntimeError.new(stderr_str) end end if source != old_source && [:convert_to_extension_before_processing] @log.out("Removing temporary file at #{source}") FileUtils.rm(source) elsif source != old_source && [:set_extension_before_processing] @log.out("Renaming file at #{source}") old_ext = File.extname(source).gsub(/\./, '').to_sym generate_proper_source(source, old_ext) end @log.done!("Generated waveform data '#{[:filename]}'") [:filename] end |
.generate_json_filename(source) ⇒ Object
78 79 80 81 82 |
# File 'lib/carrierwave/audio_waveform/waveform_data.rb', line 78 def generate_json_filename(source) ext = File.extname(source) source_file_path_without_extension = File.join File.dirname(source), File.basename(source, ext) "#{source_file_path_without_extension}.json" end |
.generate_waveform_data(source, options = DefaultOptions) ⇒ Object
84 85 86 87 88 89 |
# File 'lib/carrierwave/audio_waveform/waveform_data.rb', line 84 def generate_waveform_data(source, = DefaultOptions) [:filename] ||= self.generate_json_filename(source) Open3.capture3( "audiowaveform -i #{source} --pixels-per-second #{[:pixels_per_second]} -b #{[:bits]} -o #{[:filename]}" ) end |