Exemplo n.º 1
0
	SoundStream* InitSoundStream()
	{
		std::string backend = SConfig::GetInstance().sBackend;
		if (backend == BACKEND_OPENAL && OpenALStream::isValid())
			g_sound_stream = new OpenALStream();
		else if (backend == BACKEND_NULLSOUND && NullSound::isValid())
			g_sound_stream = new NullSound();
		else if (backend == BACKEND_XAUDIO2)
		{
			if (XAudio2::isValid())
				g_sound_stream = new XAudio2();
			else if (XAudio2_7::isValid())
				g_sound_stream = new XAudio2_7();
		}
		else if (backend == BACKEND_AOSOUND && AOSound::isValid())
			g_sound_stream = new AOSound();
		else if (backend == BACKEND_ALSA && AlsaSound::isValid())
			g_sound_stream = new AlsaSound();
		else if (backend == BACKEND_COREAUDIO && CoreAudioSound::isValid())
			g_sound_stream = new CoreAudioSound();
		else if (backend == BACKEND_PULSEAUDIO && PulseAudio::isValid())
			g_sound_stream = new PulseAudio();
		else if (backend == BACKEND_OPENSLES && OpenSLESStream::isValid())
			g_sound_stream = new OpenSLESStream();

		if (!g_sound_stream && NullSound::isValid())
		{
			WARN_LOG(AUDIO, "Could not initialize backend %s, using %s instead.",
				backend.c_str(), BACKEND_NULLSOUND);
			g_sound_stream = new NullSound();
		}

		if (g_sound_stream)
		{
			UpdateSoundStream();
			if (!g_sound_stream->Start())
			{
				ERROR_LOG(AUDIO, "Could not start backend %s, using %s instead",
					  backend.c_str(), BACKEND_NULLSOUND);
				delete g_sound_stream;
				g_sound_stream = new NullSound();
				g_sound_stream->Start();
			}

			if (SConfig::GetInstance().m_DumpAudio && !s_audio_dump_start)
				StartAudioDump();

			return g_sound_stream;
		}

		PanicAlertT("Sound backend %s is not valid.", backend.c_str());

		delete g_sound_stream;
		g_sound_stream = nullptr;
		return nullptr;
	}
Exemplo n.º 2
0
void InitSoundStream()
{
  std::string backend = SConfig::GetInstance().sBackend;
  if (backend == BACKEND_CUBEB)
    g_sound_stream = std::make_unique<CubebStream>();
  else if (backend == BACKEND_OPENAL && OpenALStream::isValid())
    g_sound_stream = std::make_unique<OpenALStream>();
  else if (backend == BACKEND_NULLSOUND)
    g_sound_stream = std::make_unique<NullSound>();
  else if (backend == BACKEND_XAUDIO2)
  {
    if (XAudio2::isValid())
      g_sound_stream = std::make_unique<XAudio2>();
    else if (XAudio2_7::isValid())
      g_sound_stream = std::make_unique<XAudio2_7>();
  }
  else if (backend == BACKEND_ALSA && AlsaSound::isValid())
    g_sound_stream = std::make_unique<AlsaSound>();
  else if (backend == BACKEND_COREAUDIO && CoreAudioSound::isValid())
    g_sound_stream = std::make_unique<CoreAudioSound>();
  else if (backend == BACKEND_PULSEAUDIO && PulseAudio::isValid())
    g_sound_stream = std::make_unique<PulseAudio>();
  else if (backend == BACKEND_OPENSLES && OpenSLESStream::isValid())
    g_sound_stream = std::make_unique<OpenSLESStream>();

  if (!g_sound_stream)
  {
    WARN_LOG(AUDIO, "Could not initialize backend %s, using %s instead.", backend.c_str(),
             BACKEND_NULLSOUND);
    g_sound_stream = std::make_unique<NullSound>();
  }

  if (!g_sound_stream->Start())
  {
    ERROR_LOG(AUDIO, "Could not start backend %s, using %s instead", backend.c_str(),
              BACKEND_NULLSOUND);

    g_sound_stream = std::make_unique<NullSound>();
    g_sound_stream->Start();
  }

  UpdateSoundStream();

  if (SConfig::GetInstance().m_DumpAudio && !s_audio_dump_start)
    StartAudioDump();
}
Exemplo n.º 3
0
	void SendAIBuffer(short *samples, unsigned int num_samples)
	{
		if (!g_sound_stream)
			return;

		if (SConfig::GetInstance().m_DumpAudio && !s_audio_dump_start)
			StartAudioDump();
		else if (!SConfig::GetInstance().m_DumpAudio && s_audio_dump_start)
			StopAudioDump();

		CMixer* pMixer = g_sound_stream->GetMixer();

		if (pMixer && samples)
		{
			pMixer->PushSamples(samples, num_samples);
		}

		g_sound_stream->Update();
	}