2016 VOCALOID Group, Yamaha Corporation 2

Similar documents
しずおかアプリ部 Unity はじめるよ すごいよサウンド機能 実践編 統合開発環境を内蔵したゲームエンジン いろんな職業の が る資料なので説明を簡単にしてある部分があります 正確には本来の意味と違いますが上記理由のためです ご了承ください この

学校では教えてくれないアセットバンドル

TestDesign for Web

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版   None

アルゴリズムとデータ構造1

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

第33回_プレゼン資料_菅原(~IKを使ってアニメーションをコントロール~)

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

Java演習(4) -- 変数と型 --


ALG ppt

Unite2016Tokyo-yasuhara.key

1_cover

アルゴリズムとデータ構造1

: : : TSTank 2

ALG ppt

untitled

1

基礎計算機演習 実習課題No6

K227 Java 2

...Visual Studio 2015\Projects\MyHomePage 用サンプル \Database(Access2)\Database(Access2)\MainForm.cs 2 れを含めておかないと Database への更新がきかない oadp.fill(dtbl); dgvk

Java講座

10-C.._241_266_.Z

ALG2012-C.ppt

tkk0408nari

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

情報処理Ⅰ

人工知能入門

H:\Projects2013\MatrixLibrary\MatrixLibrary\MatrixLibrary.cs /* ************************ * * * 行列関係のライブラリ * * * ************************ * * 行列の要素 A.V

解きながら学ぶC++入門編

8 if switch for while do while 2

オブジェクト指向プログラミング・同演習 5月21日演習課題

Microsoft Word - NonGenTree.doc

ALG2012-A.ppt

// このクラスの有効期間中の各呼び出しに使用される キャッシュされた Socket オブジェクト Socket socket = null; // 非同期処理が完了したことを通知するために信号を送るオブジェクト static ManualResetEvent clientdone = new Ma

問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 package j1.exam02; import java

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド

Microsoft Word - NonGenList.doc

新・明解Java入門

Javaセキュアコーディングセミナー東京 第2回 数値データの取扱いと入力値の検証 演習解説

Microsoft Word - A05_AndroidプログラミングJUMP_画面800×1280

untitled

とても使いやすい Boost の serialization

デジタル表現論・第4回

2

問題1 以下に示すプログラムは、次の処理をするプログラムである


Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

Android Layout SDK プログラミング マニュアル

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

A, K, Q, J, 10, 9, 8, 7, 6, 5, 4, 3,

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1

mbed_library_study_meeting_v1.0.key

明解Javaによるアルゴリズムとデータ構造

MMC Unity講座

手書認識 グラフ描画 Step2-2 手書認識 : 認識結果を PaintPanel で描画する < 属性付き文字列 AttributedString> 標準出力では分かりにくいうえに認識結果を使えないので 認識するごとに PaintPanel に文字を描画することにする ここで 数式はただの文字列


文字列操作と正規表現

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

Java (7) Lesson = (1) 1 m 3 /s m 2 5 m 2 4 m 2 1 m 3 m 1 m 0.5 m 3 /ms 0.3 m 3 /ms 0.6 m 3 /ms 1 1 3

Quick Sort 計算機アルゴリズム特論 :2017 年度 只木進一

3 Java 3.1 Hello World! Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World");

Windows Layout SDK プログラミング マニュアル

IronPython による柔軟なゲーム開発 筑波大学 AmusementCreators


2 ColorSpace DepthSpace CameraSpace Kinect V2 Kinect V2 BOdyIndex 3. NtKinect Kinect V2 C++ NtKinect [4] NtKinect = Kinect SDK + + STL(C++) + OpenCV +

Microsoft PowerPoint - CproNt02.ppt [互換モード]

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

ALG ppt

mazec テクニカルガイド第5版(Android版)

Microsoft Word - keisankigairon.ch doc

Microsoft PowerPoint ppt

2006年10月5日(木)実施


解きながら学ぶJava入門編

VB.NETコーディング標準

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

橡中元雅美

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

第26回_プレゼン資料_菅原(Unityはじめるよ~NavMesh基礎~)

課題

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

AquesTalk プログラミングガイド

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

ALG2012-F.ppt

2. データ構造ヒープに保存するデータは 番号付けられて保存される 従って リスト L として保存することとする 3. アルゴリズム 3.1. 要素の追加新しい要素の追加は リストの終端に置くことで開始する つまり 最下層の一番右 または新たに最下層を生成してその一番左となる この後 この要素を正し

Prog1_12th

Prog1_3rd

スライド 1

3.2. Unity Unity の画面構成 Unity を起動すると以下の図 1 のような画面が表示される 図 1 Unity のインターフェース Unity の画面は主に以下のように分けられる ① Scene View Game View Scene View には作成するゲーム内

JAVA とテンプレート

JavaプログラミングⅠ

S2DaoでもN:Nできます


Java (5) 1 Lesson 3: x 2 +4x +5 f(x) =x 2 +4x +5 x f(10) x Java , 3.0,..., 10.0, 1.0, 2.0,... flow rate (m**3/s) "flow

cpp1.dvi

CashDrawer ライブラリ API 仕様書 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev / 10

JavaプログラミングⅠ

Transcription:

2016 VOCALOID Group, Yamaha Corporation

2016 VOCALOID Group, Yamaha Corporation 2

2016 VOCALOID Group, Yamaha Corporation 3

#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); } } 2016 VOCALOID Group, Yamaha Corporation 4

enum YVFResult YVFFindResult YVFFind~() YVFNext~() YVF.YVFResult result = YVF.YVFStartup(personal, path); // 結果に応じて必要な処理をする if (result == YVF.YVFResult.Success) { print( 正常終了 ); } else if (result == YVF.YVFResult.InvalidString) { print( 入力文字列が不正 ); // TODO } 2016 VOCALOID Group, Yamaha Corporation 5

App Startup YVFStartup() Playback 合成 Real+me 合成 YVFShutdown() App Shutdown 2016 VOCALOID Group, Yamaha Corporation 6

// VOCALOID エンジンの起動 public void Startup() { if (!initialized) { // Workshop... YVF.YVFResult result = YVF.YVFStartup(personal, Application.streamingAssetsPath + /VOCALOID/DB_ini); print(result); if (result!= YVF.YVFResult.Success) { return; } //...Workshop initialized = true; // Realtime 合成モードに設定する ( バッファサイズ : 512 Samples) // Workshop... YVF.YVFRealtimeSetStaticSetting(YVF.YVFRealtimeMode.Mode512); //...Workshop VAudio.Create(); } } 2016 VOCALOID Group, Yamaha Corporation 7

// VOCALOID エンジンの停止 public void Shutdown() { if (initialized) { VAudio.Delete(); // Workshop... YVF.YVFShutdown(); //...Workshop initialized = false; } } 2016 VOCALOID Group, Yamaha Corporation 8

2016 VOCALOID Group, Yamaha Corporation 9

Unity アプリケーション上位層 オーディオ出力データ VOCALOID プラグイン inac+ve 歌声ライブラリ 2016 VOCALOID Group, Yamaha Corporation 10

Unity アプリケーション上位層 オーディオ出力データ [ リアルタイム合成処理の開始 ] VOCALOID プラグイン ac+ve 歌声ライブラリ 2016 VOCALOID Group, Yamaha Corporation 11

Unity アプリケーション上位層 オーディオ出力データ [ 歌詞の設定 ] VOCALOID プラグイン ac+ve よろしくね 歌声ライブラリ 2016 VOCALOID Group, Yamaha Corporation 12

Unity アプリケーション上位層 オーディオ出力データ VOCALOID プラグイン ac+ve [ イベントの追加, 確定 ] e.g. ノートオン よろしくね 歌声ライブラリ 2016 VOCALOID Group, Yamaha Corporation 13

Unity アプリケーション上位層 オーディオ出力データ よー [ 歌声合成データの取得 ] VOCALOID プラグイン ac+ve よろしくね 歌声ライブラリ 2016 VOCALOID Group, Yamaha Corporation 14

Unity アプリケーション上位層 オーディオ出力データ VOCALOID プラグイン ac+ve Unity のオーディオ出力用データに歌声合成データを設定, 出音 よろしくね 歌声ライブラリ 2016 VOCALOID Group, Yamaha Corporation 15

Unity アプリケーション上位層 オーディオ出力データ [ リアルタイム合成処理の終了 ] VOCALOID プラグイン inac+ve 歌声ライブラリ 2016 VOCALOID Group, Yamaha Corporation 16

2016 VOCALOID Group, Yamaha Corporation 17

public void Create() { // リアルタイム合成処理の起動 ( イベント待ち受けの開始 ) // Workshop... YVF.YVFResult result = YVF.YVFRealtimeStart(); if (result!= YVF.YVFResult.Success) { return; } //...Workshop renderdata = new short[audiosettings.getconfiguration().dspbuffersize * 2]; // OnAudioFilterRead() で値を設定できるように AudioClip を生成,AudioSource を Play AudioClip clip = AudioClip.Create(VOCALOID, YVF.YVFSamplingRate, 1, YVF.YVFSamplingRate, true); AudioSource source = gameobject.getcomponent<audiosource>(); source.loop = true; source.clip = clip; source.play(); } public void Delete() { // リアルタイム合成処理の終了 ( イベント待ち受けの停止 ) YVF.YVFRealtimeStop(); } 2016 VOCALOID Group, Yamaha Corporation 18

// 歌詞の設定 public void SetLyrics(string lyrics) { // Workshop... YVF.YVFRealtimeSetLyrics(lyrics, YVF.YVFLang.Japanese); //...Workshop } 2016 VOCALOID Group, Yamaha Corporation 19

Unity アプリケーション上位層 オーディオ出力データ [ 歌詞の設定 ] VOCALOID プラグイン ac+ve よろしくね 歌声ライブラリ 今ココ 2016 VOCALOID Group, Yamaha Corporation 20

// ノートオン ( 発音開始 ) イベントを VOCALOID エンジンに通知する private void NoteOn(int notenumber) { if (YVF.YVFRealtimeGetSynthState() == YVF.YVFRealtimeSynthState.Running) { // 現在発音しているノートのノートオフ ( 発音停止 ), 新しいノートオン ( 発音開始 ) を追加して確定 (Commit) // Workshop... YVF.YVFRealtimeAddNoteOff(); YVF.YVFRealtimeAddNoteOn(noteNumber); YVF.YVFRealtimeCommitMidi(); //...Workshop if (runningcoroutine!= null) { StopCoroutine(runningCoroutine); } runningcoroutine = StartCoroutine(dynamicsCoroutine()); } } 2016 VOCALOID Group, Yamaha Corporation 21

Unity アプリケーション上位層 オーディオ出力データ VOCALOID プラグイン ac+ve [ イベントの追加, 確定 ] e.g. ノートオン よろしくね 歌声ライブラリ 今ココ 2016 VOCALOID Group, Yamaha Corporation 22

void OnAudioFilterRead(float[] data, int channels) { if (YVF.YVFRealtimeGetSynthState()!= YVF.YVFRealtimeSynthState.Running) { return; } // 合成済み歌声合成データサイズの取得 int numbufferdsamples = (int)yvf.yvfrealtimegetaudionumdata(); if (numbufferdsamples <= 0) { return; } // 合成済み歌声合成データを short[] renderdata に書き込む // Workshop... YVF.YVFRealtimePopAudio(renderData, numbufferdsamples); //...Workshop // 歌声合成データをAudioClipに書き込む for (int i = 0; i < numbufferdsamples; ++i) { float value = renderdata[i] / 32768.0f; // uint16_t (-32768 ~ 32767) float (-1.0 ~ 1.0) int index = i * channels; for (int j = index; j < index + channels; ++j) { data[j] = value; } } } 2016 VOCALOID Group, Yamaha Corporation 23

Unity アプリケーション上位層 オーディオ出力データ よー [ 歌声合成データの取得 ] VOCALOID プラグイン ac+ve よろしくね 歌声ライブラリ 今ココから次ページ 2016 VOCALOID Group, Yamaha Corporation 24

Unity アプリケーション上位層 オーディオ出力データ VOCALOID プラグイン ac+ve Unity のオーディオ出力用データに歌声合成データを設定, 出音 よろしくね 歌声ライブラリ 前ページココまで 2016 VOCALOID Group, Yamaha Corporation 25

void OnTriggerEnter(Collider collision) { if (collision.tag == UnityChanHead) { // ボールが上向きの速度をもっている場合には衝突判定を無視する if (GetComponent<Rigidbody>().velocity.y > 0) { return; } // ドレミファソラシドの高さで順番に歌う int notenumber = middlec + majorscale[noteindex++]; if (noteindex >= majorscale.length) { noteindex = 0; } // 続く.. 2016 VOCALOID Group, Yamaha Corporation 26

//.. 続き OnTriggerEnter // ヘディングしたときのボールの高さが一定値以上のときに成功とする if (transform.position.y > threshold) { mistaken = 0; bound(); } else { ++mistaken; // 失敗したら音を外す // Workshop... int rnd = Random.Range(1, 4); rnd = (Random.Range(0, 2) == 0)? rnd : -rnd; notenumber += rnd; //...Workshop // 続く.. 2016 VOCALOID Group, Yamaha Corporation 27

} //.. 続き OnTriggerEnter if (mistaken <= excuse) { bound(); } else { // 失敗が連続した場合は, ボールにx 軸方向の力をかけ床に落とし終了とする GetComponent<Rigidbody>().AddForce(5, 0, 0, ForceMode.VelocityChange); } } NoteOn(noteNumber); } else if (collision.tag == Field) { // 床に落ちたら終了 NoteOff(); VDirector.Deactivate(); } 2016 VOCALOID Group, Yamaha Corporation 28

2016 VOCALOID Group, Yamaha Corporation