Page 6 of 7

Re: Microphone Support for LÖVE!

Posted: Thu Feb 02, 2017 6:11 am
by Dr. Peeps
raidho36 wrote:OpenAL internally updates at under 50 frames per second. The amount of samples updated per frame is usually at cyclically repeating irregular intervals, e.g. 342 on odd frames and 558 on even frames.
That's useful information. I did notice the fluctuating sample counts.
raidho36 wrote:Also you're reading the data out wrong. You're waiting on entire buffer to fill up before reading. What you should do is immediately read as soon as there is any input in the buffer. That should produce SoundData at the same rate as AL's internal update rate.
Ah, I see. OK, I just tried simplifying it to:

Code: Select all

if data:getSampleCount ( ) > 0 then
  data = inputs[1]:getData()
end
And that gives the fastest reads (I'm getting about 34 updates per second). However, the buffer is jumping from 412 samples, 345 samples, and sometimes down to 67 samples captured per update. A buffer of only 67 samples is too short for me to analyze waveforms correctly, so I think if I change this instead to a comfortable number like if data:getSampleCount() > 300 I should get the results I'm looking for. Thanks for the help! :awesome:

As for my chosen sample rate of 11025 ... what will OpenAL do when I request a rate that isn't supported by a particular piece of hardware? In Windows, it seems to give me any arbitrary rate I ask for. But on the original iPhone, for example, the sample rate is limited to 8000 (on the built-in mic at least). Would my program generate an error in that case?

Re: Microphone Support for LÖVE!

Posted: Thu Feb 02, 2017 1:39 pm
by raidho36
It will fail to start recording, that's pretty simple.

Re: Microphone Support for LÖVE!

Posted: Thu Feb 02, 2017 10:14 pm
by Dr. Peeps
raidho36 wrote:It will fail to start recording, that's pretty simple.
Sure, but I'd like to find out what the problem was and respond to it programmatically.

It looks like "AL lib: (EE) ALCdsoundCapture_open: Device init failed: 0x80070057" gets dumped to output when the call to RecordingDevice:start() fails. Other than that I don't see any errors for "bitrate not supported" or the like ....

Re: Microphone Support for LÖVE!

Posted: Thu Feb 02, 2017 10:43 pm
by raidho36
It's impossible to tell, this is why. AL error codes are undescriptive. You get the text in error steam in console and it tells more about the nature of the problem than error code. And besides, is not like you want to crash your game just because your selected format is not supported. Just goes to show that you do not hard-code things that may or may not be supported.

Re: Microphone Support for LÖVE!

Posted: Thu Feb 02, 2017 11:21 pm
by Dr. Peeps
raidho36 wrote:And besides, is not like you want to crash your game just because your selected format is not supported. Just goes to show that you do not hard-code things that may or may not be supported.
Yes, that's my point. :) I don't want to crash the game and I don't want to hardcode a single option; I want to request the option that is optimal for my game, and then switch to plan B (and then C, etc.) if it's not available.

With no error message/code, I don't even know which parameter I need to change to try again. I guess I just have to try all options until one hopefully returns success.

Re: Microphone Support for LÖVE!

Posted: Fri Feb 03, 2017 1:22 am
by raidho36
Yes that's how it works. The framework does the same thing when it opens a window.

It will error if you try to use a format not supported by the framework itself, but if the hardware doesn't support it then it will simply fail to do anything, and return false.

Re: Microphone Support for LÖVE!

Posted: Sat Mar 10, 2018 11:03 pm
by Snow(original)
My apologies to bump a year old thread, but I'm having difficulty figuring out how to return a list of frequencies (or even just a single variable continually updated with the latest frequency) from microphone input using FFT. I'm not going to post any of my code yet as that is pointless. I just wonder if this is possible with this microphone library.

What I want the numbers for is a simple visualizer that scrolls across the screen (which consists of 10px wide rects and the height of each rect is determined by the frequency number returned). I have the code for this simple visualizer working (using randomly generated numbers). I just need to figure out how to get samples from the mic which I can then feed through FFT and get those numbers.

Any help on this matter is greatly appreciated and I will reciprocate to the community by contributing my help (on things or problems I understand) and even contributing any libraries that I should code. I do have a nice little text input library that I'm going to post soon. :)

Thank you.

-Snow

Re: Microphone Support for LÖVE!

Posted: Sun Mar 11, 2018 3:59 am
by zorg
Snow(original) wrote: Sat Mar 10, 2018 11:03 pm ...
Raidho may give a more expanded answer, but i'd say get 0.11 (latest nightly release of löve) since that already has the microphone support in-built (more or less based on this lib).

In short, you get a buffer (SoundData) of samplepoints recorded by the microphone, and then you run an FFT algorithm on those samplepoints (maybe windowing them before as well, to your liking), and finally, use the returned values in your frequency analyzer.

There's nothing inherently impossible; the fft is just an algorithm that takes 1 set of numbers and transforms them to another set of numbers.

Edit: Dr. Peeps is right, the FFT actually returns frequency bins, which cover more than just individual frequencies.

Re: Microphone Support for LÖVE!

Posted: Sun Mar 11, 2018 4:04 am
by Dr. Peeps
Snow(original) wrote: Sat Mar 10, 2018 11:03 pm I'm having difficulty figuring out how to return a list of frequencies (or even just a single variable continually updated with the latest frequency) from microphone input using FFT. I just wonder if this is possible with this microphone library.
Yes, it's certainly possible. You're more likely going to be looking for the amplitude of each range of frequencies, not "returning a list of frequencies" ... there is a lot of information on using FFTs out there. It's doesn't need to be specific to LÖVE.
Snow(original) wrote: Sat Mar 10, 2018 11:03 pm What I want the numbers for is a simple visualizer that scrolls across the screen (which consists of 10px wide rects and the height of each rect is determined by the frequency number returned). I have the code for this simple visualizer working (using randomly generated numbers). I just need to figure out how to get samples from the mic which I can then feed through FFT and get those numbers.
First of all, are you using LÖVE 0.11? The mic capabilities are not in the current released version (0.10.2).

Re: Microphone Support for LÖVE!

Posted: Sun Mar 11, 2018 4:45 am
by Snow(original)
Hey guys,

thank you for the replies so far. I feel a bit silly. I just downloaded the nightly build. :/ I'll play around with it and see what I come up with. I'll also post my code if I have problems.