LoginSignup
37
40

More than 5 years have passed since last update.

ruby-soxでかっこいい音楽を作ってみる

Posted at

linux環境下では、soxという素敵な 音声処理のためのスイスアーミーナイフ が存在します。
画像におけるImageMagick、動画におけるffmpegのように、サーバ内で自動的に音声処理をするのに向いています。

それをrubyでお手軽に使えるようにしたのがruby-soxです。
ruby-soxの使い方のレクチャーとして、rubyで自動的に音声をぶった切って新しい音色を作る、ということをやってみたいと思います。

まずはsoxのインストール。

ruby-soxはgemからインストールできます。

gem install ruby-sox

soxにはいろいろコマンドが用意されているのですが、ただ使うだけだとコマンドラインからsoxを実行するのとあまりかわらないので、せっかくなのでループを使ってできることをしてみたいと思います。

今回のサンプルでは、グラニュラーシンセシスという技法を使います。
グラニュラーシンセシスとは、元々ある音源を非常に細かく切ってグレイン(粒子)という単位まで分割し、再構成することによって新しい音色を作るというものです。
今回は音源を一定の個数に切り、それをランダムにつなぎ直す用にしました。
サンプルでは5.5秒のデータを0.1秒ごとに区切って並び替えています。

granular.rb
require "ruby-sox"

try_num = 55

try_num.times do |num|
sox = Sox::Cmd.new().add_input("test.mp3")
        .set_output("tmp/test_#{num}.mp3")
        .set_effects(:trim => "=#{num*0.1} =#{(num+1)*0.1}",:rate => 44100, :channels => 2)
        .run
end

a = []
try_num.times do |num|
  r = rand try_num
  a.push "tmp/test_#{r}.mp3"
end

combiner = Sox::Combiner.new(a, :combine => :concatenate, :rate => 44100, :channels => 2)
combiner.write('test.mp3')

soxのドキュメントを見ると、エフェクトをかけたり、音の調整をしたり、音響周りのいろいろなことができるので、画像や動画投稿サービスに続いて、これらを駆使したシステムを作ってみるのもいいのかもしれないなと思っています。

37
40
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
40