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; }
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); } } }