2017年05月08日

開発日誌10(Live2D改良)


先日公開した動画の改良版です。
閉じ目と笑顔を描いた目に変更、腕のデフォーマの追加及び手パーツの追加を行いました。
※モーションはイプシロンのものを基にしています。
※BGMは煉獄庭園様のものを使用させていただきましたm(_ _)m
http://www.rengoku-teien.com/  


Posted by 才田一 at 00:41Comments(0)開発日誌

2017年04月21日

開発日誌9(Live2D試作2)


久しぶりの更新です。
前回の記事の試作品で得た知識を基にインターフェース用のキャラを作りました!

※BGMは煉獄庭園様のものを使用させていただきましたm(_ _)m
http://www.rengoku-teien.com  


Posted by 才田一 at 07:35Comments(0)開発日誌

2017年03月26日

開発日誌8(live2d試作)

イラストを動かすことができる、live2dを使いたいと思い、ここ数日勉強しておりました(笑)
試作品として、株式会社ボルテージ様の今話題のアプリ、ダウト~嘘つきオトコは誰?~の間宮さんを動かしてみました。
live2dはすごいですね、2次元の新たな可能性を感じます(*≧∀≦*)
  


Posted by 才田一 at 01:53Comments(0)開発日誌

2017年03月20日

開発日誌7(形態素解析)

文章を発音するにあたり、文章を形態素解析し、発音などの情報を取得する必要があります。
形態素解析とは、平たく言うと文章を最小単位まで分割することです。
例えば、"初めまして、私の名前は才田一です。"という文章の場合、"初めまして | 、 | 私 | の | 名前 | は | 才田 | 一 | です | 。"のように分割されます。

文章を取得→形態素解析→品詞・発音・アクセントなどの情報を取得→発音

以上の流れで発音を制御し、聞き取りやすい発音を目指していきたいと思います。

  


Posted by 才田一 at 19:07Comments(0)

2017年03月16日

開発日誌6(text to speech改良)


少し動作を調整しました。
まだまだ不自然で聞き取りにくいので、改良が必要です(-_-;)
  


Posted by 才田一 at 21:39Comments(0)開発日誌

2017年03月16日

嬉しいニュース

飴音わめあちゃんの作者、あめころもるぢ様よりアプリへの音源使用許可をいただきました(*≧∀≦*)
あめころもるぢ様、本当にありがとうございますm(_ _)m

飴音わめあ(https://t.co/jDzjxEpF9Y)  


Posted by 才田一 at 21:20Comments(0)

2017年03月12日

開発日誌5(色々メモ)

①Web Audio APIのエラー
"SyntaxError: Failed to construct 'AudioContext':
number of hardware contexts reached maximum (6)."
Web Audio APIを触っていると、上記のエラーに遭遇した。
Audio Contextを作成できるのは6回までですよ~
と怒られた(-_-;)
Audio Contextはその都度作成するのではなく、最初に宣言したものを使い回さないといけないようです。

②ファイル名の指定
ファイル名を指定して音声の再生を行うので、文字列(ひらがな)を分割する必要があります。
splitメソッドを使用して、文字列を分割します。
var array = string.split("");
これで、1文字ずつに分割されて配列に格納される。
これだけだと、捨て仮名(ぁぃぅぇぉ等)を含むファイルや、長音記号(ー)に対応できないので、調べる必要があります。
if分を使って調べます。
var convertArray = [];
for(var i = 0; i < array.length; i++){
if(array[i+1]=="ぁ"|| array[i+1]=="ぃ"|| array[i+1]=="ぅ"|| array[i+1]=="ぇ"|| array[i+1]=="ぉ"|| array[i+1]=="ゃ"|| array[i+1]=="ゅ"|| array[i+1]=="ょ"){
convertArray.push(array[i]+array[i+1]);
i++;
}
else if (array[i+1]=="ー"){
convertArray.push(array[i]+array[i+1]);
i++;
}
elese{
convertArray.push(array[i]);
}
};
これで、"ちゃ"などのファイル名を指定できます。
③再生時間の設定
"っ"・"、"・"。"は無音、"ー"は再生時間を通常の2倍にする。
if文とsliceメソッドを使って、判定します。
string.slice(-1);
これで最後の文字列を取得できます。
var playTime = 0;
for(var i = 0; i < convertArray.length; i++){
if(convertArray[i].slice(-1)=="ー"){
playTime = 0.4;
}
elese if(convertArray[i]=="っ"){
playTime = 0.1;
}
elese{
playTime = 0.2;
}
};
  


Posted by 才田一 at 20:40Comments(0)開発日誌

2017年03月10日

開発日誌4(音声の出力3)

AudioはandroidやiOSでつかえないらしいので、Web Audio APIを使用することに(-_-;)

// 音声ファイルの場所
var SOUND_URL = './sound/.wav';

var context = new AudioContext();
var buffer = null;
var source = context.createBufferSource();

var request = new XMLHttpRequest();
request.open('GET', SOUND_URL, true);
request.responseType = 'arraybuffer';
request.send();

request.onload = function () {
  var res = request.response;
  context.decodeAudioData(res, function (buf) {
    source.buffer = buf;
  });
};

source.connect(context.destination);
source.start(0);

このコードで、音が出せるらしい
もっと勉強しなくては…
  


Posted by 才田一 at 23:54Comments(0)開発日誌

2017年03月09日

開発日誌3(音声の出力2)

開発日誌2のAudioを利用して、wavを連続して再生するコードを書きました。

//音声ファイルの場所
var SOUND_PATH = "./sound/";
//ファイル名の配列
var Strings = ["あ","い","う","え","お"];
//再生回数
var PlayedCount = 0;
//音声ファイルのパスの配列
var FullPathArray = [];

//ファイルのFullPathの作成
function MakePath(Path,Strings){
var SoundsPath =[];
//逆に配列に追加(逆に格納する方が速いらしい)
for(i=Strings.length-1;i>=0;i--){
SoundsPath.unshift(Path+Strings[i]);
}
//配列を返す
return SoundsPath;
}

//音声の再生
function SoundPlay(){
FullPath = FullPathArray[PlayedCount];
var audio = new Audio(FullPath + ".wav");
audio.play();
//再生回数がwavファイルの総数以下の場合、ennedイベントを拾う(この際呼び出す関数を自身にすることでループを形成する)
if(PlayedCount audio.addEventListener("ended", SoundPlay, false);
PlayedCount++;
}
//再生回数がwavファイルの総数と同じになったらループを抜けて、再生回数を初期化する
else if(PlayedCount==FullPathArray.length){
PlayedCount=0;
}
}

//動作確認
FullPathArray = MakePath(SOUND_PATH,Strings50);
SoundPlay();

上記のコードを動かすと、"あ"~"お".wavを順番に再生します。
はじめはfor文によるループを考えていましたが、上手くいかなかったため、代替案として作ったコードです。
このコードはきちんと動作するのですが、再生範囲を指定してファイルを再生した場合、endedイベントが拾えず、ループが作れないという問題点を抱えています(-_-;)
  


Posted by 才田一 at 23:11Comments(0)開発日誌

2017年03月08日

開発日誌2(音声の出力)

どのようにして、テキストを音声に変換するのか?
これに関しては、辞書をプログラムに登録し、入力された文字を読む必要があります。
辞書に関しては自作のクラスで対応するつもりですが、音声の出力はHTML5のAudioとフリーのボーカロイドソフト、UTAU(http://utau2008.web.fc2.com/)用の音声を使用させていただきたいと思います。
UTAU用の音源は多く作られているので、それを利用できるようにしておくことで、プログラムの拡張性を高めることができます。

HTML5のAudio
HTML5のAudioを利用すれば、以下の2行のコードで音を出すことができます。

var audio = new Audio(FullPath + ".wav");
audio.play();

audioは変数の名前、FullPathはファイルのある場所です。
UTAU用の音源には"あ"~"ん"の音声+αのwavファイルが入っているので、ディレクトリ+ファイル名で単音を発声できます。
単音を複数つなげて、音声を作っていきます。
  


Posted by 才田一 at 19:45Comments(0)開発日誌