I am beginning to design a program that will record audio from the microphone or line-in, and save the recordings in files.
One of the prominent features of the program will be that it will run constantly in the background and start recording when receiving a signal above a certain threshold. I have a few preliminary technical questions I hope someone can answer (partial answers are also welcome):
1. Which SDK/API should I use for recording? The best options I came across seem to be (i) the Windows multimedia API, (ii) DirectSound, and (iii) the Total Recorder Developer Edition or their Virtual Sound Driver SDK. Other possibilities I came across are OpenAL, Allegro and SDL. What are their differences and relative advantages and disadvantages? Are there better ones?
These are the criteria that concern me:
(i) stability, given that recording will be continuous for long periods of time,
(ii) compatibility with all versions of Windows,
(iii) ease of use and lack of bugs,
(iv) useful and varied advanced features,
(v) low latency,
(vi) good integration with MinGW (preferably through Dev-Cpp),
(vii) availability of examples and good documentation (if you have links to examples of the api you recommend, that would be nice).
If you have suggestions for other obvious criteria I am missing, please tell me; specifically, are there any special considerations to take when recording continuously for a long time, or when the program needs to run flawlessly on all versions of Windows?
2. Does recording or playing back in the background involve multi-threading (or rather, will I have to take care of it or will the SDK I will use do it)?
3. The program is intended to record speech. I have a few questions about codecs: (i) Is there any reason to use or not to use the codecs that come with Windows (given, for example, the availability of Speex)? (ii) If I use just one codec, is there another codec that may be a better choice than Speex (for example, if I want users to be able to play their files on any computer, or for other reasons)? (iii) As to patented codecs, who needs to pay for their use? The software makers/distributors or the users? Does the payment need to be payed once or per copy? Where can this information can be found, and also information about which codecs are restricted for use and which aren't?
4. Are there any good (and preferably open-source) libraries for reducing noise and echo, or similar useful functions?