Fading zwischen Audiochannels



  • Hallo!

    Irgendwie steht ich im moment "auf der Leitung": ich möchte zwischen zwei Audiokanälen faden.
    Am Anfang bekommt der 1. channel einen sound zugewiesen. wird ein 2. sound hinzugefügt, so soll channel 1 ausfaden, und channel 2 einfaden. Kommt noch ein weiterer sound hinzu, so soll channel 2 ausfaden und channel 1 einfaden (usw.).
    Ich habe dafür schon einen Code produziert, aber irgendwas passt da nicht. Hier mal der Ablauf (der Code ist nicht schön, aber mir geht es vorübergehend nur mal um die funktionalität):

    // Membervariablen
    FMOD::Channel * m_pSoundChannel, *m_pSoundChannel2;
    FMOD::Sound* m_CurSound;
    float m_SoundOrgFrequ;
    float m_SoundCurSampleSpeed;
    int m_fadeInOut[2];
    bool m_fadeInFirstChannel;
    std::vector<FMOD::Sound*> m_sounds;
    
    	while (...)
    	{
    		//...
    
    		// fade
    		if (m_fadeInFirstChannel && m_fadeInOut[0] < 256)
    		{
    			// fade in channel 1
    			m_fadeInOut[0]++;
    
    			if (m_fadeInOut[1] > 0) m_fadeInOut[1]--;
    			else if (m_pSoundChannel2)
    			{
    				CSoundManager::ERRCHECK(m_pSoundChannel2->stop());
    				m_pSoundChannel2 = 0;
    			}
    		}
    		else if (m_fadeInOut[1] < 256 && !m_fadeInFirstChannel)
    		{
    			m_fadeInOut[1]++;
    			if (m_fadeInOut[0] > 0) m_fadeInOut[0]--;
    			else if (m_pSoundChannel) 
    			{
    				CSoundManager::ERRCHECK(m_pSoundChannel->stop());
    				m_pSoundChannel = 0;
    			}
    		}
    
    		// Laden der entsprechenden soundfiles
    		if (m_the_car.rpm < 2000 && m_CurSound != m_sounds[0])
    		{
    
    			CSoundManager::PlaySound(m_sounds[0],false,m_fadeInFirstChannel ? &m_pSoundChannel : &m_pSoundChannel2);
    			CSoundManager::ERRCHECK((m_fadeInFirstChannel ? m_pSoundChannel : m_pSoundChannel2)->getFrequency(&m_SoundOrgFrequ));
    
    			m_fadeInFirstChannel = !m_fadeInFirstChannel;
    
    			m_CurSound = m_sounds[0];
    		}
    		else if (m_the_car.rpm >= 2000 && m_the_car.rpm < 3000 && m_CurSound != m_sounds[1])
    		{
    			CSoundManager::PlaySound(m_sounds[1],false,m_fadeInFirstChannel ? &m_pSoundChannel : &m_pSoundChannel2);
    			CSoundManager::ERRCHECK((m_fadeInFirstChannel ? m_pSoundChannel : m_pSoundChannel2)->getFrequency(&m_SoundOrgFrequ));
    
    			m_fadeInFirstChannel = !m_fadeInFirstChannel;
    			m_CurSound = m_sounds[1];
    		}
    
    		if (m_pSoundChannel) 
    		{
    			m_pSoundChannel->setVolume(m_fadeInOut[0]);
    		}
    		if (m_pSoundChannel2) 
    		{
    			m_pSoundChannel2->setVolume(m_fadeInOut[1]);
    		}
    
    	} // while
    

    Es wäre super, wenn mir jemand ein paar tipps geben könnte ;).

    danke,


Anmelden zum Antworten