Exemple #1
0
static PP_Bool Instance_DidCreate(PP_Instance instance,
                                  uint32_t argc,
                                  const char* argn[],
                                  const char* argv[]) {
  g_MyState.instance = instance;
  g_MyState.ready = 0;
  g_MyStateIsValid = 1;

  /* This sets up OpenAL with PPAPI info. */
  alSetPpapiInfo(instance, g_get_browser_interface);

  const ALCchar* devices = alcGetString(NULL, ALC_DEVICE_SPECIFIER);
  setenv("ALSOFT_LOGLEVEL", "3", 0);
  printf("Audio devices available:\n");
  while (devices[0] != '\0') {
    printf("\t%s\n", devices);
    devices = devices + strlen(devices) + 1;
  }

  InitializeOpenAL();

  ogg_file_contents = (char*)malloc(BUFFER_READ_SIZE);
  ogg_file_alloced = BUFFER_READ_SIZE;

  PP_Resource request = g_MyState.request_interface->Create(instance);
  g_MyState.request_interface->SetProperty(
      request, PP_URLREQUESTPROPERTY_URL,
      g_MyState.var_interface->VarFromUtf8(OGG_FILE, strlen(OGG_FILE)));

  PP_Resource loader = g_MyState.loader_interface->Create(instance);
  struct PP_CompletionCallback cb =
      PP_MakeCompletionCallback(OpenCallback, (void*)loader);
  int32_t open_ret = g_MyState.loader_interface->Open(loader, request, cb);
  assert(open_ret == PP_OK_COMPLETIONPENDING);
  if (open_ret != PP_OK_COMPLETIONPENDING)
    return PP_FALSE;

  return PP_TRUE;
}
Exemple #2
0
NxSoundManager::NxSoundManager( const NxSoundApi NxApiType ) : DefaultOutputDeviceIndex (-1), DefaultInputDeviceIndex(-1), UseOpenAL(false)
{
	new NxSoundLog();
	Log("Started NxSound.");

	m_NxSoundApi = NxApiType;
	stk::Stk::setSampleRate( 44100.0 );	
	//set path for stk instruments.
	stk::Stk::setRawwavePath( "../../NxMedia/Audio/RAW/" );

	Log( "NxSound : Initializing OpenAl..." );


	//initialize openal for 3d spatialization
	InitializeOpenAL() ? Log("NxSound : OpenAL Initialization Enabled.") : Log("NxSound : OpenAL Initialization Failed!");

	Log( "NxSound : Initializing OpenAl : DONE" );


	Log( "NxSound : Initializing VstHost..." );
	//create our main and only VST host
	NxSoundEffectVSTHost * VSTHost = new NxSoundEffectVSTHost();
	Log( "NxSound : Initializing VstHost : DONE" );

	Log( "NxSound : Initializing RtAudio..." );
	dac = NULL ;
	dac = new RtAudio( (RtAudio::Api) m_NxSoundApi ); 
	 
	if( !dac ) {	
		Log( "NxSound : Could not initialize Api Type !" );
		return ;
	}else {
		Log( "NxSound : Initialized" );
	}

 	int devices = dac->getDeviceCount();

	Log( "NxSound : Found num devices : " + NxSoundUtils::ToString( devices ) );

	RtAudio::DeviceInfo info;
	NxDeviceInfo * DeviceInfo;
	bool Output = false ;

	Log( "NxSound : Enumerating devices.. ");

	for (int i=0; i< devices; i++) {
		try {
			info = dac->getDeviceInfo(i);
			DeviceInfo = new NxDeviceInfo();
			DeviceInfo->name = info.name;
			DeviceInfo->isDefaultInput = info.isDefaultInput;
			DeviceInfo->isDefaultOutput = info.isDefaultOutput;
			DeviceInfo->inputChannels = info.inputChannels;
			DeviceInfo->outputChannels = info.outputChannels;	
		} 
		catch (RtError &error) {
			error.printMessage();
			break;
		}

		if( DeviceInfo->isDefaultOutput )// default output
		{
			Output = true ;
			DefaultOutputDeviceIndex = i ;
			Log( "Default Output Audio device : " + DeviceInfo->name );
			SoundCardDeviceList.push_back( *DeviceInfo );
			SoundCardOutputDeviceList.push_back( *DeviceInfo );
		}
		else if( DeviceInfo->isDefaultInput ) { // default input
			Output = false ;
			DefaultInputDeviceIndex = i ;
			Log( "Default Input Audio device : " +  DeviceInfo->name    );
			SoundCardDeviceList.push_back( *DeviceInfo );
			SoundCardInputDeviceList.push_back( *DeviceInfo );
		}
		else {
			if( Output ) { // output
				SoundCardDeviceList.push_back( *DeviceInfo );
				SoundCardOutputDeviceList.push_back( *DeviceInfo );
				Log( "Output Audio device " + DeviceInfo->name );
			}
			else { // input
				SoundCardDeviceList.push_back( *DeviceInfo );
				SoundCardInputDeviceList.push_back( *DeviceInfo );
				Log( "Input Audio device " + DeviceInfo->name );
			}
		}
	}

		Log( "NxSound : Enumerating devices : DONE");

	DefaultInputDeviceIndex = dac->getDefaultInputDevice();

	delete dac ;
	return  ;
}
ALSequencer::ALSequencer()
{
	bInitialised = false;
	bDestroying = false;

	fileCount = 0;
	startPos =
	endPos = 0;
	curPos = MAX_SEQUENCE;
	sfxPos = 0;

	pWaveLoader = NULL;

	bPlay = false;

	flEffectSends[0] = 
	flEffectSends[1] = 
	flEffectSends[2] = 
	flEffectSends[3] = 0.0f;

	ulOutputChannels = 0;
	ulNumEffects = 0;
	ulNumSamples = 0;
	ulBuffersProcessed = 0;

	pOutput = 0;
	pEffectOutput[0] = 
	pEffectOutput[1] = 
	pEffectOutput[2] = 
	pEffectOutput[3] = 0;

	if (InitializeOpenAL(NULL, 2, 4, 10240, 44100)) {
		alutInitWithoutContext(NULL, NULL);

		ulOutputChannels = GetNumOutputChannels();
		ulNumEffects = GetNumEffects();
		ulNumSamples = GetNumSamplesPerBuffer();

		bOutOfMemory = false;
		pOutput = malloc(ulOutputChannels * ulNumSamples * 2);
		for (unsigned long ulLoop = 0; ulLoop < ulNumEffects; ulLoop++)
		{
			pEffectOutput[ulLoop] = malloc(ulNumSamples * 2);
			if (pEffectOutput[ulLoop] == NULL)
				bOutOfMemory = true;
		}

		pWaveLoader = new CWaves();

		bInitialised = true;

		if (pWaveLoader && pOutput && !bOutOfMemory) {
			Start();

			EFXEAXREVERBPROPERTIES EFXEAXReverb[1] = { EFX_EAX_REVERB_HANGAR };

			SetEFXEAXReverbProperties(&EFXEAXReverb[0], 0);

			hThread = CreateThread(NULL, 0, ALSequencer::ThreadFuncWrapper, this, 0, &dwThreadId);
		}
	}
}