Permalänk

[C#, XNA] Minigun ljudeffekter.

Hej!

Har en minigun i mitt spel, och när vapnet varvar upp, (en minigun snurrar och skjuter sedan när den börjat snurra snabbt) så ska det låta ett ljud, som jag redan skaffat, och sedan om man släpper så ska den varva ner och ljudet för det ska spelas. Ifall man fortsätter tills den varvat klart så ska den skjuta, och då ska ljudeffekten för det spelas upp.

Pseudokod:

if (spelaren har ammunition, och trycker ner left mouse button) { säg till vapnet att varva upp. if (vapnet har varvat upp och är redo) { spela ljudet för skjutning av skott öka timer if (timer > 1500) { if (vapnet inte laddas om) { skjut ett skott. timer = 0. spela upp skjut ljudet. } } } if (vapnet ska varva upp, men vapnet inte har det) { varva upp. spela ljudet för varva upp. } } if (leftmouse button är släppt) { if (vapnet fortfarande rör sig) { varva ner vapnet. Spela upp ljudeffekten för nervarvning. avbryt skjutarljudet ifall det spelas upp. } }

Allting fungerar prima förutom ljudet, för jag är inte så instatt i hur det fungerar.

Alltså:
När man ska skjuta så ska vapnet varva upp.
När vapnet varvar upp så kommer vapnet börja snurra sakta, men sanbbare och snabbare.
Under tiden det händer så ska ett ljud spelas upp.
När vapnet varvats upp så ska skott skjutas och ljudet för det ska spelas upp (vi snackar alltså om långa ljudeffekter).
När spelaren har slutat skjuta så ska alla ljud avbrytas och ett nervarvnings ljud ska spelas upp, samt vapnet ska varva ner.

Ifall spelaren under någon gång slutar hålla in left mouse button så ska allting avbrytas och vapnet varvar ner och det ljduet ska spelas upp.

Hur gör jag detta? Soundeffects spelas väl från början till slut? Och de är .wav och ska inte användas som Songs?

Permalänk
Medlem

Kan du inte ha ett och samma loopande ljud för när den varvar, som du ändrar volymen på procentuellt av för hur snabbt av max hastighet den snurrar? 100% i hastighet ger 100% volym, 50% hastighet ger 50% volym osv.

Sen kan du spela ett ljud (eller variera mellan flera om du har) för varje skott som skjuts.

Visa signatur

Citera för svar

MSI Z490 MAG TOMAHAWK | Intel Core i7 10700K | Corsair 64GB DDR4 3200MHz | Asus GeForce RTX 3060 Ti TUF Gaming OC | Samsung 970 EVO Plus 1TB | WD Black 6TB Desktop Drive | Corsair RM750X 750W | Fractal Design Define R6

Permalänk
Skrivet av Dew87:

Kan du inte ha ett och samma loopande ljud för när den varvar, som du ändrar volymen på procentuellt av för hur snabbt av max hastighet den snurrar? 100% i hastighet ger 100% volym, 50% hastighet ger 50% volym osv.

Sen kan du spela ett ljud (eller variera mellan flera om du har) för varje skott som skjuts.

Jo, men det blir lite jobbigt:
http://soundbible.com/1920-Minigun.html
Den ska jag försöka använda, har delat upp den i tre olika filer.

Permalänk
Medlem
Skrivet av LinusNeuman:

Jo, men det blir lite jobbigt:
http://soundbible.com/1920-Minigun.html
Den ska jag försöka använda, har delat upp den i tre olika filer.

Ok. Hade nog varit lättare att svara om du hade haft med denna info i första inlägget. Du verkar inte kunna göra så mycket med XNA SoundEffect enligt detta http://msdn.microsoft.com/en-us/library/microsoft.xna.framewo.... Du kanske kan försöka dig på fmod eller något annat ljudbibliotek?

Edit: fmod verkar bara finnas till c++ men det bör finnas andra ljudbibliotek till c#.

Visa signatur

Citera för svar

MSI Z490 MAG TOMAHAWK | Intel Core i7 10700K | Corsair 64GB DDR4 3200MHz | Asus GeForce RTX 3060 Ti TUF Gaming OC | Samsung 970 EVO Plus 1TB | WD Black 6TB Desktop Drive | Corsair RM750X 750W | Fractal Design Define R6

Permalänk
Skrivet av Dew87:

Ok. Hade nog varit lättare att svara om du hade haft med denna info i första inlägget. Du verkar inte kunna göra så mycket med XNA SoundEffect enligt detta http://msdn.microsoft.com/en-us/library/microsoft.xna.framewo.... Du kanske kan försöka dig på fmod eller något annat ljudbibliotek?

Edit: fmod verkar bara finnas till c++ men det bör finnas andra ljudbibliotek till c#.

Spelet jag programmerar på är till ett skolprojekt, där vi inte får använda några andra bibliotek än XNA.

Permalänk
Medlem

För att få ljudet bra måste du trycka ihop ljudet så det blir snabbare och sedan helst ändra tonläget m.m. väldigt jobbigt att göra "on the fly" bättre att du kollar upp alternativ för att göra det innan sedan byter ljud vid vissa lägen.

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk
Skrivet av Ferrat:

För att få ljudet bra måste du trycka ihop ljudet så det blir snabbare och sedan helst ändra tonläget m.m. väldigt jobbigt att göra "on the fly" bättre att du kollar upp alternativ för att göra det innan sedan byter ljud vid vissa lägen.

Aha? Men jag fattar inte, måste gå att lösa på något vis? Jag menar, att få en ljudeffekt att slutas spelas upp är ju inget man får ett nobelpris för direkt, varför är det så krångligt? :S

Permalänk
Medlem
Skrivet av LinusNeuman:

Aha? Men jag fattar inte, måste gå att lösa på något vis? Jag menar, att få en ljudeffekt att slutas spelas upp är ju inget man får ett nobelpris för direkt, varför är det så krångligt? :S

avnänd xact för detta. där kan du "designa" lhjudet så du skickar in en variabel mellan 0 och 1, som är hur långt på "uppvarningen" du är. Denna variabel ändarr du i xact så den styr pitchen och volymen på ljudet. På så sätt kommer du få en uppvarvning som kommer avta om du släpper knappen innan uppvarningen är klar med. du kan ju självklart styra filter och sånt där med.

XACT är ett såkallat "middleware" för XNA som du designar ljud i.

Source: Gjorde exact samma sak som detta för 4 år sen när jag pluggade högskola.

EDIT: https://www.youtube.com/watch?feature=player_detailpage&v=7EN... sådär blir det då ungefär. det är 1 ljud som är kanske 0.5 sekunder långt med flera "klick" i som loopas undertiden den varvar upp. Samma "ton" på alla ljuden. Sen är det ett skottljud som är bara 1 ljud, som loopas med samma intervall som vapnet skjuter. använde loop markers i SoundForge för att lägga till detta i ljudfilen.

Visa signatur

Laptop - MacBook 2.0GHz, 4GB ram, Intel GMA 950
Stationär - i5 3570k @ 4ghz, 8gb ram, 120gb ssd + 2tb hdd, Windows 8 64bit, fractal design arc
Citera så jag hittar tillbaka :)

Permalänk
Skrivet av E_maN:

avnänd xact för detta. där kan du "designa" lhjudet så du skickar in en variabel mellan 0 och 1, som är hur långt på "uppvarningen" du är. Denna variabel ändarr du i xact så den styr pitchen och volymen på ljudet. På så sätt kommer du få en uppvarvning som kommer avta om du släpper knappen innan uppvarningen är klar med. du kan ju självklart styra filter och sånt där med.

XACT är ett såkallat "middleware" för XNA som du designar ljud i.

Source: Gjorde exact samma sak som detta för 4 år sen när jag pluggade högskola.

EDIT: https://www.youtube.com/watch?feature=player_detailpage&v=7EN... sådär blir det då ungefär. det är 1 ljud som är kanske 0.5 sekunder långt med flera "klick" i som loopas undertiden den varvar upp. Samma "ton" på alla ljuden. Sen är det ett skottljud som är bara 1 ljud, som loopas med samma intervall som vapnet skjuter. använde loop markers i SoundForge för att lägga till detta i ljudfilen.

Smart! Dock så har jag redan en ljudeffekt som redan har skjutande och så vidare, men det går inte enkelt med det.
Vet inte om jag kan hitta en sådan ljudeffekt, har du en?
Den jag har nu: http://soundbible.com/1920-Minigun.html

Permalänk
Medlem
Skrivet av LinusNeuman:

Smart! Dock så har jag redan en ljudeffekt som redan har skjutande och så vidare, men det går inte enkelt med det.
Vet inte om jag kan hitta en sådan ljudeffekt, har du en?
Den jag har nu: http://soundbible.com/1920-Minigun.html

Du kan ju alltid klippa i de så det blir annorlunda. Det du kan göra är ju att sätta en loopmarkör i SoundForge om du har det, mellan där den skjuter, sen säga i XACT att loopa mellan de tills den är klar, släpper du sen så kommer den spela slutet av ljudet. Då kommer du automatiskt få uppvarvningljudet och avsluts ljud. Du får sne kolla i ljudfilen hur lång uppvarvet är och sen definera det i kod att börja skjuta när den har hållt på såhär länge typ. Så hade jag nog försökt göra

Visa signatur

Laptop - MacBook 2.0GHz, 4GB ram, Intel GMA 950
Stationär - i5 3570k @ 4ghz, 8gb ram, 120gb ssd + 2tb hdd, Windows 8 64bit, fractal design arc
Citera så jag hittar tillbaka :)

Permalänk
Skrivet av E_maN:

Du kan ju alltid klippa i de så det blir annorlunda. Det du kan göra är ju att sätta en loopmarkör i SoundForge om du har det, mellan där den skjuter, sen säga i XACT att loopa mellan de tills den är klar, släpper du sen så kommer den spela slutet av ljudet. Då kommer du automatiskt få uppvarvningljudet och avsluts ljud. Du får sne kolla i ljudfilen hur lång uppvarvet är och sen definera det i kod att börja skjuta när den har hållt på såhär länge typ. Så hade jag nog försökt göra

Ok, men problemet blir att när jag endast skjuter ett skott till exempel, och sen släpper så låter fortfarande det ljudet, eftersom det alltid spelas upp tills det är slut. Och XACT, är det något sorts bibliotek? Vi får bara använda vår egna kod och XNA. Men jag har klippt lite i ljuden med Vegas för att få ett uppstarts ljud, ett skjut ljud, och ett nervarv ljud.

Permalänk
Medlem
Skrivet av LinusNeuman:

Ok, men problemet blir att när jag endast skjuter ett skott till exempel, och sen släpper så låter fortfarande det ljudet, eftersom det alltid spelas upp tills det är slut. Och XACT, är det något sorts bibliotek? Vi får bara använda vår egna kod och XNA. Men jag har klippt lite i ljuden med Vegas för att få ett uppstarts ljud, ett skjut ljud, och ett nervarv ljud.

Nej XACT är ett verktyg för att designa ljud. http://msdn.microsoft.com/en-us/library/bb203895(v=xnagamestu...
Du använder det för att kunna skicka parametrar till ljudmotorn och enkelt styra vad de parametrarna gör i XACT. Den komprimerar dina wavar till mycket mindre format också. Samt att du kan ställa volym, pitch, filter, göra så en ljudeffekt randomizar fram flera ljud osv. Smått o gott dvs. Sånt man vill använda när man gör ljud till spel.

Stoppa ljudet om du släpper knappen då?

Visa signatur

Laptop - MacBook 2.0GHz, 4GB ram, Intel GMA 950
Stationär - i5 3570k @ 4ghz, 8gb ram, 120gb ssd + 2tb hdd, Windows 8 64bit, fractal design arc
Citera så jag hittar tillbaka :)

Permalänk
Skrivet av E_maN:

Nej XACT är ett verktyg för att designa ljud. http://msdn.microsoft.com/en-us/library/bb203895(v=xnagamestu...
Du använder det för att kunna skicka parametrar till ljudmotorn och enkelt styra vad de parametrarna gör i XACT. Den komprimerar dina wavar till mycket mindre format också. Samt att du kan ställa volym, pitch, filter, göra så en ljudeffekt randomizar fram flera ljud osv. Smått o gott dvs. Sånt man vill använda när man gör ljud till spel.

Stoppa ljudet om du släpper knappen då?

Men det är ju precis det jag undrar hur jag gör!

Permalänk
Medlem
Skrivet av LinusNeuman:

Men det är ju precis det jag undrar hur jag gör!

din psuedo kod funkar ju, mer specifikt vad är det du vill ha hjälp med? utföra kollarna? hur du stoppar själva ljudet?

Visa signatur

Laptop - MacBook 2.0GHz, 4GB ram, Intel GMA 950
Stationär - i5 3570k @ 4ghz, 8gb ram, 120gb ssd + 2tb hdd, Windows 8 64bit, fractal design arc
Citera så jag hittar tillbaka :)

Permalänk
Medlem

Om problemet är att stoppa ljudet, så är det klassen SoundEffectInstance du letar efter. Denna klass har metoder för att starta, pausa och stoppa ljudet.
Du skapar en instans genom att anropa CreateInstance på ett SoundEffect-objekt.

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Skrivet av E_maN:

din psuedo kod funkar ju, mer specifikt vad är det du vill ha hjälp med? utföra kollarna? hur du stoppar själva ljudet?

Det finns inget .Stop() eller liknande för ljudeffekterna jag vill spela upp som med Songs, jag vill kunna stanna dem när jag vill.

Permalänk
Skrivet av LinusNeuman:

Det finns inget .Stop() eller liknande för ljudeffekterna jag vill spela upp som med Songs, jag vill kunna stanna dem när jag vill.

Skrivet av jovnas:

Om problemet är att stoppa ljudet, så är det klassen SoundEffectInstance du letar efter. Denna klass har metoder för att starta, pausa och stoppa ljudet.
Du skapar en instans genom att anropa CreateInstance på ett SoundEffect-objekt.

Okej, tack!
Jag har gjort lite egna instanser för att nå Game1 och spelare osv utanför, men aldrig använt en som jag inte själv gjort. Hur fungerar det? Anropar jag CreateInstance och döper den till något och skickar med ett ljud, och skapar därav en instans med en viss ljudeffekt? Får läsa lite.