0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

年末カウントダウンのVJ用にSyphon出力する時計を作った

Last updated at Posted at 2022-12-18

IMG_0971.JPG
openFrameworksを使って、こんな感じでSyphonで映像出力する時計を作った
その作り方を記す

画面はこんな感じ
スクリーンショット 2023-12-25 21.20.56.png

空のプロジェクトを生成

openFrameworksでofxGuiとofxSyphonを適用してプロジェクトを生成する
プロジェクト名はclockSyphonとした
詳しくは下記参考リンクを参照
スクリーンショット 2023-12-25 22.19.01.png

するとopenFrameworks/apps/myApps配下にclockSyphonプロジェクト一式が生成される
スクリーンショッ.png

適当なフリーフォントをダウンロードして先ほど生成したプロジェクトの
openFrameworks/apps/myApps/clockSyphon/bin/data配下に置く

スクリーンショット 2023-12-25 22.14.07.png

フリーフォントはLatoがおすすめ

コーディング

コーディングする
まだまだ荒削りだが晒す

main.cpp
int main( ){

	//Use ofGLFWWindowSettings for more options like multi-monitor fullscreen
	ofGLWindowSettings settings;

    //解像度を16:9に変更
	settings.setSize(960, 540);
 
	settings.windowMode = OF_WINDOW; //can also be OF_FULLSCREEN

	auto window = ofCreateWindow(settings);

	ofRunApp(window, make_shared<ofApp>());
	ofRunMainLoop();

}

ofApp.cpp
// https://yoppa.org/ma2_10/1739.html マウスドラッグ、マウスボタンプレス
// https://forum.openframeworks.cc/t/ofxcolorpicker-missing-argument-list/35497 GUI ColorPicker
// https://www.ei.tohoku.ac.jp/xkozima/lab/ofTutorial4.html 文字の縁どり

#include "ofApp.h"

//--------------------------------------------------------------
void ofApp::setup(){
    ofSetFrameRate(24);
    output.setName("Main");
    
    //バックグランドを透明色に設定
    ofBackground(0, 0);
    
    // https://forum.openframeworks.cc/t/set-window-title/6470/3 ウィンドウにタイトルを表示
    ofSetWindowTitle("clockSyphon");

    // Fonts
    ofTrueTypeFont::setGlobalDpi(72);
    
    fontText.load("Lato-Regular.ttf", 50); // フォントのデータを指定する
    fontText.setLineHeight(24);       // 行間を指定する
    fontText.setLetterSpacing(1.0);   // 文字間を指定する
    
    // GUI
    gui.setup();
    gui.add(slider.setup("slider", 50, 0, 255));
    gui.add(color.set("color", ofColor(255, 255, 0)));
}

//--------------------------------------------------------------
void ofApp::update(){
    //現在時刻の取得
    int s = ofGetSeconds();
    int m = ofGetMinutes();
    int h = ofGetHours();
    int d = ofGetDay();
    int month = ofGetMonth();
    int y = ofGetYear();
    
    //文字で表示する
    ofSetColor(255, 255, 255);
    dateTime = ofToString(y, 0) + "/" + ofToString(month, 0) + "/" + ofToString(d, 0) + "  " + ofToString(h, 0) + ":" + paddingNumberToString(m) + ":" + paddingNumberToString(s);
}

//--------------------------------------------------------------
void ofApp::draw(){
    
    ofSetColor(50, 50, 50);
    for (int y = -3; y < 3; y++) {
        for (int x = -3; x < 3; x++) {
            fontText.drawString(dateTime,
                            px + x, py + y );
        }
    }
    ofSetColor(color);
    fontText.drawString(dateTime, px, py);

    //ここで送信している
    output.publishScreen();
    
    gui.draw();
}

//--------------------------------------------------------------
void ofApp::exit(){

}

//--------------------------------------------------------------
void ofApp::keyPressed(int key){
    
}

//--------------------------------------------------------------
void ofApp::keyReleased(int key){

}

//--------------------------------------------------------------
void ofApp::mouseMoved(int x, int y ){

}

//--------------------------------------------------------------
void ofApp::mouseDragged(int x, int y, int button){
    px = x;
    py = y;
}

//--------------------------------------------------------------
void ofApp::mousePressed(int x, int y, int button){
    px = x;
    py = y;
}

//--------------------------------------------------------------
void ofApp::mouseReleased(int x, int y, int button){

}

//--------------------------------------------------------------
void ofApp::mouseScrolled(int x, int y, float scrollX, float scrollY){

}

//--------------------------------------------------------------
void ofApp::mouseEntered(int x, int y){

}

//--------------------------------------------------------------
void ofApp::mouseExited(int x, int y){

}

//--------------------------------------------------------------
void ofApp::windowResized(int w, int h){

}

//--------------------------------------------------------------
void ofApp::gotMessage(ofMessage msg){

}

//--------------------------------------------------------------
void ofApp::dragEvent(ofDragInfo dragInfo){ 

}

string ofApp::paddingNumberToString(int i){
    switch (i) {
        case 0:
            return "00";
        case 1:
            return "01";
        case 2:
            return "02";
        case 3:
            return "03";
        case 4:
            return "04";
        case 5:
            return "05";
        case 6:
            return "06";
        case 7:
            return "07";
        case 8:
            return "08";
        case 9:
            return "09";
        default:
            return ofToString(i, 0);
    }
}

ofApp.h
#pragma once

#include "ofMain.h"
#include "ofxSyphon.h"
#include "ofxGui.h"

class ofApp : public ofBaseApp{

	public:
		void setup() override;
		void update() override;
		void draw() override;
		void exit() override;

		void keyPressed(int key) override;
		void keyReleased(int key) override;
		void mouseMoved(int x, int y ) override;
		void mouseDragged(int x, int y, int button) override;
		void mousePressed(int x, int y, int button) override;
		void mouseReleased(int x, int y, int button) override;
		void mouseScrolled(int x, int y, float scrollX, float scrollY) override;
		void mouseEntered(int x, int y) override;
		void mouseExited(int x, int y) override;
		void windowResized(int w, int h) override;
		void dragEvent(ofDragInfo dragInfo) override;
		void gotMessage(ofMessage msg) override;

    string paddingNumberToString(int i);
    
    ofxSyphonServer output;
    ofTrueTypeFont fontText;
    string dateTime;
    int px = 100;
    int py = 100;
    
    ofxIntSlider slider;
    ofParameter<ofColor> color; //カラーピッカー
    ofxPanel gui;
};

アプリをビルド&実行

アプリをビルド&実行する

スクリーンショット 2023-12-31 13.39.40.png

VDMXでSyphon映像を受信する

右クリックでAdd clips from Built-in Sources->syphon->oFアプリを選択
スクリーンショット 2023-12-25 22.06.44.png

これ非常に重要!
表示したSyphonレイヤーのComposition ModeをOpenGL- Overに変更する
スクリーンショット 2023-12-25 22.07.38.png

参考リンク

マウスドラッグ、マウスボタンプレス

ofxGUI ColorPicker

文字の縁どり

openFrameworksとSyphon

ソースコード

MadMapperで映す

Syphon > VDXM5をクリックする
スクリーンショット 2023-12-30 18.37.17.png

Modul8で映す

Syphonをクリックする
スクリーンショット 2024-01-02 19.03.50.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?