CSC8503_Advanced_Game_Technologies / Plugins / PlayStation4 / Ps4AudioSystem.cpp
Ps4AudioSystem.cpp
Raw
#ifdef _ORBIS
#include "Ps4AudioSystem.h"
#include <libsysmodule.h>

using namespace NCL::PS4;
Ps4AudioSystem::Ps4AudioSystem(int numSources)	{
	sceSysmoduleLoadModule(SCE_SYSMODULE_AUDIO_3D);

	threadFinished = false;

	sceAudio3dInitialize(0);

	SceAudio3dOpenParameters sParameters;
	sceAudio3dGetDefaultOpenParameters(&sParameters);
	sParameters.uiGranularity = 1024;
	sParameters.uiMaxObjects  = numSources;
	sParameters.uiQueueDepth  = 1;

	SceUserServiceUserId userId;
	int ret = sceUserServiceGetInitialUser(&userId);

	ret = sceAudio3dPortOpen(SCE_USER_SERVICE_USER_ID_SYSTEM, &sParameters, &audioPort);

	for (int i = 0; i < numSources; ++i) {
		SceAudio3dPortId id;
		ret = sceAudio3dObjectReserve(audioPort, &id);

		PS4AudioSource* source = new PS4AudioSource(id);

		audioSources.push_back(source);
	}

	testSound = new Sound();
	testSound->LoadFromWAV("/app0/Assets/Audio/lol.wav");

	testEmitter = new Ps4AudioEmitter(testSound, 1.0f);

	testEmitter->SetSound(testSound);

	//audioThread = std::thread(lolfunction);

	threadFinished  = false;
	audioThread = std::thread(&Ps4AudioSystem::AudioThread, this);
}

Ps4AudioSystem::~Ps4AudioSystem()
{
	threadFinished = true;
	audioThread.join();

	for (int i = 0; i < audioSources.size(); ++i) {
		delete audioSources[i];
	}
}

void Ps4AudioSystem::AudioThread()	{
	while (!threadFinished) {
		UpdateSound();
	}
}

void Ps4AudioSystem::UpdateSound() {
	for (PS4AudioSource* s : audioSources) {
		s->Update();
	}

	//debug testing 
	testEmitter->Update(audioSources[0], audioPort);

	sceAudio3dPortAdvance(audioPort);

	sceAudio3dPortPush(audioPort, SCE_AUDIO3D_BLOCKING_SYNC);
}
#endif