Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Los mejores trucos

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 21-05-2025
navbuoy navbuoy is offline
Miembro
 
Registrado: mar 2024
Posts: 360
Poder: 3
navbuoy Va por buen camino
Si lo que queremos es alternar entre stream1 y stream2 constantemente con crossfades de 8 segundos, lo que necesitás es algo como un sistema de doble canal con fading automático, donde uno sube mientras el otro baja, y viceversa.

Mantenemos ambos streams en loop o reproducibles.

Creamos un estado booleano currentIsStream1 para saber cuál está "activo".

Cada vez que quieras hacer crossfade, inviertes el estado y disparas el timer.

🔸 Variables globales:

Código:
HSTREAM stream1, stream2;
float volume1, volume2;
int fadeStepCount = 0;
const int fadeTotalSteps = 160;
bool currentIsStream1 = true;  // true = stream1 activo, false = stream2

🔸 Al iniciar la app:

Código:
void __fastcall TForm1::StartStreams()
{
    BASS_Init(-1, 44100, 0, Handle, NULL);

    stream1 = BASS_StreamCreateFile(FALSE, "C:\\audio\\tema1.mp3", 0, 0, BASS_SAMPLE_LOOP);
    stream2 = BASS_StreamCreateFile(FALSE, "C:\\audio\\tema2.mp3", 0, 0, BASS_SAMPLE_LOOP);

    BASS_ChannelSetAttribute(stream1, BASS_ATTRIB_VOL, 1.0f);
    BASS_ChannelSetAttribute(stream2, BASS_ATTRIB_VOL, 0.0f);

    BASS_ChannelPlay(stream1, FALSE);
    BASS_ChannelPlay(stream2, FALSE);

    volume1 = 1.0f;
    volume2 = 0.0f;
    currentIsStream1 = true;
}
🔸 Función para iniciar el crossfade:

Código:
void __fastcall TForm1::StartCrossfade()
{
    fadeStepCount = 0;
    FadeTimer->Enabled = true;
}

🔸 Timer de crossfade:

Código:
void __fastcall TForm1::FadeTimerTimer(TObject *Sender)
{
    fadeStepCount++;
    float stepSize = 1.0f / fadeTotalSteps;

    if (currentIsStream1)
    {
        volume1 -= stepSize;
        volume2 += stepSize;
    }
    else
    {
        volume1 += stepSize;
        volume2 -= stepSize;
    }

    // Clamp
    if (volume1 < 0.0f) volume1 = 0.0f;
    if (volume1 > 1.0f) volume1 = 1.0f;
    if (volume2 < 0.0f) volume2 = 0.0f;
    if (volume2 > 1.0f) volume2 = 1.0f;

    BASS_ChannelSetAttribute(stream1, BASS_ATTRIB_VOL, volume1);
    BASS_ChannelSetAttribute(stream2, BASS_ATTRIB_VOL, volume2);

    if (fadeStepCount >= fadeTotalSteps)
    {
        FadeTimer->Enabled = false;
        currentIsStream1 = !currentIsStream1;
    }
}

🔸 Para automatizar el cambio cada X segundos:
Agrega un segundo TTimer (llamalo AutoSwitchTimer) con Interval = 30000 (por ejemplo, 30 segundos), y su código sería:

Código:
void __fastcall TForm1::AutoSwitchTimerTimer(TObject *Sender)
{
    StartCrossfade();
}
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Cómo ver los canales de televisión con Kodi? navbuoy La Taberna 1 17-03-2025 15:13:32
Problema con BASS Library en Android navbuoy Desarrollo en Delphi para Android 6 05-10-2024 15:29:58
BASS Library 2.4 en App C++ Builder Windows navbuoy C++ Builder 1 27-09-2024 21:30:37
Los canales RSS soler PHP 3 21-02-2008 16:21:16
grabar los dos canales mono por separado Apetelinau API de Windows 2 10-02-2007 11:20:08


La franja horaria es GMT +2. Ahora son las 10:50:20.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi