Skip to content

jamis/chaussettes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chaussettes

Chaussettes is a wrapper around the command-line sox utility. It enables you to manipulate audio by programmatically constructing a sox operation, including multiple effect chains and various supported input and output streams.

Installation

Simply gem install it.

$ gem install chaussettes

It has no other dependencies, although it won't work very well if you don't also install sox, which you can grab here: http://sox.sourceforge.net/.

Usage

To find out information about an existing clip, you can use the Chaussettes::Info class:

require 'chaussettes'

info = Chaussettes::Info.new('hello.mp3')
p info.duration # 192.3 (seconds)

To programmatically construct a sox command-line, use the Chaussettes::Clip class:

require 'chaussettes'

clip = Chaussettes::Clip.new do |c|
  c.mix
  c.in 'music-track.mp3'
  c.in 'narration.wav'
  c.out 'soundtrack.wav'
end

clip.run
# sox --combine mix music-track.mp3 narration.wav soundtrack.wav

Each input and output can also accept options, which ought to be chained onto the corresponding input:

clip = Chaussettes::Clip.new do |c|
  c.mix
  c.in('music-track.mp3').volume(0.5)
  c.in 'narration.wav'
  c.out('soundtrack.wav').bits(16).rate(44_100).channels(2)
end

clip.run
# sox --combine mix \
#     --volume 0.5 music-track.mp3 \
#     narration.wav \
#     --bits 16 --rate 44100 --channels 2 soundtrack.wav

Furthermore, you can also chain effects to the clip:

clip = Chaussettes::Clip.new do |c|
  c.mix
  c.in 'music-track.mp3'
  c.in 'narration.wav'
  c.out 'soundtrack.wav'
  c.chain.trim(0, 10).pad(1.5)
end
# sox --combine mix \
#     music-track.mp3 narration.wav soundtrack.wav \
#     trim 0 10 pad 1.5

(Note that not all effects supported by sox are implemented by Chaussettes...yet)

And multiple effect chains may be applied, for potentially complex effects:

clip = Chaussettes::Clip.new do |c|
  c.mix
  c.in 'music-track.mp3'
  c.in 'narration.wav'
  c.out 'soundtrack.wav'
  c.chain.trim(0, 10).pad(1.5)
  c.chain.newfile
  c.chain.restart
end
# sox --combine mix \
#     music-track.mp3 narration.wav soundtrack.wav \
#     trim 0 10 pad 1.5 : newfile : restart

Inputs may be other clip instances, too:

music = Chaussettes::Clip.new do |c|
  c.in 'music-track.mp3'
  c.out(device: :stdout).type(:wav)
  c.chain.fade(0, 10, 0.5)
end

clip = Chaussettes::Clip.new do |c|
  c.mix
  c.in(music).volume(0.5).type(:wav)
  c.in 'narration.wav'
  c.out 'soundtrack.wav'
end
# sox --combine mix \
#     --volume 0.5 --type wav "|sox music-track.mp3 --type wav - fade 0 10 0.5" \
#     narration.wav soundtrack.wav

Author

Jamis Buck jamis@jamisbuck.org

About

A thin wrapper around the sox audio manipulation utility

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages