vpvp-vpd

MikuMikuDance Vocaloid-Pose-Data(.vpd) Parser

Usage no npm install needed!

<script type="module">
  import vpvpVpd from 'https://cdn.skypack.dev/vpvp-vpd';
</script>

README

VpvpVpd NPM version Build Status Coverage Status

Sauce Test Status

MikuMikuDance Vocaloid-Pose-Data(.vpd) Parser

インストール

$ npm install vpvp-vpd --save

API

vpd.parse(buffer) -> {header,bones}

MikuMikuDanceの「ポーズデータ保存」で生成したSHIFT_JIS.vmdファイルをUTF-8に変換して、オブジェクトを返します。

// Dependencies
var vpd= require('vpvp-vpd');
var fs= require('fs');

// Main
var vpdFile= fs.readFileSync('./pose.vpd');
var data= vpd.parse(vpdFile);
console.log(data);
// {
//   "header": [
//     "VocaloidPoseDatafile",
//     "初音ミク七葉HT.osm;//親ファイル名",
//     "139;//総ポーズボーン数"
//   ],
//   "bones": [
//     {
//       "id": "Bone0",
//       "name": "センター",
//       "position": [ 0.939673, -1.35, 0.129938 ],
//       "quaternion": [ 0, 0, 0, 1]
//     },
//     {
//       "id": "Bone1",
//       "name": "グルーブ",
//       "position": [ 0, 0, 0 ],
//       "quaternion": [ 0, 0, 0, 1 ]
//     },
//     // more 137 bones...
//   ]
// };

vpd.mangle({header,bones}) -> chunks

座標の変更が必要なボーンの情報だけを配列で返します。

// Dependencies
var vpd= require('vpvp-vpd');
var fs= require('fs');

// Main
var vpdFile= fs.readFileSync('./pose.vpd');
var chunks= vpd.mangle(vpd.parse(vpdFile));
console.log(chunks);

// ['センター', 0.939673, -1.35, 0.129938, 0, 0, 0, 1, '上半身', ...]

pakoなどの圧縮ライブラリを使用してbase64に変換すれば、2000文字未満に収めることも可能です。これは、webアプリケーションでデータを公開する場合に有用です。

vpd.restore(chunks) -> bones

配列をオブジェクトに戻します。

// Dependencies
var vpd= require('vpvp-vpd');
var fs= require('fs');

// Main
var vpdFile= fs.readFileSync('./pose.vpd');
var bones= vpd.restore(vpd.mangle(vpd.parse(vpdFile)));
console.log(bones);

// [
//   {
//     name: 'センター',
//     position: [ 0.939673, -1.35, 0.129938 ],
//     quaternion: [ 0, 0, 0, 1 ],
//   },
//   ...,
// ]

Related projects

License

MIT