Advertisement
Guest User

Untitled

a guest
Nov 29th, 2015
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.04 KB | None | 0 0
  1. require "thread"
  2. require "fftw3"
  3. require "coreaudio"
  4. require 'ruby-progressbar'
  5.  
  6. # progressbar = ProgressBar.create
  7. # progressbar.total = 100
  8.  
  9. Thread.abort_on_exception = true
  10.  
  11. BUF_SIZE=1024*4
  12.  
  13. inbuf = CoreAudio.default_input_device.input_buffer(BUF_SIZE)
  14. PEAK = 65535.0
  15.  
  16. @mutex = Mutex.new
  17. @db = nil
  18. @f = nil
  19. run = true
  20. th = Thread.start do
  21. loop do
  22. wav = inbuf.read(BUF_SIZE)
  23. amp = wav.abs.max.to_f
  24. @mutex.synchronize do
  25. @db = 20 * Math.log(amp / PEAK)
  26. @f = FFTW3.fft(wav, 1).abs/wav.length
  27. end
  28. end
  29. end
  30.  
  31. inbuf.start
  32. Signal.trap("SIGINT") { run = false}
  33. sleep 1
  34. while run
  35. db = nil
  36. f = nil
  37.  
  38. @mutex.synchronize do
  39. db = @db
  40. f = @f
  41. end
  42. system("clear")
  43. print "#{db.to_i} dB |"
  44. (db.to_i + 100).times { print "=" }
  45. puts
  46. puts "frequency:"
  47. freq = f.to_a.map(&:first)[0...300].map{|i| i.to_i }
  48. freq.each_with_index{|i, idx| puts(("%3d |"%idx)+("D"*[360,i].min)) if idx % 2 == 0 }
  49. puts freq.length
  50. sleep 0.1
  51. end
  52.  
  53.  
  54. inbuf.stop
  55. th.kill.join
  56. #
  57. #
  58. #
  59. puts "#{inbuf.dropped_frame} frame dropped at input buffer."
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement