Skip to content

Instantly share code, notes, and snippets.

@shantiphula
shantiphula / $AudioFundFreqExtractor-README.md
Last active January 22, 2021 04:17
「調和純正律で遊ぼう」WAVEファイルから基音周波数を検出するRubyによるプログラム例

調和純正律で遊ぼう 〜 【発展編】周波数の解析」で紹介した、音声ファイル(WAVEファイル)を離散フーリエ解析し、基音周波数の取り出しを行うRubyプログラムの断片です。

  • audio_fund_freq_extractor.rb … 処理を行う本体です。
  • audio_fund_freq_extractor_spec.rb … テスト兼使用例です。
  • sample-A2.mp3 … テストで用いるサンプル音声(事前にwavファイルへ変換が必要)

テストの実行方法

# sample-A2.mp3 を wav ファイルに変換
@shantiphula
shantiphula / just-intonation-inC-ratios.rb
Created September 27, 2020 23:57
「調和純正律で遊ぼう https://bit.ly/3j7KUpu 」純正律ハ長調の周波数比
#!/usr/bin/env ruby
#-*-ruby-*-
require "rational"
# 純正律ハ長調の周波数比の配列を求める。
def just_intonation_in_C_ratios
octave = Rational(2, 1)
perfect_fifth = Rational(3, 2)
major_third = Rational(5, 4)
@shantiphula
shantiphula / harmonics-tremolo-checker.rb
Created August 24, 2020 01:56
「調和純正律で遊ぼう!」倍音成分同士のハモり・うなり解析
#!/usr/bin/env ruby
# 与えられた音群の、周波数成分(基音及び倍音成分)同士の、ハモり数とうなりを解析する。
def analyze_tremolos(hz_array_of_tones)
# 第何倍音成分まで考慮するか。
harmonics_max = 5
# ハモりの一致は±何Hz許容するか。(本来はセントで考えたほうがいいが)
match_fuzz_hz_max = 1.0
# うなりの秒当たり回数( beats per second )はどの範囲を人間が認識できるとするか。
major_bps_range = (0.5..20.0)