심박수에 맞춰 이미지를 맥동하는 OBS 플러그인 만들기!【플러그인편】
개요
이미지를 일정 기간 확대 및 축소할 수 있는 OBS 플러그인을 만들었습니다.
의 목적
작년에 만든 앱. 친구가 보여주면 더 많이 할 수 있을 것 같다고 해서 OBS 필터로 시행하면 좋을 것 같다고 생각했어요.
어쨌든 느낌이 간단하기 때문에 심장 박동률의 크기에 맞는 필터를 실현하는 것을 목표로 한다.통신부가 늦었기 때문에 이번에는 고정 주파수로 실시했다.
메서드
OBS의 개발 환경을 준비합니다.
사이트 축소판 그림의Build from source를 보면서 환경을 조정한다.비록 여러 군데 빠져있지만 이 블로그는 이해하기 쉽다.
플러그인 프로젝트 만들기
참고플러그인 공식 문서CmakeList를 써서 프로젝트를 제작합니다.나는 그렇게 많은 시간이 없어서 샘플 항목을 덮어썼다.
코드를 쓰다
플러그인 공식 문서만 참고하면 쓰기가 어려워 비슷한 플러그인을 찾았다.
그래서 OBS Scale To Sound의 소리에 따라 그림 크기를 바꿀 수 있는 플러그인을 발견했습니다. 그래서 이걸 보고 쓰기로 했습니다.상세한 내용에 대한 할애(이후 추가적으로 맞지 않음)를 하고 참고 절차의 큰 변경점만 종합한다.
이 플러그인은 원래 그림의 크기를 음량과 비례하게 변경했습니다. 이것은 구조
obs_source_info
에 전달되는 함수에서 실행됩니다.필터 효과를 터치하기 전에 video_render
와obs_enter_graphics
, 종료시obs_source_process_filter_begin
와obs_source_process_filter_end
obs를 호출합니다source_process_filter_end에 전달되는 매개 변수에 의해 결정됩니다.따라서 축소된 사이즈 정보를 매개 변수에 전달하면 축소된 이미지를 확대할 수 있다.다만 확대/축소를 직접 수행하면 이미지의 왼쪽 위 모서리가 확대/축소되므로 확대/축소하는 동안 이미지의 중심을 비스듬히 맞춰 이미지를 비스듬히 이동해야 합니다.확대와 축소, 이동을 동시에 하는 코드는 이미 참고 프로그램에 의해 작성되었는데, 이를 일정 주파수의 정현파로 바꾸어 축소할 수 있다면 목적이 달성될 것이다.나에게 쓴
obs_leave_graphics'を呼びます。実はフィルタから出力される画像のサイズは
의 함수는 다음과 같다.static void hrv_filter_render(void *data, gs_effect_t *effect)
{
int16_t pchRequest[BUFSIZE];
DWORD cbRead;
struct hrv_filter_data *filter = data;
int32_t w = filter->src_w;
uint32_t h = filter->src_h;
DWORD now = GetTickCount();
float duration = (now - filter->last_time) / 1000.0f;
float s = filter->hear_rate * duration / 60;
float _sin = sinf(2 * M_PI * s);
if (s > 1) {
filter->last_time =
now - (DWORD)(duration - 60 / filter->hear_rate);
}
filter->current_scale = fmax(_sin * filter->scale + 1, 0);
obs_enter_graphics();
if (!obs_source_process_filter_begin(filter->context, GS_RGBA,
OBS_ALLOW_DIRECT_RENDERING))
return;
gs_effect_t *move_effect = filter->effect;
gs_eparam_t *move_val =
gs_effect_get_param_by_name(move_effect, "inputPos");
gs_eparam_t *show = gs_effect_get_param_by_name(move_effect, "show");
gs_effect_set_float(show, 1.0f);
/*if (audio_w <= 0 || audio_h <= 0) {
gs_effect_set_float(show, 0.0f);
audio_w = 1;
audio_h = 1;
}*/
//Change the position everytime so it looks like it's scaling from the center
struct vec4 move_vec;
vec4_set(&move_vec, (w - w * filter->current_scale) / 2, (h - h * filter->current_scale) / 2,
0.0f, 0.0f);
gs_effect_set_vec4(move_val, &move_vec);
obs_source_process_filter_end(filter->context, move_effect,
w * filter->current_scale,
h * filter->current_scale);
obs_leave_graphics();
blog(LOG_DEBUG, "w%ld, h%ld, scale%f", w * filter->current_scale,
h * filter->current_scale,
filter->current_scale);
UNUSED_PARAMETER(effect);
}
결실이런 느낌.주기는 60Hz로 고정됩니다.스콜을 바꾸면 진폭에 변화가 생긴다.
향후의 전망
이번에는 심박수 센서와의 제휴가 전혀 안 돼서 필터만 썼어요.나는 가능한 한 빨리 심장 박동 센서와 합작할 계획이다.나는 작년에 제작된 응용 프로그램의 심박수를 플러그인 수신 형식으로 방송하고 싶다.
투고 버튼을 누르는 순간까지 25일이었으나 해시태그가 지정되지 않은 오류로 26일로 되돌아갔다. ↩
Reference
이 문제에 관하여(심박수에 맞춰 이미지를 맥동하는 OBS 플러그인 만들기!【플러그인편】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Eater_WhiteEye/items/7696f02c3338cd2b8ff0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)