コード例 #1
0
ファイル: OpenSLES.cpp プロジェクト: bjth/xenko
		SLmillibel CalculateVolumeLevel(float sourceGain, float localizationGain, float masterVolumeGain)
		{
			auto gain = sourceGain * localizationGain * masterVolumeGain;
			float dbVolume = 20 * log10(gain) * 100;

			return dbVolume > SL_MILLIBEL_MIN ? SLmillibel(dbVolume) : SL_MILLIBEL_MIN;
		}
コード例 #2
0
		void xnAudioSourceSetGain(xnAudioSource* source, float gain)
		{
			source->gain = gain;
			gain *= source->localizationGain * source->listener->audioDevice->masterVolume;
			auto dbVolume = SLmillibel(20 * log10(gain) * 100);
			if (dbVolume < SL_MILLIBEL_MIN) dbVolume = SL_MILLIBEL_MIN;
			(*source->volume)->SetVolumeLevel(source->volume, dbVolume);
		}
コード例 #3
0
		void xnAudioSetMasterVolume(xnAudioDevice* device, float volume)
		{
			device->masterVolume = volume;

			device->deviceLock.Lock();
			
			for (xnAudioSource* source : device->sources)
			{
				auto dbVolume = SLmillibel(20 * log10(volume * source->gain * source->localizationGain) * 100);
				if (dbVolume < SL_MILLIBEL_MIN) dbVolume = SL_MILLIBEL_MIN;
				(*source->volume)->SetVolumeLevel(source->volume, dbVolume);
			}
			
			device->deviceLock.Unlock();
		}