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

【Unity道場09】Unity with VOCALOIDの歩き方

unitydojo
July 30, 2016
730

【Unity道場09】Unity with VOCALOIDの歩き方

unitydojo

July 30, 2016
Tweet

Transcript

  1. *OEFY •  70$"-0*% •  6OJUZXJUI70$"-0*% –  ΠϯλϥΫςΟϒίϯςϯπ΁ͷԠ༻ͱظ଴ –  70$"-0*%4%,GPS6OJUZ – 

    Վ੠ϥΠϒϥϦͱΞϓϦ։ൃ •  70$"-0*%4%,GPS6OJUZͷ࢖͍ํ ©2016 VOCALOID Group, Yamaha Corporation 3
  2. 70$"-0*%ͱ͸ Վ੠ϥΠϒϥϦ Վ੠ૉยΛूΊͨ΋ͷ  6* ՎࢺɼϝϩσΟ౳ͷฤू  ߹੒Τϯδϯ Վ੠Λ࡞Γग़͢ 

    Վࢺ Իූ ߹੒Ի ද৘ 歌声合成システム ©2016 VOCALOID Group, Yamaha Corporation 6
  3. 70$"-0*%ͱ͸ Վ੠ϥΠϒϥϦ Վ੠ૉยΛूΊͨ΋ͷ  ߹੒Τϯδϯ Վ੠Λ࡞Γग़͢  ߹੒Ի ൐૗ 6*

    ՎࢺɼϝϩσΟ౳ͷฤू  Վࢺ Իූ ද৘ VOCALOID エディター ©2016 VOCALOID Group, Yamaha Corporation 7
  4. 70$"-0*%ΤσΟλʔ ©2016 VOCALOID Group, Yamaha Corporation 8 ԻූɼՎࢺઃఆ ϛΩαʔ ද৘

    Վ͍ํ ઃఆ ΤϑΣΫτ ͷͪ΄Ͳɼಈ࡞͍ͯ͠Δͱ͜ΖΛ͓ݟͤ͠·͢
  5. 70$"-0*%ͱ͸ Վ੠ϥΠϒϥϦ Վ੠ૉยΛूΊͨ΋ͷ  ߹੒Τϯδϯ Վ੠Λ࡞Γग़͢  ߹੒Ի 6* ՎࢺɼϝϩσΟ౳ͷฤू

     Վࢺ Իූ ද৘ VOCALOID ライブラリ ©2016 VOCALOID Group, Yamaha Corporation 9
  6. 70$"-0*%߹੒ͷ࢓૊Έ •  lૉย࿈݁ܕzͷ߹੒ํࣜ –  ਓؒͷՎ੠Λऩ࿥͠ɼ੾Γग़ͨ͠੠ͷ෦඼ΛͳΊΒ͔ʹܨ͙͜ͱͰ ೚ҙͷՎ੠Λੜ੒ •  Վ੠ϥΠϒϥϦ –  ʮ͋ΔԻૉ͔Β࣍ͷԻૉ΁੠͕ҠΓ


    มΘΔ෦෼ʯͱʮ৳͹͢෦෼ʯΛ༻ҙ –  ͋ΒΏΔԻૉͷ૊Έ߹ΘͤΛొ࿥ •  ೔ຊޠͷ৔߹ ໿ݸʙ •  ӳޠͷ৔߹   ໿ ݸʙ 10 k-a a-a t-a a-k #k #t i M a-t #s e #a s-a a# a a-s 歌声ライブラリ ... ©2016 VOCALOID Group, Yamaha Corporation
  7. 70$"-0*%߹੒ͷ࢓૊Έ •  lૉย࿈݁ܕzͷ߹੒ํࣜ –  ਓؒͷՎ੠Λऩ࿥͠ɼ੾Γग़ͨ͠੠ͷ෦඼ΛͳΊΒ͔ʹܨ͙͜ͱͰ ೚ҙͷՎ੠Λੜ੒ •  Վ੠ϥΠϒϥϦ –  ʮ͋ΔԻૉ͔Β࣍ͷԻૉ΁੠͕ҠΓ


    มΘΔ෦෼ʯͱʮ৳͹͢෦෼ʯΛ༻ҙ –  ͋ΒΏΔԻૉͷ૊Έ߹ΘͤΛొ࿥ •  ೔ຊޠͷ৔߹ ໿ݸʙ •  ӳޠͷ৔߹   ໿ ݸʙ 11 k-a a-a t-a a-k #k #t i M a-t #s e #a s-a a# a a-s 歌声ライブラリ ... ©2016 VOCALOID Group, Yamaha Corporation lே BTB z<BBTTBBB> ৴߸ॲཧͰ ׈Β͔ʹ B BT TB B B ୯७ʹ઀ଓ
  8. 70$"-0*%ͱ͸ Վ੠ϥΠϒϥϦ Վ੠ૉยΛूΊͨ΋ͷ  ߹੒Τϯδϯ Վ੠Λ࡞Γग़͢  ߹੒Ի 6* ՎࢺɼϝϩσΟ౳ͷฤू

     Վࢺ Իූ ද৘ ボカロキャラクター ©2016 VOCALOID Group, Yamaha Corporation 12
  9. 70$"-0*%ͱ͸ Վ੠ϥΠϒϥϦ Վ੠ૉยΛूΊͨ΋ͷ  ߹੒Τϯδϯ Վ੠Λ࡞Γग़͢  ߹੒Ի ൐૗ 6*

    ՎࢺɼϝϩσΟ౳ͷฤू  Վࢺ Իූ ද৘ ボカロ曲 ©2016 VOCALOID Group, Yamaha Corporation 13
  10. Կ͕มΘΔͷ ͜Ε·Ͱ ͜Ε·Ͱ ήʔϜΞϓϦͰՎ੠Λѻ͏ͱ͖ ࣄલ४උͨ͠ΦʔσΟΦΛར༻ ͦͷ··࢖͏͔ɼಈతʹมԽͤ͞Δ ʹͯ͠΋ɼ೾ܗॲཧతͳޮՌ΍ ࠩ͠ସ͑ʹݶఆ ©2016 VOCALOID

    Group, Yamaha Corporation 17 ࣄલʹ࡞ͬͨԻָΛͦͷ··ྲྀ͢ ෦෼తͳΦʔσΟΦૉࡐΛ૊Έ߹ΘͤΔ ՎͷΠϯλϥΫςΟϒੑ͸ແ͠ ࣗ༝౓͕ݶఆ͞ΕΔ
  11. Կ͕มΘΔͷ ͜Ε͔Β ͜Ε͔Β ήʔϜΞϓϦͰՎ੠Λѻ͏ͱ͖ ϥϯλΠϜʹՎ੠߹੒Λ࣮ߦ ಈతʹγʔέϯε৘ใ ϝϩσΟɼՎࢺɼද৘ɼγϯΨʔ  ΛมߋՄೳ ΠϯλϥΫγϣϯʹԠͯ͡ɼ؆୯ʹՎΛมԽͤ͞Δ͜ͱ͕Ͱ͖Δ

    ©2016 VOCALOID Group, Yamaha Corporation 18 7429 70$"-0*%γʔέϯε  ԿΒ͔ͷ  τϦΨ΍  ৘ใ  ϝϩσΟ ද৘ɾ੠৭ ςϯϙ  γϯΨʔ Վࢺ ߹੒Τϯδϯ    Վ੠ϥΠϒϥϦ  Վ੠ͷ߹੒Ի  ΞϓϦ
  12. 70$"-0*%4%,GPS6OJUZ •  70$"-0*%γʔέϯεΛ –  ಡΈࠐΜͰੜ੒ͯ͠ –  ฤूͯ͠ •  Վ੠߹੒ॲཧͷ࣮ߦ Վ੠ͷ߹੒Իͷऔಘ

     ͕Ͱ͖Δ 70$"-0*%ͷՎ੠߹੒ػೳΛ6OJUZ্Ͱ࢖͏ͨΊͷ4%, ©2016 VOCALOID Group, Yamaha Corporation 22 7429 70$"-0*%γʔέϯε  ԿΒ͔ͷ  τϦΨ΍  ৘ใ  ϝϩσΟ ද৘ɾ੠৭ ςϯϙ  γϯΨʔ Վࢺ ߹੒Τϯδϯ    Վ੠ϥΠϒϥϦ  Վ੠ͷ߹੒Ի  ΞϓϦ
  13. γεςϜ֓ཁ ߹੒ΤϯδϯɼՎ੠ϥΠϒϥϦ͸ ϞόΠϧ޲͚ʹܰྔԽ  •  ରԠϓϥοτϑΥʔϜ •  6OJUZҎ߱ λʔήοτ • 

    8JOEPXT •  049 •  J04 •  "OESPJE ධՁத   •  シーケンス情報 •  歌声合成波形 (16bit/44.1kHz リニア PCM) •  発音記号 •  VSQX ロード命令 •  シーケンス編集命令 •  歌声合成命令 •  かな (歌詞情報) シーケンス データ (VSQX) 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID Group, Yamaha Corporation 23 VOCALOID SDK for Unity
  14. 70$"-0*%ϓϥάΠϯΛ࢖ͬͨൃԻϓϩηε シーケンス データ (オンメモリ) 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016

    VOCALOID Group, Yamaha Corporation 29 AudioSource AudioClip 歌声合成波形 [AudioClip の作成, AudioSource への設定]
  15. ԻූͷҐஔ͔ΒൃԻ։࢝ ˠ/( ࢠԻΛઌߦ͠ɼ฼Իʹ߹ΘͤΔ ˠ0, a # s a s s

    a a # a s a a # s a s s a a # a s a sa sa l͞z l͞z ϨΠςϯγͱ໌ྎ౓ͷτϨʔυΦϑ /PUF0O /PUF0O /PUFPO͕฼ԻͷλΠϛϯάͱ߹͏ͱɼਖ਼͍͠ϦζϜʹௌ͑͜Δ Վ੠߹੒ͱϦΞϧλΠϜॲཧͷݪཧతɾҰൠతͳ՝୊ ©2016 VOCALOID Group, Yamaha Corporation 32 ֤ಈ࡞Ϟʔυͷઆ໌ͷલʹ ˠࢠԻ͸ઌߦ͢Δඞཁ͕͋Γɼઌߦ෦෼͕୹͍ͱ໌ྎ౓͕Լ͕Δ
  16. 1MBZCBDL߹੒Ϟʔυ •  ·ͱ·ͬͨϑϨʔζΛࣄલʹ߹੒͢ΔϞʔυ –  ઌߦࢠԻΛ໌ྎʹ߹੒ ⾣ ߴ඼࣭ͳՎ੠߹੒ a # s s

    a sa l͞z ࢠԻ͕ΑΓ໌ྎʹௌ͑͜ΔΑ͏ʹ ࣄલʹՎ੠Λ߹੒ ࢠԻΛ໌ྎʹ߹੒Մೳ ©2016 VOCALOID Group, Yamaha Corporation 34 sa a s s a a ... ... ... a ... ... ...
  17. 3FBMUJNF߹੒Ϟʔυ •  ϦΞϧλΠϜͰಈ࡞͢Δ߹੒Ϟʔυ –  ಈతʹΠϕϯτΛड͚औΓɼ͙͢ʹ߹੒Λ࣮ߦ •  ໌ྎ౓ͱͷόϥϯεΛऔΓͭͭɼࢠԻͷൃԻ௕Λ࠷খԽ ⾣ ௿ϨΠςϯγͳՎ੠߹੒ ©2016 VOCALOID

    Group, Yamaha Corporation 36 3FBMUJNF߹੒ 1MBZCBDL߹੒ a # s s a sa l͞z ઌߦͯ͠߹੒ a # a # s a # s a sa l͞z ࢠԻ෦෼ΛͰ͖Δ͚ͩ୹͘͢Δ খ͗͘͢͞͠Δͱෆ໌ྎʹͳΔ
  18. 130+&$5",";" •  70$"-0*%4%,GPS6OJUZϦϑΝϨϯεՎ੠ϥΠϒϥϦ –  ୯ͳΔαϯϓϧϘΠεʹཹ·Δ͜ͱͳ͘ɼਂ͍ίϯςΩετͱ ʮՎ৺ʯΛవͬͨϥΠϒϥϦΛ໨ࢦͯ͠։ൃ ©2016 VOCALOID Group, Yamaha

    Corporation 39 130+&$5",";"ʹؔ͢Δ։ൃΤϐιʔυΛؚΊͨ ʮ6OJUZXJUI70$"-0*%ΠϯλϏϡʔʯ͕ɼ VOJUZDIBO0''*$*"-8&#4*5&ʹͯެ։։࢝͞Ε͍ͯ·͢ શճॱ࣍ެ։༧ఆ   ͥͻ͝ཡ͍ͩ͘͞  IUUQVOJUZDIBODPNDPOUFOUTDBUFHPSZJOUFSWJFXWPDBMPJE 
  19. VOJUZDIBOՎ੠ϥΠϒϥϦͰͷΞϓϦ։ൃϫʔΫϑϩʔ 70$"-0*%4%, GPS6OJUZ 7429 Վ੠ ϥΠϒϥϦ Վ੠ ϥΠϒϥϦ 70$"-0*%&EJUPS 70$"-0*%&EJUPSGPS$VCBTF

    Վ੠ ϥΠϒϥϦ .PCJMF70$"-0*%&EJUPS J04൛ 1$൛ VOJUZDIBO Վ੠ϥΠϒϥϦ ϥϯλΠϜ൛ ແঈެ։ ͦͷଞ ૉࡐ Վএγʔέϯε σʔλ Վ੠ ϥΠϒϥϦ ΞϓϦέʔγϣϯ ָۂ Վএγʔέϯε੍࡞ ߹੒ Τϯδϯ ߹੒ Τϯδϯ ΞϓϦ͔ΒಈతʹಡΈࠐΉ৔߹ ϕʔεͱͳΔ ՎএγʔέϯεΛ ࣄલʹ੍࡞͢Δ৔߹ ©2016 VOCALOID Group, Yamaha Corporation 43
  20. Վ੠ϥΠϒϥϦͱϥΠηϯεܗଶ VOJUZDIBO     6$-ͷԼͰͷແঈར༻  ͦΕҎ֎ͷ༗ঈϥΠηϯε ߹੒Τϯδϯ ৽نϥΠϒϥϦ

     ઐ༻Վ੠ϥΠϒϥϦͷडୗ։ൃ΋ ঝΓ·͢ Վ੠ϥΠϒϥϦ ύʔτφʔاۀ͞·  ͷϥΠϒϥϦ  ϠϚϋͷϥΠϒϥϦ  طଘͷ70$"-0*%ϥΠϒϥϦͷ ΞϓϦ޲͚༗ঈϥΠηϯε  ˞ࢢൢͷԻ੍ָ࡞༻Վ੠ϥΠϒϥϦΛ ɹ4%,ʹ૊ΈࠐΜͰ࢖༻͢Δ͜ͱ͸ ɹͰ͖·ͤΜ  ϥΠηϯεͷߟ͑ํ 8JOEPXT .BD J04 "OESPJE  + ©2016 VOCALOID Group, Yamaha Corporation 44
  21. αϯϓϧϓϩδΣΫτ IUUQCVTJOFTTWPDBMPJEDPNVOJUZTELpMFT6OJUZ%PKP@70$"-0*%[JQ ©2016 VOCALOID Group, Yamaha Corporation 46 ʮ͏ͨϘλϯʯΛԡ͢ͱ1MBZCBDL߹੒Λ࣮ߦ ςϯϙɼද৘ύϥϝʔλ

    छ ɼՎࢺΛมߋՄೳ খ͍͞Ϙʔϧ͕पғͷϘʔϧؒΛҠಈ͠ɼ Ϳ͔ͭͬͨ࣌ʹ3FBMUJNF߹੒Λߦ͍ɼՎ͏ ຊαϯϓϧϓϩδΣΫτͷ࣮ߦʹ͸ɼผ్70$"-0*%4%,GPS6OJUZͷΠϯϙʔτ͕ඞཁͰ͢ hPp://business.vocaloid.com/unitysdk/download/
  22. 70$"-0*%γʔέϯεͷߏ଄ ©2016 VOCALOID Group, Yamaha Corporation 47 ... VOCALOID シーケンス

    (ソング) トラック1 パート ノート 歌詞: ぼ 発音記号: [b o] ノートNo.: 69 ... ノート 歌詞: く 発音記号: [k M] ノートNo.: 69 ... ... ... パート トラック2 ...
  23. 70$"-0*%γʔέϯεͷߏ଄ϊʔτ ©2016 VOCALOID Group, Yamaha Corporation 48 ... VOCALOID シーケンス

    (ソング) トラック1 パート ノート 歌詞: ぼ 発音記号: [b o] ノートNo.: 69 ... ノート 歌詞: く 発音記号: [k M] ノートNo.: 69 ... ... ... パート トラック2 ...
  24. 70$"-0*%γʔέϯεͷߏ଄ύʔτ ©2016 VOCALOID Group, Yamaha Corporation 49 ... VOCALOID シーケンス

    (ソング) トラック1 パート ノート 歌詞: ぼ 発音記号: [b o] ノートNo.: 69 ... ノート 歌詞: く 発音記号: [k M] ノートNo.: 69 ... ... ... パート トラック2 ...
  25. 70$"-0*%γʔέϯεͷߏ଄τϥοΫ ©2016 VOCALOID Group, Yamaha Corporation 50 ... VOCALOID シーケンス

    (ソング) トラック1 パート ノート 歌詞: ぼ 発音記号: [b o] ノートNo.: 69 ... ノート 歌詞: く 発音記号: [k M] ノートNo.: 69 ... ... ... パート トラック2 ...
  26. 70$"-0*%γʔέϯεͷߏ଄γʔέϯε ©2016 VOCALOID Group, Yamaha Corporation 51 VOCALOID シーケンス (ソング)

    トラック1 パート ノート 歌詞: ぼ 発音記号: [b o] ノートNo.: 69 ... ノート 歌詞: く 発音記号: [k M] ノートNo.: 69 ... ... ... パート トラック2 ... ...
  27. 70$"-0*%γʔέϯεͷߏ଄ ©2016 VOCALOID Group, Yamaha Corporation 53 時間 音の高さ =

    ノート No. 1小節 1拍 ノートオン ノートオフ •  70$"-0*%͸࣌ؒΛ5JDLͰѻ͏ .*%*Ͱѻ͏࣌ؒ୯Ґ  •  70$"-0*%Ͱ͸ɼ෼Իූ͸5JDL •  6OJUZͰѻ͏৔߹ʹ5JDLˠඵ<TFD>΁ͷม׵͕ඞཁ –  ςϯϙ<#1.>ͷӨڹ΋ड͚Δ 変換の詳細はのちほど (サンプルコードを見ながら)
  28. 70$"-0*%4%,GPS6OJUZͷΠϯϙʔτ   ;*1ΞʔΧΠϒΛల։ޙɼVOJUZQBDLBHFΛΠϯϙʔτ  ©2016 VOCALOID Group, Yamaha Corporation 55

    J  ϓϩδΣΫτΛ࡞੒ JJ  <ϝχϡʔ>"TTFUT*NQPSU1BDLBHF$VTUPN1BDLBHF
  29. 70$"-0*%4%,GPS6OJUZͷΠϯϙʔτ Πϯϙʔτ͞ΕΔσΟϨΫτϦɼϑΝΠϧ ൈਮ  •  70$"-0*%@4%, –  ֤ϓϥοτϑΥʔϜ޲͚70$"-0*%ϓϥάΠϯΛ಺แ •  4USFBNJOH"TTFUT70$"-0*%

    –  70$"-0*%Վ੠ϥΠϒϥϦʹؔ࿈͢ΔϑΝΠϧΛ಺แ •  &EJUPS1PTU1SPDFTT#VJMEDT –  Ϗϧυޙʹ9DPEFϓϩδΣΫτͷઃఆϑΝΠϧΛมߋ͢ΔεΫϦϓτ J04޲͚  ©2016 VOCALOID Group, Yamaha Corporation 58
  30. #if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN" using Yamaha.VOCALOID.Windows;" #elif UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX

    " using Yamaha.VOCALOID.OSX;" #elif UNITY_IOS" using Yamaha.VOCALOID.iOS;" #endif" " using UnityEngine;" using System.Collections;" " public class Example : MonoBehaviour {" " void Start () {" // API はすべて static にアクセス." YVF.YVFStartup("personal", Application.streamingAssetsPath + "/VOCALOID/DB_ini");" } " }"  70$"-0*%ϓϥάΠϯͷجຊతͳ࢖͍ํ •  :7'Ϋϥε TUBUJD ͕"1*Λแؚ •  ϓϥοτϑΥʔϜ͝ͱͷOBNFTQBDFԼʹɼͦΕͧΕ:7'Ϋϥε͕͋Δ ؆ૉԽͷͨΊɼεϥΠυ্ͷαϯϓϧίʔυ͸αϯϓϧϓϩδΣΫτͰͷॻ͖ํͱҰக͠ͳ͍৔߹͕͋Γ·͢ ©2016 VOCALOID Group, Yamaha Corporation 59
  31. YVF.YVFResult result = YVF.YVFStartup("personal", path);" " // 結果に応じて必要な処理をする if (result

    == YVF.YVFResult.Success) {" print("正常終了");" " } else if (result == YVF.YVFResult.InvalidString) {" print("入力文字列が不正");" // TODO" }  70$"-0*%ϓϥάΠϯͷجຊతͳ࢖͍ํ •  ଟ͘ͷ"1*͸ɼ໭Γ஋ͱͯ͠ϝιουͷ࣮ߦ݁ՌΛද͢enum Λฦ͢ –  YVFResult ৘ใऔಘܥҎ֎ͷ΄΅͢΂ͯͷ"1*ͷ໭Γ஋  –  YVFFindResult ৘ใऔಘܥ"1*ͷ໭Γ஋  •  YVFFind~() •  YVFNext~() ©2016 VOCALOID Group, Yamaha Corporation 60
  32. 70$"-0*%ϓϥάΠϯͷىಈɼ߹੒Ϟʔυઃఆ // VOCALOID プラグインの起動." public void Startup() {" YVF.YVFResult result;"

    " // ファイルの配置を変えなければ,常に下記の引数を渡す." result = YVF.YVFStartup("personal", Application.streamingAssetsPath + "/VOCALOID/DB_ini");" }  1MBZCBDL7PD"VEJP.BOBHFSDT 3FBMUJNF7PD"VEJP.BOBHFSDT ©2016 VOCALOID Group, Yamaha Corporation 62 ӈԼͷϑΝΠϧ໊͸ɼαϯϓϧίʔυʹؔ࿈͢ΔαϯϓϧϓϩδΣΫτͷϑΝΠϧΛද͠·͢ •  ىಈޙʹɼ1MBZCBDL߹੒3FBMUJNF߹੒ͷͲͪΒͷϞʔυʹ͢Δ͔ͷ ઃఆΛߦ͍·͢ ࣍ϖʔδ
  33. 70$"-0*%ϓϥάΠϯͷىಈɼ߹੒Ϟʔυઃఆ // VOCALOID プラグイン起動後に合成モードを設定します." " // Playbackモードに設定する. " public void

    SetPlaybackMode(int engineCount) {" " // 引数は起動するエンジンのインスタンス数.並列で歌声合成処理を実行する必要がない場合は 1 を設定. " YVF.YVFResult result = YVF.YVFSetStaticSetting(engineCount);" }" " // Realtimeモードに設定する. " public void SetRealtimeMode() {" " // 引数はバッファサイズ (512 Samples)." YVF.YVFResult result = YVF.YVFRealtimeSetStaticSetting(YVF.YVFRealtimeMode.Mode512);" }  1MBZCBDL7PD"VEJP.BOBHFSDT 3FBMUJNF7PD"VEJP.BOBHFSDT ©2016 VOCALOID Group, Yamaha Corporation 63
  34. 70$"-0*%ϓϥάΠϯͷऴྃ // VOCALOID プラグインの終了." public void Shutdown() {" " //

    起動したら必ず終了する." YVF.YVFResult result = YVF.YVFShutdown();" }  1MBZCBDL7PD"VEJP.BOBHFSDT 3FBMUJNF7PD"VEJP.BOBHFSDT ©2016 VOCALOID Group, Yamaha Corporation 64 •  ΞϓϦέʔγϣϯऴྃલʹɼඞͣ70$"-0*%ϓϥάΠϯͷऴྃॲཧΛ ߦ͍ͬͯͩ͘͞
  35. // VSQX のロード." public void LoadSequence(string sequencePath) {" // ソングの作成.

    ハンドルの取得." songHandle = YVF.YVFOpenSong();" " YVF.YVFResult result = YVF.YVFLoadVSQXFile(songHandle, " Application.streamingAssetsPath + "/VOCALOID/SequenceFiles/" + sequencePath);" " if (result != YVF.YVFResult.Success) {" // 使わなくなったらソングを閉じる." YVF.YVFCloseSong(songHandle);" }" }  70$"-0*%γʔέϯε 7429 ͷϩʔυ •  7429ϑΝΠϧΛԼهσΟϨΫτϦ಺ʹ഑ஔ –  "TTFUT4USFBNJOH"TTFUT70$"-0*%4FRVFODF'JMFT 1MBZCBDL7PD"VEJP.BOBHFSDT ©2016 VOCALOID Group, Yamaha Corporation 65 •  YVFOpenSong()͸ιϯάϋϯυϧΛฦ͢
  36. ϋϯυϧʹΑΔΞΫηε ©2016 VOCALOID Group, Yamaha Corporation 66 VOCALOID シーケンス (ソング)

    ソングハンドル: 1 トラック1 パート パートハンドル: 1 ノート ノートハンドル: 1 トラック2 ... ... ... •  ϋϯυϧΛࢦఆ͢Δ͜ͱͰɼରԠͨ͠γʔέϯεύʔττϥοΫʹ ΞΫηε͢Δ͜ͱ͕Ͱ͖Δ τϥοΫ͸࠷େͰ͋ΓɼʙΛࢦఆ͢Δ ノート ノートハンドル: 2 パート パートハンドル: 2 ... VOCALOID シーケンス (ソング) ソングハンドル: 2 トラック1 トラック2 ... パート パートハンドル: 3
  37. ϋϯυϧʹΑΔΞΫηε ©2016 VOCALOID Group, Yamaha Corporation 67 ιϯάɼύʔτɼϊʔτ ʹΞΫηε VOCALOID

    シーケンス (ソング) ソングハンドル: 1 トラック1 パート パートハンドル: 1 ノート ノートハンドル: 1 トラック2 ... ... ... ノート ノートハンドル: 2 パート パートハンドル: 2 ... VOCALOID シーケンス (ソング) ソングハンドル: 2 トラック1 トラック2 ... パート パートハンドル: 3
  38. short track = 1;" int tick = 0; " YVF.YVFPartHead

    partHead = new YVF.YVFPartHead();" " " // ソングハンドル,トラック No. を指定してアクセスする." YVF.YVFFindResult findResult = YVF.YVFFindPart(songHandle, track, tick, out partHead);" " if (findResult != YVF.YVFFindResult.Found) {" return;" }" " do {" print(partHead.partName + ”\t" + partHead.posTick);" } while (YVF.YVFNextPart(songHandle, track, out partHead) == YVF.YVFFindResult.Found);  ύʔτͷऔಘ 1MBZCBDL7PD"VEJPDT ©2016 VOCALOID Group, Yamaha Corporation 68 •  YVFFindPart()Ͱɼ༩͑ΒΕͨ࣌ࠁҎ߱ʹ͋Δઌ಄ͷ৘ใΛऔಘ͢Δ •  Ҏ߱͸YVFNextPart()Ͱɼ൓෮తʹΞΫηε͢Δ ˠFind/Nextͷ໊ͷͭ͘"1*͸ଞʹ΋͋Γɼ࢖͍ํ͸ڞ௨
  39. YVF.YVFNote note = new YVF.YVFNote();" " // ソングハンドル,パートハンドルを指定してアクセスする." YVF.YVFFindResult findResult

    = YVF.YVFFindNoteInPart(songHandle, partHead.partHandle, tick, out note);" " if (findResult != YVF.YVFFindResult.Found) {" return;" }" " do {" print(note.noteTime + "\t" + note.noteLength + "\t" + note.noteNumber);" } while (YVF.YVFNextNoteInPart(songHandle, partHead.partHandle, out note) == YVF.YVFFindResult.Found);  ϊʔτͷऔಘ 1MBZCBDL7PD"VEJPDT ©2016 VOCALOID Group, Yamaha Corporation 69
  40. YVF.YVFNote note = new YVF.YVFNote(480, 240, 69, “ら”); // (時刻

    [Tick],長さ [Tick],音高 (ノート No.),歌詞)" note.noteHandle = 0;" " int noteHandle; // 編集後のノートのノートハンドルを格納するための変数." " // ソングハンドル,パートハンドル,ノートハンドル (note.noteHandle) を指定してアクセスする." YVF.YVFResult result = YVF.YVFEditNoteInPart(songHandle, partHandle, ref note, YVF.YVFLang.Japanese, " out noteHandle);"  ϊʔτͷฤू 1MBZCBDL7PD"VEJPDT ©2016 VOCALOID Group, Yamaha Corporation 70 •  ref note.noteHandleͰࢦఆͨ͠ϊʔτΛฤू –  (note.noteHandle == 0 PS ϋϯυϧʹରԠ͢Δϊʔτ͕ଘࡏ͠ͳ͍  ͱ͖͸৽ن࡞੒ –  (note.noteLength == 0) ͷͱ͖͸࡟আ out noteHandle͸ฤूޙʹઃఆ͞ΕΔσʔλ
  41. 1MBZCBDL߹੒ ©2016 VOCALOID Group, Yamaha Corporation 71 ྲྀΕ   Վ੠߹੒ͷ४උ

    –  ߹੒͢ΔύʔτͷࢦఆɼΠϕϯτσʔλͷੜ੒ ύʔτ಺ͷҰ෦΋ࢦఆͰ͖·͢ –  ֫ಘ͢ΔՎ੠߹੒σʔλͷϑϨʔϜ਺ͷऔಘ   Վ੠߹੒ॲཧͷ࣮ߦ   ޙॲཧ –  ΠϕϯτσʔλͷΫϦΞ   6OJUZͷΦʔσΟΦग़ྗ༻ΦϒδΣΫτʹՎ੠߹੒σʔλΛઃఆɼग़Ի  Վ੠߹੒ॲཧ͸ෛՙ͕ߴ͍ͷͰϝΠϯεϨουͰ࣮ߦ͠ͳ͍ํ͕ྑ͍
  42. 1MBZCBDL߹੒ シーケンスデータ (オンメモリ) 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID

    Group, Yamaha Corporation 72 VOCALOID シーケンス (ソング) トラック1 パート1 ノート1 ノート2 パート2 トラック2 ... ... ...
  43. 1MBZCBDL߹੒Վ੠߹੒ͷ४උ シーケンスデータ (オンメモリ) 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID

    Group, Yamaha Corporation 73 VOCALOID シーケンス (ソング) トラック1 パート1 ノート1 ノート2 パート2 トラック2 ... ... ... [合成するパートの指定, イベントデータの生成] [歌声合成データの フレーム数の取得] 歌声合成データのフレーム数
  44. 1MBZCBDL߹੒Վ੠߹੒ॲཧͷ࣮ߦ シーケンスデータ (オンメモリ) 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID

    Group, Yamaha Corporation 74 VOCALOID シーケンス (ソング) トラック1 パート1 ノート1 ノート2 パート2 トラック2 ... ... ... [歌声合成処理の実行] Վ੠߹੒σʔλTIPSU<>
  45. 1MBZCBDL߹੒ޙॲཧ 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID Group, Yamaha

    Corporation 75 [イベントデータのクリア] Վ੠߹੒σʔλTIPSU<> シーケンスデータ (オンメモリ) VOCALOID シーケンス (ソング) トラック1 パート1 ノート1 ノート2 パート2 トラック2 ... ... ...
  46. 1MBZCBDL߹੒ΦʔσΟΦग़ྗ༻ΦϒδΣΫτͷઃఆɼग़Ի 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID Group, Yamaha

    Corporation 76 AudioSource AudioClip Unity のオーディオ出力用オブジェクトに 歌声合成データを設定,出音 シーケンスデータ (オンメモリ) VOCALOID シーケンス (ソング) トラック1 パート1 ノート1 ノート2 パート2 トラック2 ... ... ...
  47. 1MBZCBDL߹੒Վ੠߹੒ͷ४උ /*--- 歌声合成の準備 ---*/" " // 開始 tick を指定し,イベントデータを生成" YVF.YVFResult

    result = YVF.YVFSetupMidiEventsToEONInPart(songHandle, partHandle, partHead.posTick);" if (result != YVF.YVFResult.Success) {" return;" }" " int totalFrame = 0;" // パートの総フレーム数の取得" result = YVF.YVFGetTotalFrameByPart(partHandle, out totalFrame);" " if (result != YVF.YVFResult.Success) {" return;" }" " if (totalFrame <= 0) {" return;" }" " // 獲得する歌声合成データの総サンプル数 (総サンプル数 = フレームあたりのサンプル数 x 総フレーム数) int targetRenderSamples = YVF.YVFSamplesPerFrame * totalFrame ;" " /*--- 歌声合成処理の実行へ続く ---*/  ©2016 VOCALOID Group, Yamaha Corporation 77 1MBZCBDL7PD"VEJPDT
  48. 1MBZCBDL߹੒Վ੠߹੒ͷ४උ シーケンスデータ (オンメモリ) 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID

    Group, Yamaha Corporation 78 VOCALOID シーケンス (ソング) トラック1 パート1 ノート1 ノート2 パート2 トラック2 ... ... ... [合成するパートの指定, イベントデータの生成] [歌声合成データの フレーム数の取得] 歌声合成データのフレーム数 今ココ
  49. 1MBZCBDL߹੒Վ੠߹੒ॲཧͷ࣮ߦ /*--- 歌声合成処理の実行 ---*/" // 歌声合成処理の開始" result = YVF.YVFBeginRender(engineHandle);" if

    (result != YVF.YVFResult.Success) {" return;" }" while (true) {" int renderSamples = 0;" // 歌声合成処理を実行し,short[] renderData に値を書き込む
 // renderSamples に書き込んだサンプル数が設定される" result = YVF.YVFRender(partHandle, renderData, targetRenderSamples, engineHandle, " out renderSamples);" if (result != YVF.YVFResult.Success) {" return;" }" totalRenderSamples += renderSamples;" if (renderSamples < targetRenderSamples) {" break; // 指定した イベントデータの合成が完了したらループを抜ける " }" }" // 歌声合成処理処理の終了" result = YVF.YVFEndRender(engineHandle);" if (result != YVF.YVFResult.Success) {" return;" }" /*--- 後処理へ続く ---*/  ©2016 VOCALOID Group, Yamaha Corporation 79 1MBZCBDL7PD"VEJPDT
  50. 1MBZCBDL߹੒Վ੠߹੒ॲཧͷ࣮ߦ シーケンスデータ (オンメモリ) 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID

    Group, Yamaha Corporation 80 VOCALOID シーケンス (ソング) トラック1 パート1 ノート1 ノート2 パート2 トラック2 ... ... ... [歌声合成処理の実行] Վ੠߹੒σʔλTIPSU<> 今ココ
  51. 1MBZCBDL߹੒ޙॲཧ /*--- 後処理---*/" " // イベントデータのクリア." result = YVF.YVFClearMidiEventsInPart(songHandle, partHandle);"

    " if (result != YVF.YVFResult.Success) {" return;" }  ©2016 VOCALOID Group, Yamaha Corporation 81 1MBZCBDL7PD"VEJPDT
  52. 1MBZCBDL߹੒ޙॲཧ 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID Group, Yamaha

    Corporation 82 [イベントデータのクリア] Վ੠߹੒σʔλTIPSU<> シーケンスデータ (オンメモリ) VOCALOID シーケンス (ソング) トラック1 パート1 ノート1 ノート2 パート2 トラック2 ... ... ... 今ココ
  53. 1MBZCBDL߹੒ΦʔσΟΦग़ྗ༻ΦϒδΣΫτͷઃఆɼग़Ի public void Play (){" // 獲得した歌声合成データのサンプル数分の長さを確保し,オーディオクリップを作成." AudioClip clip =

    AudioClip.Create("VOCALOID", totalRenderSamples, 1, YVF.YVFSamplingRate, false, " OnAudioRead, OnAudioSetPosition);" " // オーディオソースの取得,クリップ設定,出音." AudioSource source = gameObject.GetComponent<AudioSource>();" source.clip = clip;" source.Play();" }" " // オーディオクリップに歌声合成データを設定するデリゲート." void OnAudioRead(float[] data) {" for (int i = 0; i < data.Length; ++i, ++audioPosition) {" data[i] = renderData[audioPosition] / 32768.0f; " // convert [-32768, 32767] (short) to [-1.0, 1.0) (float)." }" }" " // オーディオクリップの読み取り位置変更時に呼ばれるデリゲート." void OnAudioSetPosition(int newPosition) {" audioPosition = newPosition;" }  ©2016 VOCALOID Group, Yamaha Corporation 83 1MBZCBDL7PD"VEJPDT
  54. 1MBZCBDL߹੒ΦʔσΟΦग़ྗ༻ΦϒδΣΫτͷઃఆɼग़Ի 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID Group, Yamaha

    Corporation 84 AudioSource AudioClip Unity のオーディオ出力用オブジェクトに 歌声合成データを設定,出音 シーケンスデータ (オンメモリ) VOCALOID シーケンス (ソング) トラック1 パート1 ノート1 ノート2 パート2 トラック2 ... ... ... 今ココ
  55. 1MBZCBDL߹੒߹੒λΠϛϯάɼ൐૗ͱͷಉظ ©2016 VOCALOID Group, Yamaha Corporation 85 •  ࣄલʹ·ͱ·ͬͨϑϨʔζΛ߹੒ • 

    ࢠԻ໌ྎԽͷͨΊʹɼ70$"-0*%ϓϥάΠϯͰNTΛ֬อ ˠ NT ॲཧ࣌ؒ ͷ༨༟Λ΋ͬͯՎ੠߹੒ॲཧɼ  ΦʔσΟΦΦϒδΣΫτͷઃఆΛߦ͏ a # s s a sa l͞z sa a s s a a ... ... ... a ... ... ... NT
  56. 1MBZCBDL߹੒߹੒λΠϛϯάɼ൐૗ͱͷಉظ ©2016 VOCALOID Group, Yamaha Corporation 86 // 歌声の再生" public

    void Sing(float startTime) {" " // 先読み時間 [msec] -> [sec]" float presend = YVF.YVFGetPresendTime() * 0.001f;" " // 先読み時間分前もって再生する必要がある" source.PlayDelayed(startTime - presend);" }  1MBZCBDL7PD"VEJPDT a # s s a sa l͞z sa a s s a a ... ... ... a ... ... ... NT
  57. 1MBZCBDL߹੒߹੒λΠϛϯάɼ൐૗ͱͷಉظ ©2016 VOCALOID Group, Yamaha Corporation 87 // Tick を秒

    [sec] に変換" public float TickToTime(int tick, float bpm) {" " // 1Tick あたりの時間 [sec]" float tickSecond = 60 / bpm / YVF.YVFResolution;" " return tick * tickSecond; ;" }  $PNNPO7PD4ZTUFNDT •  70$"-0*%͕ѻ͏࣌ࠁ୯ҐTick ͔Βඵ [sec] ΁ͷม׵͕ඞཁ" •  ൐૗ͷ։࢝࣌ࠁΛج४ʹͯ͠ɼՎ੠߹੒σʔλΛ൐૗ͷ࣌ࠁʹ߹Θͤͯ ࠶ੜ͢ΔͱΑ͍ ൐૗Λج४ʹ͢Δ ൐૗ 70$"-0*%
  58. 3FBMUJNF߹੒ ©2016 VOCALOID Group, Yamaha Corporation 88 ྲྀΕ   ϦΞϧλΠϜ߹੒ॲཧͷ։࢝

    Πϕϯτͷ଴ͪड͚։࢝    Վࢺઃఆ ࣄલʹઃఆͨ͠ՎࢺͰϧʔϓ͢Δ    Πϕϯτͷ௥Ճ   Πϕϯτͷ֬ఆ    6OJUZͷΦʔσΟΦग़ྗσʔλʹՎ੠߹੒σʔλΛઃఆɼग़Ի    ϦΞϧλΠϜ߹੒ॲཧͷऴྃ Πϕϯτ ϊʔτΦϯΦϑ΍ද৘ύϥϝʔλઃఆͷมߋͳͲͷ৘ใ
  59. 3FBMUJNF߹੒ϦΞϧλΠϜ߹੒ॲཧͷ։࢝ 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID Group, Yamaha

    Corporation 90 オーディオ出力データ 70$"-0*% Τϯδϯ acMve [リアルタイム合成処理の開始]
  60. 3FBMUJNF߹੒Վࢺઃఆ 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID Group, Yamaha

    Corporation 91 オーディオ出力データ 70$"-0*% Τϯδϯ acMve [歌詞の設定] よろしくね
  61. 3FBMUJNF߹੒Πϕϯτͷ௥Ճɼ֬ఆ 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID Group, Yamaha

    Corporation 92 オーディオ出力データ 70$"-0*% Τϯδϯ acMve [イベントの追加,確定] よろしくね e.g. ノートオン
  62. 3FBMUJNF߹੒Վ੠߹੒σʔλͷऔಘ 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID Group, Yamaha

    Corporation 93 オーディオ出力データ 70$"-0*% Τϯδϯ acMve [歌声合成データの取得] よろしくね Վ੠߹੒σʔλTIPSU<> よー
  63. 3FBMUJNF߹੒Վ੠߹੒σʔλͷઃఆɼग़Ի 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID Group, Yamaha

    Corporation 94 オーディオ出力データ 70$"-0*% Τϯδϯ acMve よろしくね Unity のオーディオ出力用データに 歌声合成データを設定,出音
  64. 3FBMUJNF߹੒ϦΞϧλΠϜ߹੒ॲཧͷऴྃ 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID Group, Yamaha

    Corporation 95 オーディオ出力データ 70$"-0*% Τϯδϯ inacMve [リアルタイム合成処理の終了]
  65. 3FBMUJNF߹੒ ©2016 VOCALOID Group, Yamaha Corporation 96 0O"VEJP'JMUFS3FBEΛར༻࣮ͨ͠૷ •  0O"VEJP'JMUFS3FBE

    –  ୹͍ΠϯλʔόϧͰݺ͹ΕΔɼΦʔσΟΦϑΟϧλϦϯάΛߦ͏ϝιου –  ༏ΕͨϨΠςϯγ •  ΦʔσΟΦϑΟϧλϦϯάΛ࣮ߦ͢ΔͷͰ͸ͳ͘ɼ௚઀Վ੠߹੒σʔλΛ ॻ͖ࠐΉ
  66. 3FBMUJNF߹੒ϦΞϧλΠϜ߹੒ॲཧͷ։࢝ɾऴྃɼՎࢺઃఆ // リアルタイム合成処理の起動." public void RealtimeStart() {"     YVF.YVFResult result =

    YVF.YVFRealtimeStart();" }" " // 歌詞の設定." public void SetLyrics(string lyrics) {" " // 歌詞設定を行うと,内部で VOCALOID エンジンの再起動がかかる." YVF.YVFResult result = YVF.YVFRealtimeSetLyrics(lyrics, YVF.YVFLang.Japanese);" } " // リアルタイム合成処理の終了." public void RealtimeStop() {" YVF.YVFResult result = YVF.YVFRealtimeStop();" }" " ©2016 VOCALOID Group, Yamaha Corporation 97 3FBMUJNF7PD"VEJPDT
  67. 3FBMUJNF߹੒Վࢺઃఆ 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID Group, Yamaha

    Corporation 98 オーディオ出力データ 70$"-0*% Τϯδϯ acMve [歌詞の設定] よろしくね 今ココ
  68. 3FBMUJNF߹੒Πϕϯτͷ௥Ճɼ֬ఆ // ダイナミクスパラメータ設定,ノートオンを送信. " int dynamics = 32;" int noteNumber

    = 69;" " // イベントの追加." YVF.YVFRealtimeAddMidi(YVF.YVFMIDIEventType.Dynamics, dynamics);" YVF.YVFRealtimeAddMidi(YVF.YVFMIDIEventType.NoteOn, noteNumber);" " // イベントの確定. " YVF.YVFRealtimeCommitMidi();  ©2016 VOCALOID Group, Yamaha Corporation 99 3FBMUJNF7PJDF8BMMDT // ノートオオフを送信. YVF.YVFRealtimeAddMidi(YVF.YVFMIDIEventType.NoteOff, noteNumber);" YVF.YVFRealtimeCommitMidi();  3FBMUJNF#BMM$POUSPMMFSDT
  69. 3FBMUJNF߹੒Πϕϯτͷ௥Ճɼ֬ఆ 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID Group, Yamaha

    Corporation 100 オーディオ出力データ 70$"-0*% Τϯδϯ acMve [イベントの追加,確定] よろしくね e.g. ノートオン 今ココ
  70. 3FBMUJNF߹੒6OJUZͷΦʔσΟΦग़ྗͷ४උ public void AudioStart() {" " // OnAudioFilterRead による音声出力を行うための AudioClip,

    AudioSource." AudioClip clip = AudioClip.Create("VOCALOID", YVF.YVFSamplingRate, 1, YVF.YVFSamplingRate, true);" AudioSource source = gameObject.GetComponent<AudioSource>();" " // ループさせて,止まらないようにする." source.loop = true;" source.clip = clip;" source.Play();" }  ©2016 VOCALOID Group, Yamaha Corporation 101 3FBMUJNF7PD"VEJPDT
  71. 3FBMUJNF߹੒Վ੠߹੒σʔλͷऔಘɼઃఆɼग़Ի void OnAudioFilterRead(float[] data, int channels) {" " // 取得可能な歌声合成データのサンプル数を取得."

    int numBufferdSamples = (int)YVF.YVFRealtimeGetAudioNumData();" if (numBufferdSamples <= 0) {" return;" }" " // 歌声合成データを short[] renderData に書き込む." YVF.YVFRealtimePopAudio(renderData, numBufferdSamples);" " // 歌声合成データを出力用データに書き込む." for (int i = 0; i < numBufferdSamples; ++i) {" float value = renderData[i] / 32768.0f;" int index = i * channels;" for (int j = index; j < index + channels; ++j) {" data[j] = value;" }" }" }  ©2016 VOCALOID Group, Yamaha Corporation 102 3FBMUJNF7PD"VEJPDT
  72. 3FBMUJNF߹੒Վ੠߹੒σʔλͷऔಘ 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID Group, Yamaha

    Corporation 103 オーディオ出力データ 70$"-0*% Τϯδϯ acMve [歌声合成データの取得] よろしくね Վ੠߹੒σʔλTIPSU<> よー 今ココ から 次ページ →
  73. 3FBMUJNF߹੒Վ੠߹੒σʔλͷઃఆɼग़Ի 歌声ライブラリ VOCALOID プラグイン Unity アプリケーション上位層 ©2016 VOCALOID Group, Yamaha

    Corporation 104 オーディオ出力データ 70$"-0*% Τϯδϯ acMve よろしくね Unity のオーディオ出力用データに 歌声合成データを設定,出音 → 前ページ ココ まで