class Mmfcc::Clustering

Public Class Methods

new(cnum) click to toggle source
# File lib/mmfcc/clustering.rb, line 8
    def initialize(cnum)
  @cnum = cnum
end

Public Instance Methods

kmeans(all_mfcc, clusterNum) click to toggle source
# File lib/mmfcc/clustering.rb, line 12
def kmeans(all_mfcc, clusterNum)

        ai4r_data = Ai4r::Data::DataSet.new(:data_items=> all_mfcc)

        cluster = Ai4r::Clusterers::KMeans.new
cluster.build(ai4r_data, clusterNum)

return cluster
end
loadMFCC(mfccFile, m, all_mfcc) click to toggle source
# File lib/mmfcc/clustering.rb, line 22
    def loadMFCC(mfccFile, m, all_mfcc)
        
        mfcc = []
        mfccs = []

        File.open(mfccFile, "r+b")  {|f|
                  while line = f.read(4)
                    if line == "" then
                          break
                    end

                    val = line.unpack('f')[0]
                    mfcc.push(val)
                    

                    if mfcc.length==m then
                          mfccs.push(mfcc)
                          all_mfcc.push(mfcc)
                          mfcc=[]
                    end
                  end
            }

            return mfccs
end
run() click to toggle source
# File lib/mmfcc/clustering.rb, line 48
def run

    mfccDir = './mfcc/'

        clusterNum = @cnum.to_i
        mfcc_dict = {}
        all_mfcc = []

        Find.find(mfccDir) {|mfccFile|
           next unless mfccFile.end_with?(".mfc")
           mfcc = loadMFCC(mfccFile, 20, all_mfcc)
           mfcc_dict[mfccFile]=mfcc
        }

        cluster = kmeans(all_mfcc, clusterNum)

        writeToFile = File.open("./histgram.txt",'w')

    mfcc_dict.each{|key, value|
            writeToFile.puts key

            histgram = [0]*clusterNum

            value.each{|d|
                   i = cluster.eval(d)
                   histgram[i]+=1
           }
           
           str_hist = histgram.join(" ")
           writeToFile.puts str_hist

    }

    puts "histgram.txt is created."
    writeToFile.close
end