Skip to content

Commit 0d93ef2

Browse files
committed
归档
1 parent 94cf3f2 commit 0d93ef2

File tree

11 files changed

+279
-258
lines changed

11 files changed

+279
-258
lines changed

src/zh-hant/audio.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# 匯入模組 obspython
2+
import obspython as obs
3+
4+
def test(props, prop):
5+
audio = obs.obs_get_source_by_name('MIC')
6+
obs.script_log(obs.LOG_INFO, f"obs_source_get_volume {obs.obs_source_get_volume(audio)}")
7+
obs.script_log(obs.LOG_INFO, f"obs_source_muted {obs.obs_source_muted(audio)}")
8+
obs.script_log(obs.LOG_INFO, f"obs_source_get_balance_value {obs.obs_source_get_balance_value(audio)}")
9+
obs.script_log(obs.LOG_INFO, f"obs_source_get_sync_offset {obs.obs_source_get_sync_offset(audio)}")
10+
obs.script_log(obs.LOG_INFO, f"obs_source_get_audio_mixers {obs.obs_source_get_audio_mixers(audio)}")
11+
obs.script_log(obs.LOG_INFO, f"obs_source_get_monitoring_type {obs.obs_source_get_monitoring_type(audio)}")
12+
obs.obs_source_set_volume(audio, 1)
13+
obs.obs_source_set_audio_mixers(audio, (1<<0)|(1<<5))
14+
15+
# 為腳本新增一個用於測試的按鈕,回呼函式為 test
16+
def script_properties():
17+
props = obs.obs_properties_create()
18+
obs.obs_properties_add_button(props, 'test', '測試', test)
19+
return props

src/zh-hant/audio_and_video.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# 匯入模組 obspython
2+
import obspython as obs
3+
4+
def test(props, prop):
5+
# 取得名稱為 OS 的擷取音訊輸入
6+
audio = obs.obs_get_source_by_name('OS')
7+
# 將擷取音訊輸入的音量設定為 0.5
8+
obs.obs_source_set_volume(audio, 0.5)
9+
10+
# 如果擷取音訊輸入處於靜音狀態,則取消該狀態
11+
if obs.obs_source_muted(audio):
12+
obs.obs_source_set_muted(audio, False)
13+
14+
# 關閉對擷取音訊輸入的監測
15+
obs.obs_source_set_monitoring_type(audio, obs.OBS_MONITORING_TYPE_NONE)
16+
17+
# 如果擷取音訊輸入沒有輸出至第 1 條音軌,則新增
18+
mixers = obs.obs_source_get_audio_mixers(audio)
19+
if mixers & (1 << 0) != 1:
20+
obs.obs_source_set_audio_mixers(audio, mixers | (1 << 0))
21+
22+
# 啟用擷取音訊輸入的按住靜音,並設定延遲時間
23+
obs.obs_source_enable_push_to_mute(audio, True)
24+
obs.obs_source_set_push_to_mute_delay(audio, 2000)
25+
26+
# 釋放來源物件
27+
obs.obs_source_release(audio)
28+
29+
# 取得名稱為 Media 的媒體來源
30+
media = obs.obs_get_source_by_name('Media')
31+
# 取得持續時間和當前時間,並計算播放進度
32+
duration = obs.obs_source_media_get_duration(media)
33+
time = obs.obs_source_media_get_time(media)
34+
obs.script_log(obs.LOG_INFO, f"Media 播放進度 {int(time * 100 / duration)}%")
35+
36+
# 切換媒體來源的各種狀態
37+
state = obs.obs_source_media_get_state(media)
38+
if state == obs.OBS_MEDIA_STATE_PLAYING:
39+
obs.obs_source_media_play_pause(media, True)
40+
elif state == obs.OBS_MEDIA_STATE_PAUSED:
41+
obs.obs_source_media_play_pause(media, False)
42+
elif state == obs.OBS_MEDIA_STATE_STOPPED or state == obs.OBS_MEDIA_STATE_ENDED:
43+
obs.obs_source_media_restart(media)
44+
45+
# 釋放來源物件
46+
obs.obs_source_release(media)
47+
48+
# 為腳本新增一個用於測試的按鈕,回呼函式為 test
49+
def script_properties():
50+
props = obs.obs_properties_create()
51+
obs.obs_properties_add_button(props, 'test', '測試', test)
52+
return props

src/zh-hant/properties.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,9 @@ def script_properties():
103103

104104
# 新增一個核取方塊,用於控製是否在腳本載入後執行任務
105105
obs.obs_properties_add_bool(props, 'auto', '在啟動時執行任務?')
106-
# 新增一個小數滑桿,用於表示延遲執行任務的時間
107-
obs.obs_properties_add_float_slider(props, 'seconds', '延遲秒數', 1, 10, 0.5)
106+
# 新增一個小數滑桿,用於表示延遲執行任務的時間,尾碼為字串 '秒'
107+
delay = obs.obs_properties_add_float_slider(props, 'delay', '延遲秒數', 1, 10, 0.5)
108+
obs.obs_property_float_set_suffix(delay, '秒')
108109
# 新增一個文字方塊,用於表示需要傳送的訊息
109110
obs.obs_properties_add_text(props, 'message', '訊息:', obs.OBS_TEXT_MULTILINE)
110111
# 新增一個按鈕,用於再次執行 task 函式
@@ -158,7 +159,7 @@ def script_update(settings):
158159
def script_defaults(settings):
159160
# 設定控製項的預設值
160161
obs.obs_data_set_default_bool(settings, 'auto', True)
161-
obs.obs_data_set_default_double(settings, 'seconds', 1.5)
162+
obs.obs_data_set_default_double(settings, 'delay', 1.5)
162163

163164

164165
# 變數 current_settings 用於表示腳本設定
@@ -189,6 +190,6 @@ def script_load(settings):
189190
obs.script_log(obs.LOG_INFO, f'在啟動時執行任務(是的)')
190191

191192
# 新增執行任務的計時器,時間間隔為滑桿表示的秒數
192-
seconds = obs.obs_data_get_double(settings, 'seconds')
193+
seconds = obs.obs_data_get_double(settings, 'delay')
193194
obs.script_log(obs.LOG_INFO, f'請等待大約 {seconds} 秒')
194195
obs.timer_add(task, int(seconds * 1000))

src/zh-hant/scenes.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# 匯入模組 obspython
2+
import obspython as obs
3+
4+
def test(props, prop):
5+
# 建立一個名稱為 sub_scene 的私用場景
6+
scene_sub = obs.obs_scene_create_private('scene_sub')
7+
# 取得場景 Scene 對應的場景物件
8+
source_scene = obs.obs_get_source_by_name('Scene')
9+
scene = obs.obs_scene_from_source(source_scene)
10+
# 將私用場景 sub_scene 新增至場景 Scene
11+
obs.obs_scene_add(scene, obs.obs_scene_get_source(scene_sub))
12+
13+
# 建立一個文字(GDI+)來源
14+
settings = obs.obs_data_create_from_json('{"text":"新訊息"}')
15+
source_text = obs.obs_source_create_private('text_gdiplus_v2', 'message', settings)
16+
# 將文字(GDI+)新增至場景 scene_sub
17+
obs.obs_scene_add(scene_sub, source_text)
18+
19+
# 釋放來源物件和來源設定物件
20+
obs.obs_source_release(source_text)
21+
obs.obs_data_release(settings)
22+
23+
# 兩次尋找場景項 Welcome,第二次包括群組
24+
welcome = obs.obs_scene_find_source(scene, 'Welcome')
25+
obs.script_log(obs.LOG_INFO, f"找到了 Welcome?{welcome != None}")
26+
welcome = obs.obs_scene_find_source_recursive(scene, 'Welcome')
27+
obs.script_log(obs.LOG_INFO, f"找到了 Welcome(包括群組中的)?{welcome != None}")
28+
29+
# 釋放場景物件和來源物件
30+
obs.obs_source_release(source_scene)
31+
obs.obs_scene_release(scene_sub)
32+
33+
# 將場景 Scene 複製為場景 Game,如果場景 Game 不存在
34+
source_game = obs.obs_get_source_by_name('Game')
35+
if not source_game:
36+
scene_game = obs.obs_scene_duplicate(scene, 'Game', obs.OBS_SCENE_DUP_REFS)
37+
# 釋放場景物件
38+
obs.obs_scene_release(scene_game)
39+
else:
40+
# 釋放來源物件
41+
obs.obs_source_release(source_game)
42+
43+
# 在移除場景 World 之後,嘗試移除不再使用的其他來源
44+
source_world = obs.obs_get_source_by_name('World')
45+
scene_world = obs.obs_scene_from_source(source_world)
46+
obs.obs_source_remove(source_world)
47+
obs.obs_scene_prune_sources(scene_world)
48+
obs.obs_source_release(source_world)
49+
50+
# 為腳本新增一個用於測試的按鈕,回呼函式為 test
51+
def script_properties():
52+
props = obs.obs_properties_create()
53+
obs.obs_properties_add_button(props, 'test', '測試', test)
54+
return props

src/zh-hant/sources.py

Lines changed: 2 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
import obspython as obs
33

44
def test(props, prop):
5-
# 建立一個名稱為 my_text 的文字(GDI+)來源,並將字串 "今天天氣不錯!" 設定為文字
5+
# 建立一個名稱為 my_text 的私用文字(GDI+)來源,並將字串 "今天天氣不錯!" 設定為文字
66
settings = obs.obs_data_create_from_json('{"text":"今天天氣不錯!"}')
7-
source_text = obs.obs_source_create('text_gdiplus', 'my_text', settings, None)
7+
source_text = obs.obs_source_create_private('text_gdiplus', 'my_text', settings)
88

99
# 將文字(GDI+)來源,新增至名為 Scene 的場景
1010
source_scene = obs.obs_get_source_by_name('Scene')
@@ -75,126 +75,3 @@ def script_properties():
7575
props = obs.obs_properties_create()
7676
obs.obs_properties_add_button(props, 'test', '測試', test)
7777
return props
78-
79-
80-
# def script_update(settings):
81-
# # 複製名稱為 Welcome 的來源,並指定新名稱 Bye
82-
# welcome = obs.obs_get_source_by_name('Welcome')
83-
# bye = obs.obs_source_duplicate(welcome, 'Bye', False)
84-
85-
# # 通過 Welcome 的來源設定物件,修改其對應的文字
86-
# settings = obs.obs_source_get_settings(welcome)
87-
# obs.obs_data_set_string(settings, 'text', '你好,歡迎!')
88-
# obs.obs_source_update(welcome, settings)
89-
# # 釋放來源設定物件
90-
# obs.obs_data_release(settings)
91-
92-
# obs.script_log(obs.LOG_INFO, f"{obs.obs_source_get_width(welcome)} {obs.obs_source_get_width(welcome)}")
93-
94-
# # 釋放來源 Welcome 和 Bye
95-
# obs.obs_source_release(welcome)
96-
# obs.obs_source_release(bye)
97-
98-
# obs.script_log(obs.LOG_INFO, f"{obs.obs_source_get_display_name('text_gdiplus')}")
99-
# obs.script_log(obs.LOG_INFO, f"{obs.obs_source_get_display_name('color_filter')}")
100-
101-
# o = obs.obs_source_create_private("text_gdiplus", "my_test", None)
102-
# obs.script_log(obs.LOG_INFO, f" my_test {obs.obs_source_is_hidden(o)}")
103-
# obs.script_log(obs.LOG_INFO, f"{obs.obs_source_get_name(o)} {obs.obs_source_removed(o)}")
104-
# obs.obs_source_release(o)
105-
# o2 = obs.obs_source_create("text_gdiplus", "my_test", None, None)
106-
# obs.script_log(obs.LOG_INFO, f"{obs.obs_source_get_name(o2)}")
107-
108-
# o = obs.obs_get_source_by_name('圖片')
109-
# if o:
110-
# # obs.script_log(obs.LOG_INFO, f"{obs.obs_get_source_by_name('圖片')}")
111-
# o1 = obs.obs_source_duplicate(o, 'None', False)
112-
# obs.obs_source_release(o)
113-
# obs.obs_source_release(o1)
114-
115-
# v = obs.obs_source_is_hidden(o)
116-
# obs.obs_source_set_hidden(o, True)
117-
# obs.script_log(obs.LOG_INFO, f"hidden {v}")
118-
119-
# o = obs.obs_get_source_by_name('場景 2 2')
120-
# # o1 = obs.obs_get_source_by_name('Welcome')
121-
# if o:
122-
# # # obs.obs_source_remove(o)
123-
# # # obs.script_log(obs.LOG_INFO, f"{obs.obs_source_removed(o1)}")
124-
# # # obs.obs_source_release(o)
125-
# # abc = obs.obs_source_get_id(o)
126-
# # obs.script_log(obs.LOG_INFO, f"{obs.obs_source_get_output_flags(o)}x{abc}x{obs.obs_get_source_output_flags(abc)}")
127-
# # obs.script_log(obs.LOG_INFO, f"{obs.OBS_SOURCE_TYPE_INPUT}x{obs.OBS_SOURCE_TYPE_FILTER}x{obs.OBS_SOURCE_TYPE_TRANSITION}x{obs.OBS_SOURCE_TYPE_SCENE}")
128-
# # # obs.obs_source_set_name(o, '場景 2')
129-
# s = obs.obs_source_get_settings(o)
130-
# json = obs.obs_data_get_json(s)
131-
# obs.script_log(obs.LOG_INFO, f"{json}")
132-
# obs.script_log(obs.LOG_INFO, f"{obs.obs_data_get_string(s, 'text')}")
133-
134-
# obs.obs_data_set_string(s, 'text', '你好哦!')
135-
# obs.obs_source_update(o, s)
136-
# obs.obs_data_release(s)
137-
# obs.obs_data_release(s)
138-
# obs.script_log(obs.LOG_INFO, f"text re={obs.obs_data_get_string(s, 'text')}")
139-
# obs.obs_source_release(o)
140-
141-
# o = obs.obs_get_source_by_name('場景 2 2')
142-
# # o1 = obs.obs_get_source_by_name('Welcome')
143-
# if o:
144-
# obs.script_log(obs.LOG_INFO, f"{obs.obs_source_showing(o)}")
145-
# obs.obs_source_dec_showing(o)
146-
# obs.obs_source_set_enabled(o, True)
147-
# obs.script_log(obs.LOG_INFO, f"{obs.obs_source_showing(o)}")
148-
# obs.obs_source_release(o)
149-
150-
# d4 = obs.obs_get_source_defaults('text_gdiplus')
151-
# obs.obs_data_release(d4)
152-
# obs.obs_data_release(d4)
153-
# d4 = obs.obs_get_source_defaults('text_gdiplus')
154-
# obs.script_log(obs.LOG_INFO, obs.obs_data_get_string(d4, 'align'))
155-
156-
# d = obs.obs_data_create()
157-
158-
# do = obs.obs_data_array_create()
159-
160-
# obs.obs_data_set_default_array(d, "player", do)
161-
162-
# i = obs.obs_data_create()
163-
# obs.obs_data_array_push_back(do, i)
164-
# obs.obs_data_release(i)
165-
# obs.obs_data_array_release(do)
166-
167-
# do = obs.obs_data_get_default_array(d, "player")
168-
# # do = obs.obs_data_get_default_array(d, "player")
169-
# obs.script_log(obs.LOG_INFO, f"count def={obs.obs_data_array_count(do)}")
170-
# obs.obs_data_array_release(do)
171-
# # obs.obs_data_array_release(do)
172-
# do = obs.obs_data_get_default_array(d, "player")
173-
# obs.script_log(obs.LOG_INFO, f"count released def={obs.obs_data_array_count(do)}")
174-
175-
# de = obs.obs_data_get_defaults(d)
176-
177-
# obs.script_log(obs.LOG_INFO, f"name def={obs.obs_data_get_string(de, 'name')}")
178-
# obs.script_log(obs.LOG_INFO, f"age def={obs.obs_data_get_string(de, 'age')}")
179-
180-
# # obs.obs_data_release(de)
181-
# obs.obs_data_release(d)
182-
183-
# obs.script_log(obs.LOG_INFO, f"name def={obs.obs_data_get_string(d, 'name')}")
184-
# obs.script_log(obs.LOG_INFO, f"age def={obs.obs_data_get_string(d, 'age')}")
185-
186-
# def call(p, c, pa):
187-
# pass
188-
189-
# o = obs.obs_get_source_by_name('場景 2 2')
190-
# # o1 = obs.obs_get_source_by_name('Welcome')
191-
# if o:
192-
# obs.script_log(obs.LOG_INFO, f"{obs.obs_source_showing(o)}")
193-
# # c = obs.obs_source_create("color_key_filter", "my_test111", None, None)
194-
# # obs.obs_source_add_active_child(o, c)
195-
# # obs.obs_source_release(c)
196-
# props = obs.obs_source_properties(o)
197-
# p = obs.obs_properties_first(props)
198-
# obs.obs_property_set_enabled(p, False)
199-
# obs.obs_source_update_properties(o)
200-
# obs.obs_source_release(o)

src/zh-hant/video.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# 匯入模組 obspython
2+
import obspython as obs
3+
4+
def test(props, prop):
5+
audio = obs.obs_get_source_by_name('A')
6+
obs.script_log(obs.LOG_INFO, f"obs_source_get_volume {obs.obs_source_get_volume(audio)}")
7+
obs.script_log(obs.LOG_INFO, f"obs_source_muted {obs.obs_source_muted(audio)}")
8+
obs.script_log(obs.LOG_INFO, f"obs_source_get_balance_value {obs.obs_source_get_balance_value(audio)}")
9+
obs.script_log(obs.LOG_INFO, f"obs_source_get_sync_offset {obs.obs_source_get_sync_offset(audio)}")
10+
obs.script_log(obs.LOG_INFO, f"obs_source_get_audio_mixers {obs.obs_source_get_audio_mixers(audio)}")
11+
obs.script_log(obs.LOG_INFO, f"obs_source_get_monitoring_type {obs.obs_source_get_monitoring_type(audio)}")
12+
13+
# 為腳本新增一個用於測試的按鈕,回呼函式為 test
14+
def script_properties():
15+
props = obs.obs_properties_create()
16+
obs.obs_properties_add_button(props, 'test', '測試', test)
17+
return props

src/zh/audio_and_video.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# 导入模块 obspython
2+
import obspython as obs
3+
4+
def test(props, prop):
5+
# 获取名称为 OS 的音频输入采集
6+
audio = obs.obs_get_source_by_name('OS')
7+
# 将音频输入采集的音量设置为 0.5
8+
obs.obs_source_set_volume(audio, 0.5)
9+
10+
# 如果音频输入采集处于静音状态,则取消该状态
11+
if obs.obs_source_muted(audio):
12+
obs.obs_source_set_muted(audio, False)
13+
14+
# 关闭对音频输入采集的监听
15+
obs.obs_source_set_monitoring_type(audio, obs.OBS_MONITORING_TYPE_NONE)
16+
17+
# 如果音频输入采集没有输出至第 1 条音轨,则添加
18+
mixers = obs.obs_source_get_audio_mixers(audio)
19+
if mixers & (1 << 0) != 1:
20+
obs.obs_source_set_audio_mixers(audio, mixers | (1 << 0))
21+
22+
# 启用音频输入采集的按住静音,并设置延迟时间
23+
obs.obs_source_enable_push_to_mute(audio, True)
24+
obs.obs_source_set_push_to_mute_delay(audio, 2000)
25+
26+
# 释放来源对象
27+
obs.obs_source_release(audio)
28+
29+
# 获取名称为 Media 的媒体源
30+
media = obs.obs_get_source_by_name('Media')
31+
# 获取持续时间和当前时间,并计算播放进度
32+
duration = obs.obs_source_media_get_duration(media)
33+
time = obs.obs_source_media_get_time(media)
34+
obs.script_log(obs.LOG_INFO, f"Media 播放进度 {int(time * 100 / duration)}%")
35+
36+
# 切换媒体源的各种状态
37+
state = obs.obs_source_media_get_state(media)
38+
if state == obs.OBS_MEDIA_STATE_PLAYING:
39+
obs.obs_source_media_play_pause(media, True)
40+
elif state == obs.OBS_MEDIA_STATE_PAUSED:
41+
obs.obs_source_media_play_pause(media, False)
42+
elif state == obs.OBS_MEDIA_STATE_STOPPED or state == obs.OBS_MEDIA_STATE_ENDED:
43+
obs.obs_source_media_restart(media)
44+
45+
# 释放来源对象
46+
obs.obs_source_release(media)
47+
48+
# 为脚本添加一个用于测试的按钮,回调函数为 test
49+
def script_properties():
50+
props = obs.obs_properties_create()
51+
obs.obs_properties_add_button(props, 'test', '测试', test)
52+
return props

src/zh/properties.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,9 @@ def script_properties():
103103

104104
# 添加一个复选框,用于控制是否在脚本载入后执行任务
105105
obs.obs_properties_add_bool(props, 'auto', '在启动时执行任务?')
106-
# 添加一个小数滑块,用于表示延迟执行任务的时间
107-
obs.obs_properties_add_float_slider(props, 'seconds', '延迟秒数', 1, 10, 0.5)
106+
# 添加一个小数滑块,用于表示延迟执行任务的时间,后缀为字符串 '秒'
107+
delay = obs.obs_properties_add_float_slider(props, 'delay', '延迟秒数', 1, 10, 0.5)
108+
obs.obs_property_float_set_suffix(delay, '秒')
108109
# 添加一个文本框,用于表示需要发送的消息
109110
obs.obs_properties_add_text(props, 'message', '消息:', obs.OBS_TEXT_MULTILINE)
110111
# 添加一个按钮,用于再次执行 task 函数
@@ -158,7 +159,7 @@ def script_update(settings):
158159
def script_defaults(settings):
159160
# 设置控件的默认值
160161
obs.obs_data_set_default_bool(settings, 'auto', True)
161-
obs.obs_data_set_default_double(settings, 'seconds', 1.5)
162+
obs.obs_data_set_default_double(settings, 'delay', 1.5)
162163

163164

164165
# 变量 current_settings 用于表示脚本设置
@@ -189,6 +190,6 @@ def script_load(settings):
189190
obs.script_log(obs.LOG_INFO, f'在启动时执行任务(是的)')
190191

191192
# 添加运行任务的计时器,时间间隔为滑块表示的秒数
192-
seconds = obs.obs_data_get_double(settings, 'seconds')
193+
seconds = obs.obs_data_get_double(settings, 'delay')
193194
obs.script_log(obs.LOG_INFO, f'请等待大约 {seconds} 秒')
194195
obs.timer_add(task, int(seconds * 1000))

0 commit comments

Comments
 (0)