Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Unityでインタラクティブミュージックやってみた

Avatar for Cova8bitdots Cova8bitdots
July 17, 2018
2.5k

 Unityでインタラクティブミュージックやってみた

サポーターズColab で登壇した時の資料です

Avatar for Cova8bitdots

Cova8bitdots

July 17, 2018
Tweet

Transcript

  1. ΠϯλϥΫςΟϒϛϡʔδοΫͱ͸ આ໌ ΠϯλϥΫςΟϒϛϡʔδοΫ ‣ ର࿩తͳԻָ ‣ ϢʔβʔͷೖྗʹΑͬͯԻָ͕มԽ ‣ ࡞ۂऀ(੡࡞ऀ)ͷҙਤ͠ͳ͍
 λΠϛϯάͰมԽ͢ΔՄೳੑ͕͋Δ

    ྫ) ɾϢʔβʔͷϘλϯೖྗͷλΠϛϯάͰ ɹBGM͕ऴΘΔʢεϓϥτΡʔϯͷχϡʔεը໘ʣ ɾCrypt of NecroDancer
 ɹγϣοϓ͕ۙͮ͘ͱϝϩσΟʔΛՎ͏ ɹళ௕ͷ੠͕ฉ͑͜Δ ΞμϓςΟϒϛϡʔδοΫ ‣ దԠతͳԻָ ‣ ঢ়گʹԠͯ͡ಈతʹมԽ͢ΔԻָ ‣ ࡞ۂऀ(੡࡞ऀ)ͷҙਤ௨Γʹ
 ੍ޚՄೳ ྫ) ɾεʔύʔϚϦΦϒϥβʔζͷ࢒Γ͕࣌ؒ
 ɹ୹͘ͳͬͨΒςϯϙ্͕͕Δ ɾϘεઓͷ֤ܗଶͰҟͳΔBGMΛྲྀ͢ ࢀߟɿCRIϛυϧ΢ΣΞɹήʔϜԻָΛม͑Δ ʮΞμϓςΟϒϛϡʔδοΫͱ͸ʁʯɹ(2009)
  2. ΠϯλϥΫςΟϒϛϡʔδοΫͱ͸ ͳͥ஫໨͞Ε͍ͯΔʁ ΠϯλϥΫςΟϒϛϡʔδοΫಋೖྫ ▸ FINAL FANTASY XV
 ಠࣗͷα΢ϯυγεςϜMAGI Λ։ൃɾར༻
 http://cedil.cesa.or.jp/cedil_sessions/view/1447


    ▸ εϓϥτΡʔϯγϦʔζ
 χϡʔεը໘Ͱεςʔδ঺հͷͱ͖ͷSEͱΩϟϥΫλʔͷಈ͖͕BGMͷ1,3ഥ໨ͱಉظ
 χϡʔεը໘ͳͲϢʔβʔͷϘλϯೖྗͷλΠϛϯάʹ߹ΘͤͯBGM͕ऴྃ͢Δ
 ৄࡉͳղઆΛ͍ͯ͠Δϒϩάɹhttp://blog.nine-gates.com/1640/
 ▸ FTL: Faster Than Light
 ότϧBGMͱ௨ৗBGM͕γʔϜϨεʹ੾ΓସΘΔ
 https://youtu.be/l6AJdn8RTNM AAA λΠτϧ͔ΒΠϯσΟʔζ·Ͱ༷ʑͳήʔϜͰಋೖɾ࣮૷͞Ε͍ͯΔ
  3. UNITY ͰΠϯλϥΫςΟϒϛϡʔδοΫΛߦ͏ʹ͸ʁ UNITY ͷΦʔσΟΦपΓͷ࿩(෮श) ▸ Unity5.x ͰΦʔσΟΦ͕ڧԽ͞Εͨ ▸ ݸਓతʹ͸5.x ͷΞοϓσʔτ͸ΦʔσΟΦΞοϓσʔτͱݺΜͰ·͢ɻͦΕ͘Β͍େਐา

    ▸ AudioMixer ͷ௥Ճ, SnapShot ػೳͷ௥Ճ ▸ MasterVolume ͷ؅ཧ͕Մೳ ▸ SnapShot ͷ੾ସʹΑΔμοΩϯάػೳͷ࣮ݱ ▸ LPF, HPF ͳͲͷ֤छϑΟϧλ͕ΧςΰϦຖʹదԠՄೳ
 ▸ ADPCM͕ར༻Մೳʹ ▸ ADPCMͱݴ͑͹εʔϑΝϛɻʢFCͰ΋Ұ෦Χηοτ͸ར༻͞Ε͍ͯͨʣ
 εʔύʔϚϦΦϒϥβʔζ3ͷBGMͰςΟϯύχͷԻͱ͔͕ೖͬͨͷ͸ADPCMͷ͓͔͛
 ▸ ωΠςΟϒϓϥάΠϯΛ͔͚ΔΑ͏ʹͳͬͨʂ ▸ αϯϓϧίʔυͷίϝϯτͷগͳ͞΍ʮͲ͏ͤઐ໳ͷਓ͔͠࢖ΘΜͰ͠ΐʯతͳײ͡ͳͨΊ
 ϋʔυϧߴ͍Ͱ͢ʢମݧஊ ▸ ҰԠαϯϓϧΛՃ޻ͯ͠ಠࣗϓϥάΠϯΛ࡞ͬͯΈ·͕ͨ͠
 Ի৴߸ॲཧͷجຊతͳ஌͕ࣝແ͍ͱख΋଍΋ग़·ͤΜɻ ▸ Ұݟ༷׬શ͓அΓ
  4. UNITY ͰΠϯλϥΫςΟϒϛϡʔδοΫΛߦ͏ʹ͸ʁ UNITY ͷΦʔσΟΦपΓͷ࿩(ϛυϧ΢ΣΞपΓ) ▸ ήʔϜۀքͰ࢖ΘΕ͍ͯΔϛυϧ΢ΣΞ ▸ CRI ADX2( CRI

    MiddleWare) ▸ ࠃ಺ͷѹ౗తγΣΞ཰ ▸ ॻ੶΋͋ΔͷͰ೔ຊޠ৘ใ͕ଟ͍
 ▸ Wwise( Audiokinetic ) ▸ ίϯγϡʔϚʔͰͷ࠾༻཰͕ߴ͍ ▸ ੈքతʹඪ४Ͱ࢖ΘΕ͍ͯΔ ▸ ADX2ͰՄೳͳ͜ͱ͸େ఍Ͱ͖Δ ▸ ϓϥάΠϯΛಠࣗʹ։ൃ΋Մೳ
 ▸ FMOD( Firelight Technologies) ▸ UnityͷΦʔσΟΦͷத਎ ▸ ѹ౗త೔ຊޠ৘ใͷগͳ͞(ന໨
  5. UNITY ͰΠϯλϥΫςΟϒϛϡʔδοΫΛߦ͏ʹ͸ʁ UNITY ͷΦʔσΟΦपΓͷ࿩ ▸ ࠓճ͸͜ΕΒϛυϧ΢ΣΞʹཔΒͳ͍ͰؤுͬͯΈ·͢
 ֤छϛυϧ΢ΣΞఏڙͷձ༷ࣾ͢Έ·ͤΜ ▸ ඇϛυϧ΢ΣΞͰ͋Ε͹ @geekdrums

    ͞Μ࡞੒ͷMusicEngine 
 ͱ͍͏ͷ͕͋Γ·͢(ࠓճ͸࢖͍·ͤΜ)
 https://github.com/geekdrums/MusicEngine
 
 
 ࢀߟ ▸ UnityͰα΢ϯυΤϯδϯ(ADX2, Wwise, FMOD)Λѻ͏ࡍʹ
 ͓͍͑ͨ͞ࣄ
 https://qiita.com/dTAT/items/2226d261498947dc2bda
 ݟʹߦͬͨΒ͍͍ͶϘλϯΛԡͦ͏ʢϚʣ
  6. UNITY ͰΠϯλϥΫςΟϒϛϡʔδοΫΛߦ͏ʹ͸ʁ α΢ϯυԋग़ ▪جຊతͳ΋ͷ ‣ ϛϡʔτ ‣ LowPassFilter ‣ HighPassFilter

    ‣ Reverb ‣ Echo ‣ Fade ‣ FadeIn ‣ FadeOut ‣ CrossFade ▪ͪΐͬͱߴ౓ ‣ μοΩϯά ‣ αΠυνΣʔϯೖྗ ‣ ࠶ੜτϥοΫͷมಈ ‣ τϥοΫ(ϨΠϠʔ)ͷ૿ݮ ‣ ࠶ੜҐஔͷγʔΫ ‣ ϏʔτಉظʢΫΥϯλΠζʣ ‣ ֤छϑΟϧλ ‣ ϑϥϯδϟʔ ‣ ϐονγϑτ ؔ܎͕ਂ͍߲໨ ؔ܎͕ਂ͍߲໨
  7. UNITY ͰΠϯλϥΫςΟϒϛϡʔδοΫΛߦ͏ʹ͸ʁ CROSSFADE ▸ Cross FadeͷΠϝʔδ͸ҎԼͷײ͡ ࣌ؒ Իྔ CrossFade Πϝʔδ

    BGM_A BGM_B τʔλϧͷԻྔ ࣌ؒ Իྔ ࣮ࡍ BGM_A BGM_B τʔλϧͷԻྔ ɾΠϝʔδ௨ΓʹͳΒͳ͍ ɾCrossFadeதʹτʔλϧͷԻྔ͕
 ɹมԽͯ͠͠·͏
  8. UNITY ͰΠϯλϥΫςΟϒϛϡʔδοΫΛߦ͏ʹ͸ʁ CROSSFADE ▸ ௚ઢมԽͷ৔߹ ▸ FadeIn : A(t) =

    t ▸ FadeOut: B(t) = (1-t ) ▸ ΤωϧΪʔ ʹ ▸ ͜͜ͰS1 (t) = S2 (t)=1 ͱԾఆ͢Ε͹
  9. UNITY ͰΠϯλϥΫςΟϒϛϡʔδοΫΛߦ͏ʹ͸ʁ CROSSFADE ▸ ࡾ֯ؔ਺ͷΧʔϒͰ࣮૷ͯ͠ΈΔ ࣌ؒ Իྔ CrossFade Πϝʔδ BGM_A

    BGM_B τʔλϧͷԻྔ ࣌ؒ Իྔ ࣮ࡍ BGM_A BGM_B τʔλϧͷԻྔ ɾԻྔมԽ͕ແ͍͔Βҧ࿨ײΛݮΒͤͨ ɾࣗવʹBGMΛ੾Γସ͑Ͱ͖Δ
  10. UNITY ͰΠϯλϥΫςΟϒϛϡʔδοΫΛߦ͏ʹ͸ʁ ࠶ੜτϥοΫͷมߋ ▸ ॎͷભҠ ▸ ࠶ੜτϥοΫ(AudioSource)ͷ૿ݮ ▸ ผָثͰԋ૗͞Ε͍ͯΔτϥοΫʹ੾Γସ͑Δ
 https://twitter.com/giginet/status/985420935657275392


    youtu.be/2fDdrdVjVIw
 ▸ BGMʹϦζϜηΫγϣϯ͕௥Ճ͞ΕΔ
 youtu.be/l6AJdn8RTNM ▸ ԣͷભҠ ▸ ࠶ੜҐஔΛγʔΫ ▸ 1A -> 2A -> Ξ΢τϩ ▸ ֤·ͱ·ΓͰτϥοΫΛ෼ׂ͢Ε͹
 τϥοΫͷ੾Γସ͑ʹΑΔٖࣅతԣભҠͷ࣮ݱՄೳ
  11. UNITY ͰΠϯλϥΫςΟϒϛϡʔδοΫΛߦ͏ʹ͸ʁ ॎͷભҠ ▸ جຊํ਑ɿAudioSourceͷ਺ʹΑΔΰϦԡ͠ ▸ ָ֤ثɺϨΠϠʔຖʹԻݯΛ༻ҙ ▸ શ෦ಉ࣌࠶ੜͭͭ͠ɺ֤AudioSourceͷԻྔΛૢ࡞ ▸

    ͋·Γʹ΋ྔ͕ଟ͘ͳΔͱॏ͍ ▸ ΍Γ͍ͨ৔߹͸ϛυϧ΢ΣΞʹཔΖ͏(εςϚ)
 ▸ ύλʔϯʹԠͯ͡ԻݯΛ༻ҙ ▸ BGMΛ֤ύλʔϯʹԠͯ͡੾Γସ͑Δ ▸ CrossFade͕׆͖Δ!!
  12. UNITY ͰΠϯλϥΫςΟϒϛϡʔδοΫΛߦ͏ʹ͸ʁ ԣͷભҠ ▸ Unity ͰભҠϙΠϯτΛఆٛ͢Δͷ͸৘ใྔతʹ΋ॲཧతʹ΋೉͍͠ ▸ ಛʹLoopԻݯΛ࢖͏ͱͳΔͱ೉қ౓͕͞Βʹ্͕Δ
 ▸ ભҠϙΠϯτΛݶఆ֤ͯ͠τϥοΫΛ༻ҙ

    ▸ ΠϯτϩɾϧʔϓɾΞ΢τϩͰ۠੾Δ ▸ ϢʔβʔͷλΠϛϯάΛݟͭͭʮྑ͍λΠϛϯάͰτϥοΫΛ੾Γସ͑Δʯ ▸ ʮྑ͍λΠϛϯάʯ͕ඇৗʹॏཁ
 গ͠Ͱ΋ζϨΔͱϢʔβʔʹόϨΔˍؾ࣋ͪѱ͍α΢ϯυʹͳΔ ▸ CrossFade͕׆͖Δ!!
  13. UNITY ͰΠϯλϥΫςΟϒϛϡʔδοΫΛߦ͏ʹ͸ʁ ࠶ੜτϥοΫͷมߋ ▸ ભҠ͢Δͱ͖ͷ஫ҙ఺ ▸ ਺ms Ͱ΋ζϨΔͱBGMʹʮউखʹʯΤϑΣΫτ͕͖ͭ·͢ ▸ ݻఆ௕ζϨΔ

    ▸ EchoϑΟϧλ͕͔͔ͬͨঢ়ଶ ▸ ͣΕ෯͕࣌ؒͰมΘΔ ▸ ϑϥϯδϟʔ͕͔͔ͬͨঢ়ଶ ▸ ϑϥϯδϟʔɿϗϫΠτϊΠζͰδΣοτΤϯδϯΛ࡞ΔͳͲͷΤϑΣΫλʔ
 ▸ τϥοΫؒͰʮςϯϙ(BPM)ʯ͕ҟͳΔͱͦ΋ͦ΋ؾ࣋ͪѱ͍Ͱ͢ɻ ▸ FadeOut͸ૣ͘ɺFadeIn͸௕ΊͳͲ޻෉͕ඞཁ
 ▸ τϥοΫؒͰௐʢίʔυʣ͕ҧ͏ͱ৔߹ʹΑͬͯ͸ෆڠ࿨Ի ▸ ୹2౓, ૿4౓ ҟͳΔ৔߹͸ɺΑ΄ͲҙਤతͰͳ͚Ε͹ආ͚Δ΂͖ ▸ 3౓, 4౓, 5౓, 8౓(ΦΫλʔϒ্) ͋ͨΓͰखΛଧͭΑ͏ʹ͢Δͱྑ͍
  14. UNITY ͰΠϯλϥΫςΟϒϛϡʔδοΫΛߦ͏ʹ͸ʁ ΠϕϯτͷϏʔτಉظ(ΫΥϯλΠζ) ▸ ࠶ੜτϥοΫʹʮBPMʯʮഥࢠʯΛఆٛ ▸ ຖϑϨʔϜ؂ࢹͯ͠೚ҙͷഥʹ੾ΓସΘͬͨΒΠϕϯτΛ࣮ߦͤ͞Δ ▸ [஫ҙ] ▸

    BPM͕͋·Γʹ΋ߴ͘ɺϏʔτ͕ࡉ͔͍ͱ
 ήʔϜΤϯδϯͷΞοϓσʔταΠΫϧ͕ߋ৽ݕ஌ʹؒʹ߹Θͳ͘ͳΔ ▸ 30FPS: 33[ms], 60FPS: 16[ms] ▸ BPM240 : 250[ms] : 62.5[ms] : 31.25[ms] 
 ▸ ԻήʔͰOnBeat ͷલޙ൑ఆΛ͠Α͏ͱ͢Δͱ
 લޙ1FະຬͩͬͨΓ͢ΔՄೳੑ͕͋Δ
  15. α΢ϯυγεςϜͷσϞϯετϨʔγϣϯ ੡࡞தͷα΢ϯυγεςϜ ▸ σʔλఆٛɿScriptableObjectΛར༻ ▸ AssetBundleԽ͠΍͍͢ ▸ ύϥϝʔλ͕๲େ( 30 ఔ౓)

    ▸ Inspector Ͱઃఆ͢Δͷ͸ݫ͍͠ ▸ ઐ༻ͷΦʔαϦϯάπʔϧΛ༻ҙ ▸ Load࣌ʹϓϩδΣΫτ಺ͷશՕॴʹ͋Δ
 AudioData ͷScriptableObjectΛऔಘ
  16. α΢ϯυγεςϜͷσϞϯετϨʔγϣϯ ੡࡞தͷα΢ϯυγεςϜ ▸ ϏʔτಉظγεςϜʹ͍ͭͯ 1. ΠϕϯτQueueΛఆٛ
 
 2. SoundManagerʹରͯ͠ΠϕϯτΛొ࿥
 


    
 3. SoundManagerଆͰBGMΛ؂ࢹͯ͠
 ࢦఆͷϏʔτʹ͖ͨΒQueueશ࣮ͯߦ ͱ͍͏ײ͡Ͱ࣮૷͍ͯ͠·͢ ʢҙ֎ͱ͜Μͳ΋ΜͰ͍͚ͪΌ͍·͢ʣ
  17. α΢ϯυγεςϜͷσϞϯετϨʔγϣϯ ੡࡞தͷα΢ϯυγεςϜ ▸ ॾࣄ৘ʹΑΓ·ͩGitHub্ʹެ։Ͱ͖·ͤΜʢ͝ΊΜͳ͍͞ʣ ▸ ςϯϙ͕Մมͳ৔߹ͷϏʔτಉظ͕ະରԠ ▸ LoopτϥοΫΛෳ਺ઃఆՄೳʹ֦ு ▸ Ξ΢τϩͷઃఆ௥Ճ

    ▸ αϯϓϧ͕Θ͔ΓͮΒ͍ͷͰΘ͔Γ΍͍͢αϯϓϧΛ࡞Δ ▸ υΩϡϝϯτ੔උ͖͠Εͯͳ͍ ▸ ֤छBugFix ▸ etc… ▸ ࠓळެ։༧ఆͰؤு࣮ͬͯ૷͍ͯ͠ΔͷͰ΋͏গʑ͓଴͍ͪͩ͘͞ ▸ ͪΌΜͱ͓൸࿐໨ग़དྷΔΑ͏ʹͳΓ·ͨ͠ΒɺͲ͔͜ͷษڧձͳͲͰൃද͢Δ༧ఆͰ͢
  18. UNITYͰΠϯλϥΫςΟϒϛϡʔδοΫ΍ͬͯΈͨ ·ͱΊ ▸ ΠϯλϥΫςΟϒϛϡʔδοΫ ▸ γʔϜϨεʹۂ͕มΘΔ ▸ Πϕϯτ͕Իָతʹؾ࣋ͪͷྑ͍λΠϛϯάͰ࣮ߦ͞ΕΔ ▸ Unity

    Ͱ΋ؤுΕ͹εΫϦϓτॻ͚ͩ͘Ͱ
 ͦͦ͜͜ΠϯλϥΫςΟϒϛϡʔδοΫ͸ग़དྷ·͢ ▸ ௿ෛՙɾ΋ͬͱ৭ʑ΍Γ͍ͨ৔߹͸ϛυϧ΢ΣΞΛ࢖͓͏ ▸ ͦ΋ͦ΋ద੾ͳ৔໘Ͱ࢖Θͳ͍ͱޮՌബͳͷͰ
 ήʔϜɾөըͳͲ͔Βԋग़ϓϥϯΛษڧ͠Α͏