The WebRTC project included a voice engine(GIPS, Global IP Solutions), here is an example to show how you can use the voice engine to record audio from microphone.
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "webrtc/modules/audio_device/include/audio_device.h"
#include "webrtc/common_audio/resampler/include/resampler.h"
#include "webrtc/modules/audio_processing/aec/include/echo_cancellation.h"
class AudioTransportImpl: public webrtc::AudioTransport
{
private:
public:
AudioTransportImpl(webrtc::AudioDeviceModule* audio){
}
~AudioTransportImpl(){
}
virtual int32_t RecordedDataIsAvailable(
const void* audioSamples,
const uint32_t nSamples,
const uint8_t nBytesPerSample,
const uint8_t nChannels,
const uint32_t samplesPerSec,
const uint32_t totalDelayMS,
const int32_t clockDrift,
const uint32_t currentMicLevel,
const bool keyPressed,
uint32_t& newMicLevel)
{
printf("record %d %d %d %d %d %d %d %d\n", nSamples,
nBytesPerSample, nChannels,
samplesPerSec, totalDelayMS,
clockDrift, currentMicLevel, keyPressed);
// now you have the audioSamples...
return 0;
}
};
int main(int argc, char **argv){
webrtc::AudioDeviceModule *audio;
audio = webrtc::CreateAudioDeviceModule(0, webrtc::AudioDeviceModule::kPlatformDefaultAudio);
assert(audio);
audio->Init();
int num;
int ret;
num = audio->RecordingDevices();
printf("Input devices: %d\n", num);
for(int i=0; i<num; i++){
char name[webrtc::kAdmMaxDeviceNameSize];
char guid[webrtc::kAdmMaxGuidSize];
int ret = audio->RecordingDeviceName(i, name, guid);
if(ret != -1){
printf(" %d %s %s\n", i, name, guid);
}
}
audio->SetRecordingDevice(0);
audio->InitRecording();
AudioTransportImpl callback(audio);
audio->StartRecording();
getchar();
}
For more webrtc demos, visit: https://github.com/ideawu/webrtc-demo