Git Product home page Git Product logo

vmc-mixer's Introduction

日本語版はこちら

vmc-mixer

Mix several VMCP compatible streams into one stream. Useful if you want to use number of tools to control one VRM model.

<iframe width=”560” height=”315” src=”https://www.youtube-nocookie.com/embed/d_qsC2fl_Wo” title=”YouTube video player” frameborder=”0” allow=”accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture” allowfullscreen></iframe>

Usage

There’re two version of UI.

1. Get vmc-mixer binary

You can get binary from releases page for each release, or you can build it by yourself:

git clone https://github.com/Cj-bc/vmc-mixer
cd vmc-mixer
stack build

2. Launch your Marionettes and performers

launch your VMC marionette (which receives motion data) and performers (which sends motion information by VMCP message). Please launch them with different port number specified.

In case you use: TUI (Terminal User Interface)

TUI version have interactive user interface on terminal.

1. Launch vmc-mixer-tui

In this repository root, launch vmc-mixer-tui by stack run vmc-mixer-tui <MARIONETTE_ADDRESS>. It should compile vmc-mixer-tui and opens TUI.

2. Add input addresses

Focus on new address editor by pressing tab key, and type new performer address that you want vmc-mixer to receive VMCP message from.

The performer is simply port number.

For example, if you want to recieve packets from port 3305, You simply type 3305.

3. Done! it should be working

It should be working right now. If it doesn’t, please check your firewall settings first. Those ports might be blocked.

In case you use: CLI (Command Line user Interface)

CLI version doesn’t have interactive interface at all. It uses command line options (and config files in the future) instead.

In this repository root, launch vmc-mixer-cli by stack run vmc-mixer-cli -- <OPTIONS>.

Command line options

You should specify input/output addresses via command line option.

Usage: vmc-mixer-cli [-p|--performer ARG] marionette

For example, if you want to recieve packets from port 39540 and port 39541, send to 192.168.10.10 port 39540, You can do:

vmc-mixer-cli -i 39540 -i 39541 192.168.10.10:39540

UI keybind

Current UI have two widgets.

General keybinds

There are some keybindings that is active in any state.

Keyaction
Tabfocus on next widget

Input Connection list

The widget above is input connection list. It shows all input addresses available.

Keyaction
-Remove selected connection
Up arrowselect above
Down arrowselect below

New address editor

The widget at bottom is new address editor. You can use this to insert new address.

Keyaction
Enterconfirm the address

vmc-mixer's People

Contributors

cj-bc avatar

Watchers

 avatar

vmc-mixer's Issues

Backendがログを吐けるようにする

現状、backend側で何が起きてるのかわからない為にバグの原因がわからない、ということがよく起こっている。
これはつらいので、そもそもログを出せるようにしてほしい。

用語を整理する

異なる概念・オブジェクトに対し似たような名前が使われており、わかりづらいので整理したい

対象となる概念・オブジェクト

VMCMessageを送信してくるプログラムのPort番号とHostNameのペア Performer
VMCMessageを送信する先のプログラムのPort番号とHostNameのペア Marionette

既に定義されている呼称

ライブラリの都合などで使われているもの

Input pipes-concurrency のMailboxの入口として定義
Output pipes-concurrency のMailboxの出口として定義
Socket Network用語
VMCMessage VMCPに基づいたOCSメッセージ

Filterの指定方式について

現在は全ての入力を素直に混ぜて吐き出しているので、二つのSocketから同じVMCPメッセージが来ていた場合、交互等で出力されてバグッたようになってしまう。
なので、何かしら対策をする必要がある。

現状存在する案

メッセージ毎に一つのSocketを割り当てる

それぞれのVMCPメッセージについて、一つのSocketから来た値のみを使用する。
例えば RootTransform はAから来たもの、 VRMBlendShapeProxyValue はBから来たもののみを使う、など。
configは例えばこんな感じ

inputs:
  - name: Waidayo
    port: 39541
  - name: sendForever
    port: 39542

filter:
  RootTransform: sendForever
  VRMBlendShapeProxyValue.all: Waidayo

各Socket毎に使用するメッセージ種別を指定する

それぞれのSocketについて、そこから来るメッセージのうち特定の種類のもののみを使用するように設定する。
例えば、AはRootTransform のみ、 Bは VRMBlendShapeProxyValue のみ、など。

Configはこんな感じ

inputs:
  - name: Waidayo
    port: 39541
    use:
      - VRMBlendShapeProxyValue: all
  - name: sendForever
    port: 39542
    use:
      - RootTransform

優先順位をつける

それぞれのVMCPメッセージについて、受け取るSocketの優先順位を設定する。
書いておいてなんだけど、実装面倒そうだしよくわからないのであまりやりたくない。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.