Flying memes

Rappresentazione di un file Audio con Ruby

Nell’ottica di un progetto un pò più grande che vorrei portare avanti (e del quale spero di poter scrivere qualcosa nel prossimo futuro) ho speso gli ultimi giorni per trovare un modo col quale interfacciarmi con un file audio utilizzando Ruby.
La risposta è arrivata da ruby-audio, un wrapper Ruby costruito (nell’ormai lontano 2005) intorno a libsndfile del quale ripropone i metodi consentendoci di utilizzare una sintassi come la seguente:

snd = Audio::Soundfile.open(File.join(RAILS_ROOT,'public','audio','sound.wav'))
frames = snd.readf_float snd.frames

In queste due righe di codice ho istruito Ruby ad aprire un file audio e ad estrarne i frames; utilizzando poi le google chart api per stamparli a video con il seguente risultato:

Campionamento I problemi legati a ruby-audio sono tutti di natura tecnica: la libreria è infatti parecchio datata e non è all’interno delle rubygems, deve essere quindi scaricata ed installata con i seguenti comandi:

rake
rake install

In più sono richieste alcune dipendenze, nell’ordine:

  • NArray: installabile tramite le rubygems: ‘gem install narray’ ;
  • libsndfile: installabile attraverso l’appropriato package manager (nel caso di utenti OSX ‘sudo port install libsndfile’);
  • SWIG: anche questo installabile tramite il propri package manager (‘sudo port install swig’);
  • Rake: installabile tramite le rubygems ‘gem install rake’;

Prima di poter finalmente compilare questa libreria è necessario un ultimo passaggio: all’interno del file  ‘lib/audio.rb’ è necessario inserire in cima al file:

require 'rubygems'

in modo da far si che il successivo “require ‘narray'” vada a buon fine.