Looper un GunShot ( son )

Un forum pour parler de la programmation en général, des langages, des algorithmes, ...

Modérateur: Game-Lab Team

Looper un GunShot ( son )

Messagepar Vosvoy » Dimanche 15 Mai 2011 @ 20:42

Bien le bonjour à toutes et à tous .

Voilà ma question :

Je cherche tout simplement à trouver un moyen de faire looper les sons des armes sous HL2 lorsque le joueur exécute un tir automatique , avec un son spécialement préparé pour ( 2 marqueurs : le premier après la première détonation et le deuxième juste après la dernière détonation ) .

Image

J'ai pu remarquer que sur HL2 , UNE SEULE arme utilisait ce système de loop fire , et c'est l'arme se trouvant sur l'airboat .

J'aimerais donc incorporer cette propriété sur toutes les armes automatiques ( pistolets excluent bien entendu ) et je pense fortement que cela se passe côté programmation , mais j'ai besoin de votre aide , si vous le voulez bien .

J'ai trouvé plusieurs lignes faisant référence à des fonctions telles que " PrecacheScriptSound( "Airboat.FireGunLoop" ); " et " EmitSound( "Airboat.FireGunRevDown" ); " dans les cpp vehicle_airboat et func_tank , et notamment une ligne intéressante dans func_tank ( ligne 2834 ):

Code: Tout sélectionner
//-----------------------------------------------------------------------------
// Create/destroy looping sounds
//-----------------------------------------------------------------------------
void CFuncTankAirboatGun::CreateSounds()
{
   CSoundEnvelopeController &controller = CSoundEnvelopeController::GetController();

   CPASAttenuationFilter filter( this );
   if (!m_pGunFiringSound)
   {
      m_pGunFiringSound = controller.SoundCreate( filter, entindex(), "Airboat.FireGunLoop" );
      controller.Play( m_pGunFiringSound, 0, 100 );
   }
}

void CFuncTankAirboatGun::DestroySounds()
{
   CSoundEnvelopeController &controller = CSoundEnvelopeController::GetController();

   controller.SoundDestroy( m_pGunFiringSound );
   m_pGunFiringSound = NULL;
}


//-----------------------------------------------------------------------------
// Stop Firing
//-----------------------------------------------------------------------------
void CFuncTankAirboatGun::StartFiring()
{
   if ( !m_bIsFiring )
   {
      CSoundEnvelopeController *pController = &CSoundEnvelopeController::GetController();
      float flVolume = pController->SoundGetVolume( m_pGunFiringSound );
      pController->SoundChangeVolume( m_pGunFiringSound, 1.0f, 0.1f * (1.0f - flVolume) );
      m_bIsFiring = true;
   }
}

void CFuncTankAirboatGun::StopFiring()
{
   if ( m_bIsFiring )
   {
      CSoundEnvelopeController *pController = &CSoundEnvelopeController::GetController();
      float flVolume = pController->SoundGetVolume( m_pGunFiringSound );
      pController->SoundChangeVolume( m_pGunFiringSound, 0.0f, 0.1f * flVolume );
      EmitSound( "Airboat.FireGunRevDown" );
      m_bIsFiring = false;
   }
}

//-----------------------------------------------------------------------------
// Maintains airboat gun sounds
//-----------------------------------------------------------------------------
void CFuncTankAirboatGun::ControllerPostFrame( void )
{
   if ( IsPlayerManned() )
   {
      CBasePlayer *pPlayer = static_cast<CBasePlayer*>( GetController() );
      if ( pPlayer->m_nButtons & IN_ATTACK )
      {
         StartFiring();
      }
      else
      {
         StopFiring();
      }
   }

   BaseClass::ControllerPostFrame();
}


mais je ne sais pas comment les réutiliser pour le SMG1 par exemple . Un peu d'aide ...?

D'avance , merci beaucoup !

Vosvoy
Avatar de l’utilisateur
Vosvoy
Nouveau Membre
 
Messages: 12
Inscription: Mardi 22 Mars 2011 @ 9:27

Messagepar RedEyes » Lundi 16 Mai 2011 @ 14:07

c'est pas de la programmation pour faire looper les sons
ah moins que tu sois obliger de modifier le son precache dans le code source.
mais va voir dans le Shader Son, dans le répertoire /mod/Script/weapon_smg1.txt
soit tu changes le le type de shader, et tu ajoutes l'argument "loop"
si tu dois changer le son depuis le code source, il faudrai d'abord le mettre en Precache, puis ensuite l'ajouter ton EMitsound perso dans le code de la classe qui exécute le tire.

http://developer.valvesoftware.com/wiki/Soundscripts
Avatar de l’utilisateur
RedEyes
Owner
 
Messages: 2416
Inscription: Jeudi 25 Juillet 2002 @ 5:26
Localisation: Paris

Messagepar Vosvoy » Lundi 16 Mai 2011 @ 17:47

Merci de votre réponse plutôt rapide .

Ne vous inquietez pas , je le sais très bien qu'il n'y a pas besoin de toucher à la programmation pour faire looper un son en général ( il faut placer des marqueurs , ce que j'ai fait à l'avance comme dit plus haut ) .
Seulement ici , il est question de trouver comment faire pour faire looper le son du tir du SMG1 et de l'arrêter lorsque le joueur cesse de cliquer sur la touche de tir ( exactement comme l'airboat dans HL2 ) . J'ai déjà essayé de mettre mon son directement sans toucher aux scripts et au code , mais cela ne marche pas ( il entre dans une boucle sans fin et ne s'arrête jamais ) .

J'ai été voir comme vous me l'aviez dit dans le script du SMG1 , mais il n'y a vraiment rien d'interessant :

Code: Tout sélectionner
"Weapon_SMG1.Single"
{
   "channel"      "CHAN_WEAPON"
   "volume"      "0.55"
   "soundlevel"   "SNDLVL_GUNFIRE"
   "pitch"         "95,105"

   "wave"      "weapons/smg1/smg1_fire1.wav"
}

Au niveau de la modification du code , je ne m'y connais que très peu . Si vous pouviez ne serait-ce que me guider ( ne pas tout faire a ma place non plus , bien entendu ) dans la modification , ce serait fort sympatique de votre part .

D'avance , merci .

Vosvoy
Avatar de l’utilisateur
Vosvoy
Nouveau Membre
 
Messages: 12
Inscription: Mardi 22 Mars 2011 @ 9:27

Messagepar RedEyes » Dimanche 22 Mai 2011 @ 18:38

désolé j'ai pas trop le temps, mais comme tu l'as dit çà doit resider dans le marqueur poser sur le fichier wav , parceque j'ai rien vu dans le code qui boucle le son, tout ce passe dans le fichier script, plus que dans le code de l'arme, je viens actuellement de coder une arme baser sur le shotgun, et peu de choses sont a faire dans le code source de l'arme, la plupart des chose est a définir dans les fichier scripts, donc tente ta chance par là. :)

Bye

edit ptet que ceci peut t'aider
http://developer.valvesoftware.com/wiki/Looping_a_Sound
Avatar de l’utilisateur
RedEyes
Owner
 
Messages: 2416
Inscription: Jeudi 25 Juillet 2002 @ 5:26
Localisation: Paris

Messagepar Vosvoy » Mardi 24 Mai 2011 @ 17:40

Et bien merci quand même .

Je vais donc retenter ma chance au niveau du script ainsi que de mon fichier son .

Merci encore pour votre patience et votre interet .

Vosvoy
Avatar de l’utilisateur
Vosvoy
Nouveau Membre
 
Messages: 12
Inscription: Mardi 22 Mars 2011 @ 9:27

Messagepar RedEyes » Mercredi 01 Juin 2011 @ 21:51

du coup tu as pu faire ce dont tu souhaitais ?
Avatar de l’utilisateur
RedEyes
Owner
 
Messages: 2416
Inscription: Jeudi 25 Juillet 2002 @ 5:26
Localisation: Paris

Messagepar Vosvoy » Mercredi 01 Juin 2011 @ 23:45

Malheureusement non.

J'ai trifouillé les scripts , changer de place le marqueur , etc ...

Rien a faire , le son entre dans une boucle infinie ou ne marche pas du tout .

A vrai dire , je ne sais plus trop quoi faire ou bidouiller maintenant . Je suis dans une impasse . Je vais quand même réessayer mes manipulations depuis le début pour voir si je ne me suis pas trompé quelque part .

Merci de la prise de nouvelles .

Vosvoy
Avatar de l’utilisateur
Vosvoy
Nouveau Membre
 
Messages: 12
Inscription: Mardi 22 Mars 2011 @ 9:27


Retourner vers Programmation générale

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

cron