Гитарный тюнер с Ruby - PullRequest
       17

Гитарный тюнер с Ruby

4 голосов
/ 22 декабря 2010

Я никогда не работал с аудио функциями в реальном времени. Я хотел бы знать, существуют ли библиотеки ruby, которые позволили бы мне создать что-то вроде гитарного тюнера.

1 Ответ

4 голосов
/ 22 декабря 2010

Есть две ортогональные задачи: 1) прочитать аудио, 2) обработать его.Чтобы получить аудио, вы можете проверить ruby-audio , хотя, если честно, я никогда не использовал его, и его документация кажется скудной.Лично я бы прибегнул к тому, что предоставляет ваша операционная система;например, в GNU / Linux у нас есть удобные инструменты, такие как bplay .Вторая проблема заключается в том, как рассчитать БПФ аудио, это должно быть легко с FFTW3 .

Вот быстрый и грязный пример, который получает максимальную точку БПФ от стандартный (16 бит, моно):

require 'rubygems'
require 'fftw3'

module Tuner
  def self.peaks(input_channel, samplerate, window_size)
    Enumerator.new do |enum|
      loop do
        data = input_channel.read(window_size).unpack("s*")
        na = NArray.to_na(data)
        fft = FFTW3.fft(na).to_a[0, window_size/2]
        max_n = fft.map(&:abs).each_with_index.drop(1).max[1]
        enum.yield(max_n.to_f * samplerate / window_size)
      end
    end
  end
end

if __FILE__ == $0
  Tuner.peaks(STDIN, 8000, 1024).each { |f| puts f }
end

Для вызова, например:

$ brec -s 8000 -b 16 | ruby tuner.rb
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...