obs = obslua source_name = "media" start_time = 0 function start_take(pressed) if not pressed then return end local src = obs.obs_get_source_by_name(source_name) if src ~= nil then start_time = obs.obs_source_media_get_time(src) obs.obs_source_media_play_pause(src, false) obs.obs_source_release(src) end obs.obs_frontend_recording_start() end function accept_take(pressed) if not pressed then return end local src = obs.obs_get_source_by_name(source_name) if src ~= nil then obs.obs_source_media_play_pause(src, true) obs.obs_source_release(src) end obs.obs_frontend_recording_stop() end function reject_take(pressed) if not pressed then return end obs.obs_frontend_recording_stop() local src = obs.obs_get_source_by_name(source_name) if src ~= nil then obs.obs_source_media_set_time(src, start_time) obs.obs_source_media_play_pause(src, true) obs.obs_source_release(src) end end function script_description() return "Talkover Controller\nNative OBS script for simultaneous recording and synced media playback." end function script_properties() local props = obs.obs_properties_create() obs.obs_properties_add_text(props, "source_name", "Media Source Name", obs.OBS_TEXT_DEFAULT) return props end function script_update(settings) source_name = obs.obs_data_get_string(settings, "source_name") end function script_load(settings) htk_start = obs.obs_hotkey_register_frontend("talkover_start", "Talkover: Start Take", start_take) htk_accept = obs.obs_hotkey_register_frontend("talkover_accept", "Talkover: Accept Take", accept_take) htk_reject = obs.obs_hotkey_register_frontend("talkover_reject", "Talkover: Reject & Rewind", reject_take) local a_start = obs.obs_data_get_array(settings, "talkover_start") local a_accept = obs.obs_data_get_array(settings, "talkover_accept") local a_reject = obs.obs_data_get_array(settings, "talkover_reject") obs.obs_hotkey_load(htk_start, a_start) obs.obs_hotkey_load(htk_accept, a_accept) obs.obs_hotkey_load(htk_reject, a_reject) obs.obs_data_array_release(a_start) obs.obs_data_array_release(a_accept) obs.obs_data_array_release(a_reject) end function script_save(settings) local a_start = obs.obs_hotkey_save(htk_start) local a_accept = obs.obs_hotkey_save(htk_accept) local a_reject = obs.obs_hotkey_save(htk_reject) obs.obs_data_set_array(settings, "talkover_start", a_start) obs.obs_data_set_array(settings, "talkover_accept", a_accept) obs.obs_data_set_array(settings, "talkover_reject", a_reject) obs.obs_data_array_release(a_start) obs.obs_data_array_release(a_accept) obs.obs_data_array_release(a_reject) end