All pastes #1646632 Raw Edit

Someone

public c v1 · immutable
#1646632 ·published 2009-10-28 16:20 UTC
rendered paste body
module main;private{	import std.stdio;	import derelict.openal.al;}const uint frequency = 44100;const uint seconds = 5;ALuint Source, Buffer;void* capture(out uint size){	//ALCchar* deviceName = alcGetString(null,0x310);        ALCchar* deviceName = alcGetString(null, ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER);	writefln("DEVICE: %s",cast(char*)deviceName);	ALCdevice *captureDevice = alcCaptureOpenDevice(deviceName /*Just get first one*/,frequency /*Frequency*/,AL_FORMAT_MONO16,frequency * 2 * seconds /*10 Seconds worth*/);        ALCvoid *buf; 	alcCaptureStart(captureDevice);        int frameCount;	do   	{       		alcGetIntegerv(captureDevice,ALC_CAPTURE_SAMPLES,1,&frameCount);		//alcCaptureSamples(captureDevice, buf, frameCount);                writefln("FrameCount: %d",frameCount);   	}   	//10 Seconds at least   	while(frameCount <= frequency * seconds);     //Stop since we are done         writefln("DEVICE: %s",cast(char*)deviceName);	foreach(i,error;[AL_NO_ERROR,AL_INVALID_NAME,AL_INVALID_ENUM,AL_INVALID_VALUE,AL_INVALID_OPERATION,AL_OUT_OF_MEMORY])	{		if(error != AL_NO_ERROR)       		{			writefln("ERROR: %s",cast(char*)alGetString(error));		}	}	return buf;}ALboolean LoadALData(){	ALCdevice* device = alcOpenDevice(null);	ALCcontext* context = alcCreateContext(device,null);	alcMakeContextCurrent(context);	alGenBuffers(1, &Buffer);   	int error = alGetError();   	if(error != AL_NO_ERROR)   	{       		writef("ERROR: ");		writefln(error);       		return AL_FALSE;   	}   	uint size;        ALCvoid *buff;	buff = capture(size);   	alBufferData(Buffer, AL_FORMAT_MONO16, cast(void*)buff, size, frequency);    	error = alGetError();   	if(error != AL_NO_ERROR)   	{		writef("ERROR2: ");                writefln(error);       		return AL_FALSE;   			}   	// Bind the buffer with the source.   	alGenSources(1, &Source);   	error = alGetError();   	if(error != AL_NO_ERROR)   	{		writef("ERROR3: ");                writefln(error);       		return AL_FALSE;   	}   	alSourcef (Source, AL_PITCH,    1.0      );   	alSourcef (Source, AL_GAIN,     2.0      );   	alSourcei (Source, AL_LOOPING,  true     );   	alSourcei (Source, AL_BUFFER,  Buffer     );    	// Do another error check and return.   	error = alGetError();   	if(error == AL_NO_ERROR)       		return AL_TRUE;	writef("ERROR4: ");        writefln(error);   	return AL_FALSE;}void KillALData(){	alDeleteBuffers(1, &Buffer);	alDeleteSources(1, &Source);}int main(char[][] args){	DerelictAL.load();		// Initialize OpenAL and clear the error bit.   	alGetError();	// Load the wav data.   	if(LoadALData() == AL_FALSE)   	{		writefln("Error loading data.");		writefln("");       		return 1;   	}	alSourcePlay(Source);	scope(exit)	{		KillALData();		DerelictAL.unload();	}	return 0;}