Microphones

-- Measures amplitude of microphone over time and uses it to scale a circle

amplitude = 0

function lovr.load()
  name = lovr.audio.getMicrophoneNames()[1]
  assert(name, 'No microphone found!')
  microphone = lovr.audio.newMicrophone(name)
  microphone:startRecording()
  print('Recording from ' .. name)
end

function lovr.update(dt)
  if microphone:isRecording() then
    local soundData = microphone:getData()

    if soundData then
      local samples = soundData:getSampleCount()
      local totalAmplitude = 0

      for i = 0, samples - 1 do
        totalAmplitude = totalAmplitude + math.abs(soundData:getSample(i))
      end

      amplitude = amplitude + (totalAmplitude / samples - amplitude) * (1 - .05 ^ dt)
    end
  end
end

function lovr.draw()
  lovr.graphics.setColor(1, 1, 1, .5)
  lovr.graphics.circle('line', 0, 1.7, -1, amplitude * 20 + .01)
end