view sv/audioio/AudioRecording.cpp @ 243:e977d4abea8a

Sample code to record audio
author lbarthelemy
date Fri, 28 Mar 2008 11:15:59 +0000
parents
children 3f41cb822166
line wrap: on
line source

#include "audioio/AudioRecording.h"

#ifdef HAVE_PORTAUDIO

#include <portaudio.h>
#include <sndfile.h>
#endif

static int myCallback( void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, PaTimestamp outTime, void *userData )
{
	//float *in = (float *) inputBuffer;
	SNDFILE* file  = (SNDFILE*)userData;

	if( inputBuffer == NULL ) return 0;
	
	//
	//	sf_writef_float(file, (float*)inputBuffer, framesPerBuffer);
	//else
		sf_writef_short(file, (short*)inputBuffer, framesPerBuffer);


	return 0;
}


void recordAudio() //QString& fileName)
{
	PortAudioStream *stream;
	
	Pa_Initialize();
	
	SF_INFO fileInfo;
    fileInfo.samplerate = 44100;
    fileInfo.channels = 1;
    fileInfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16; //SF_FORMAT_FLOAT;
 
	
	SNDFILE* file = sf_open("d:/sample.wav", SFM_WRITE, &fileInfo);
	if (file != NULL) {
		Pa_OpenDefaultStream(&stream,fileInfo.channels, 0, /* mon input, no output */
							paInt16/*paFloat32*/, fileInfo.samplerate,
							64, 0, /* 64 frames per buffer, let PA determine numBuffers */
							myCallback, (void*)file);
	
		Pa_StartStream( stream );
		Pa_Sleep( 5000 ); /* Sleep for 10 seconds while processing. */
		Pa_StopStream( stream );
		Pa_CloseStream( stream );

		sf_close(file);
	}



	Pa_Terminate();




}