SyncSing Studio

スクリプトの部品0.41.0 から

スクリプトで使える「きっかけ」「条件」「操作」「制御」の部品を、アプリの画面といっしょに一つずつ説明します。組み立て方は ブロックで組む へ。

スクリプトの組み立て

スクリプトは「きっかけ」が起きたときに、「手順」を上から順に動かす仕組みです。手順には「操作」と、「もし〜なら」「くり返す」などの「制御」を並べます。「もし〜なら」の中には「条件」を書きます。

図はアプリの画面のまま(見本の値)です。シーン名・効果音の名前などは、使う環境に合わせて変えてください。AI に「こうしたい」と話して作ることもできます(スクリプトアシスタント)。

文字の中で使える値

文字を入れる欄(チャットに送る・読み上げる・OBS のテキストなど)では、きっかけの中身を次の形で差し込めます。

書き方中身
{user}送った人の名前
{message}コメントの本文。クリップボードのきっかけではコピーした文字、投票・予想の終わりでは選ばれた選択肢、別のスクリプトから呼ばれたときは渡された文字
{reward}チャンネルポイントの報酬名
{amount}金額(スーパーチャット・スーパーステッカー)
{viewers}人数(レイド・同時接続数)
{song}曲名
{scene}シーン名
{i}「○ 回くり返す」の中で、今が何回目か(1 から)
{bits}Bits の個数
{gift_count}ギフトの数
{level}ハイプトレインのレベル
{title}投票・予想の題
{seconds}広告の秒数
{変数の名前}変数の中身(例 {カウント})

きっかけ

アプリ・マイク

SyncSing を起動したとき

app.start

音声処理を開始したとき

app.processing_start

音声処理を停止したとき

app.processing_stop

マイクのミュートが切り替わったとき

app.mute_changed

マイクの声が大きくなったとき

mic.loud
  • 設定「大きさ dBFS」を「続く秒」のあいだ超え続けたときに動きます(例 -10 dBFS を 0.8 秒)。今の声の大きさは条件「今のマイクの声の大きさ」で見られます。

マイクが静かな時間が続いたとき

mic.quiet
  • 設定声が「大きさ dBFS」より小さい時間が「続く秒」続いたときに動きます(例 -45 dBFS が 60 秒)。

クリップボードに文字がコピーされたとき

clipboard.copy
  • 設定・「文字数」: 何文字の文字のときに動くか。6 のように 1 つ、または 6-8 のように幅で書きます。空なら何文字でも動きます。
    ・「使える文字」: 大文字の英字と数字(はじめの設定)/数字だけ/大文字の英字だけ/英字と数字/何でも(日本語も可)から選びます。
    ・「英字と数字の両方」: オンにすると、英字と数字の両方が入った文字だけで動きます(A1B2C3 は動き、ABCDEF は動かない)。
  • 形に合わない文字はアプリが読まずに捨てます(記録にも残りません)。改行を含む文字と、200 文字より長い文字も読みません。
  • コピーした文字は {message} で使えます。

クリップボードに、決まった言葉がコピーされたとき

clipboard.word
  • 設定・「比べ方」: 言葉が入っているとき(はじめの設定)/言葉で始まるとき/言葉で終わるとき/言葉とまったく同じとき/言葉とまったく違うとき/言葉が入っていないとき から選びます。
    ・「言葉」: 比べる言葉です(例 https://discord.gg/ で始まるとき=Discord の招待リンクをコピーしたとき)。
  • 英字の大文字・小文字と、前後の空白は区別しません。改行を含む文字も見ます(200 文字まで)。
  • コピーした文字は {message} で使えます。

Stream Deck・スマホ・ショートカットキーのボタンを押したとき

button.press
  • 設定「名前」

OBS(配信・録画・シーン・音声)

OBS で配信が始まったとき

obs.stream_start

OBS で配信が終わったとき

obs.stream_stop

OBS で録画が始まったとき

obs.record_start

OBS で録画が終わったとき

obs.record_stop

OBS のシーンが変わったとき

obs.scene_changed
  • 設定「シーン名」 でシーン名を絞れる

チャット・コメント

チャットにコマンドが来たとき

chat.command
  • 設定「コマンド」(例 !hello)、「送った人」(だれでも・メンバー・モデレーター・配信者)、「連打よけ(秒)」(同じコマンドが続いても、この秒数のあいだは動かない)。

チャットに言葉を含むコメントが来たとき

chat.keyword
  • 設定「言葉」(コメントにこの言葉が入っていたら動く)、「送った人」。

チャットにコメントが来たとき

chat.message
  • 設定すべてのコメント

Twitch・YouTube のイベント

Twitch のチャンネルポイントが引き換えられたとき

twitch.redeem
  • 設定「報酬名」 報酬名

Twitch でフォローされたとき

twitch.follow

Twitch でレイドが来たとき

twitch.raid
  • 設定「最低人数」 人以上のときだけ。人数は {viewers}、来てくれた人は {user}

Twitch で Bits が来たとき

twitch.cheer
  • 設定「最低の個数」 個以上のときだけ。個数は {bits}。お金ではない

Twitch でハイプトレインが始まったとき

twitch.hype_train_start
  • 設定レベルは {level}

Twitch でハイプトレインが終わったとき

twitch.hype_train_end
  • 設定たどり着いたレベルは {level}

Twitch の投票が終わったとき

twitch.poll_end
  • 設定「題」 題で絞れる。いちばん票が多かった選択肢は {message}、題は {title}

Twitch の予想の結果が決まったとき

twitch.prediction_end
  • 設定「題」 題で絞れる。当たった選択肢は {message}、題は {title}。取り消したときは動かない

Twitch で広告が始まったとき

twitch.ad_start
  • 設定広告の秒数は {seconds}

Twitch で広告が終わったとき

twitch.ad_end

Twitch でサブスク・ギフトがあったとき

twitch.sub
  • 設定ギフトの数は {gift_count}

YouTube でスーパーチャットが来たとき

youtube.superchat
  • 設定「最低金額(円)」 円以上のときだけ。スーパーステッカーは別。金額は {amount}

YouTube でスーパーステッカーが来たとき

youtube.supersticker
  • 設定「最低金額(円)」 円以上のときだけ。金額は {amount}

YouTube でメンバーに加入したとき

youtube.member
  • 設定ギフトは別

YouTube でメンバーシップのギフトが贈られたとき

youtube.member_gift
  • 設定「最低の人数分」 人分以上のときだけ。贈った人は {user}、数は {gift_count}

同時接続数が決まった人数に届いたとき

live.viewers
  • 設定「人数」。同時接続数がこの人数に届いたときに、配信ごとに 1 回動きます。人数は {viewers} で使えます。

Twitch のフォロワー数が決まった数に届いたとき

twitch.followers
  • 設定「フォロワー数」。この数に届いたときに 1 回だけ動きます。

Twitch のサブスク数が決まった数に届いたとき

twitch.subs
  • 設定「サブスク数」。この数に届いたときに 1 回だけ動きます。

YouTube のチャンネル登録者数が決まった数に届いたとき

youtube.subscribers
  • 設定「登録者数」。この数に届いたときに 1 回だけ動きます。YouTube が出す丸めた数(例 1.2 万)で比べます。

時刻・間隔

決まった時刻になったとき

time.at
  • 設定「時刻 HH:MM」 HH:MM、「曜日」 曜日

決まった間隔ごと

time.every
  • 設定「間隔(分)」と、「配信中だけ」。

曲・BGM・効果音

曲が始まったとき

song.start

曲が終わったとき

song.end

外のアプリ・ツール

外のアプリ・ツールから呼ばれたとき

remote.call
  • 設定「呼び出し名」。Streamer.bot などのほかのツールから http://この PC:18490/script/呼び出し名 を呼ぶと動きます。送られた文字は {message}、送った名前は {user} で使えます。
  • スクリプトの設定で「外から呼んでよい」にしたものだけが動きます。

スクリプト同士

別のスクリプトから呼ばれたとき

script.called
  • 設定「別のスクリプトを動かす」で、このスクリプトの名前を指定したときに動く。渡された文字は {message}

条件(もし〜なら)

「もし」の欄に式を書きます。

  • 比べ方: ==(同じ)!=(違う)>=(以上)<=(以下)> <。含むかどうかは contains(message, "草")。
  • つなぎ方: and(かつ)・or(または)・not(ではない)。例 live and time >= 22:00
  • 文字は "…" で囲みます。時刻は 22:00 のまま、送った人の種類は引用符なしで書きます(viewer < member < vip < moderator < broadcaster。例 role >= moderator)。
  • 変数は名前をそのまま書きます(例 カウント >= 5)。一覧には contains(seen, user)・len(names) が使えます。
  • 数を比べる条件は、ブロックでは「○○ が ○ 以上」の形で選べます。

配信中か

live
  • 例live
  • 補足配信中なら「はい」。

録画中か

recording
  • 例recording
  • 補足録画中なら「はい」。

今のシーン

scene
  • 例scene == "参加受付"
  • 補足今の OBS のシーン名と比べます。

今の同時接続数

live_viewers
  • 例live_viewers >= 100
  • 補足配信していないとき・取れないときは 0。

Twitch のフォロワー数

follower_total
  • 例follower_total >= 1000
  • 補足今の Twitch のフォロワー数。

Twitch のサブスク数

subscriber_total
  • 例subscriber_total >= 50
  • 補足今の Twitch のサブスク数。

YouTube のチャンネル登録者数

youtube_subscribers
  • 例youtube_subscribers >= 10000
  • 補足YouTube が出す丸めた数です。

今の時刻

time
  • 例time >= 21:00
  • 補足今の時刻(HH:MM)と比べます。

曜日

weekday
  • 例weekday == "土"
  • 補足月〜日で比べます。

送った人の種類

user_role
  • 例role >= moderator
  • 補足コメントを送った人の種類。viewer(視聴者)< member(メンバー)< vip < moderator(モデレーター)< broadcaster(配信者)で、引用符なしで書きます。

送った人の名前

user
  • 例user == "みか"
  • 補足コメントを送った人・来てくれた人の名前。

どこから来たか

platform
  • 例platform == "twitch"
  • 補足コメント・イベントがどこから来たか(Twitch か YouTube)。両方で配信しているときに返事を分けられます。

本文

message
  • 例contains(message, "こんにちは")
  • 補足コメントの本文。「含む」(contains)か「同じ」(==)で比べます。

金額

amount
  • 例amount >= 1000
  • 補足スーパーチャットなどの金額。

人数

viewers
  • 例viewers >= 5
  • 補足レイドなどの人数。

Bits の個数

bits
  • 例bits >= 100
  • 補足Bits の個数(お金ではありません)。

ギフトの数

gift_count
  • 例gift_count >= 5
  • 補足ギフトの数。

ハイプトレインのレベル

level
  • 例level >= 3
  • 補足ハイプトレインのレベル。

投票・予想の題

title
  • 例title == "次のゲームは?"
  • 補足投票・予想の題。

広告の秒数

seconds
  • 例seconds >= 60
  • 補足広告の秒数。

今日のスパチャ合計

superchat_total
  • 例superchat_total >= 10000
  • 補足今日のスーパーチャット・スーパーステッカーの合計金額。

エントリーの人数

entry_count
  • 例entry_count >= 10
  • 補足エントリーしている人数。

今日のフォロー数

follower_count_today
  • 例follower_count_today >= 10
  • 補足今日のフォロー数。

直近のコメント数

chat_count
  • 例chat_count(5) >= 30
  • 補足直近のコメント数。chat_count(5) で直近 5 分。

コマンドの後ろの 1 つ目の言葉

arg1
  • 例arg1 == "ゲーム"
  • 補足コマンドの後ろの 1 つ目の言葉(!vote A なら A)。2 つ目は arg2。

くり返しの何回目か

i
  • 例i == 3
  • 補足「○ 回くり返す」の中で、今が何回目か(1 から)。

変数

var
  • 例カウント >= 5
  • 補足変数の名前をそのまま書いて比べます。

どのきっかけで動いたか

trigger
  • 例event == "chat.command"
  • 補足どのきっかけで動いたか(きっかけの id。例 chat.command)。複数のきっかけを付けたスクリプトで使います。

今のマイクの声の大きさ

mic_level
  • 例mic_level > -10
  • 補足今のマイクの声の大きさ(dBFS)。音声処理を止めているときは -60。

操作

アプリ・マイク

マイクをミュートにする

mic.mute_on

マイクのミュートを切る

mic.mute_off

非常停止する

app.estop
  • 設定動いているスクリプトを全部止めて、すべてのスクリプトを一時的に無効にする
  • 注意有効にするときに確かめが出ます(すべてのスクリプトが止まり、無効になります)。

アプリの機能を ON/OFF にする

app.feature
  • 設定「機能」(翻訳・読み上げ・ノイズ除去・歌詞表示・マイクモニター・BGM の自動調整・自主規制のピー音 など)と、ON/OFF。

クリップボードにコピーする

clipboard.set
  • 設定「文字」

OBS(配信・録画・シーン・音声)

OBS の配信を始める

obs.stream_start
  • 注意有効にするときに確かめが出ます(配信が始まります)。

OBS の配信を止める

obs.stream_stop
  • 注意有効にするときに確かめが出ます(配信が止まります)。

OBS の録画を始める

obs.record_start

OBS の録画を止める

obs.record_stop
  • 注意有効にするときに確かめが出ます(録画が止まります)。

OBS のシーンを切り替える

obs.scene
  • 設定「シーン名」

OBS の音声入力をミュート切り替え

obs.input_mute
  • 設定「音声入力の名前」と、ミュートする/しない。

OBS の音声入力の音量を変える

obs.input_volume
  • 設定「音声入力の名前」 音声入力の名前、「音量(0〜100)」 0-100

OBS の仮想カメラを始める/止める

obs.virtualcam
  • 設定「ON/OFF」 で始める・で止める

OBS でスクリーンショットを撮る

obs.screenshot
  • 設定「ソース」(ソースかシーンの名前。空なら今のシーン)。
  • ピクチャの「SyncSing Studio」フォルダーに保存します。OBS が同じ PC で動いているときに使えます。

OBS のリプレイを保存する

obs.replay_save

OBS で前のシーンに戻す

obs.scene_back

OBS のソースを表示/非表示にする

obs.source_visible
  • 設定「シーン名」(空なら今のシーン)、「ソース名」と、表示/非表示。

OBS のフィルターを ON/OFF にする

obs.filter
  • 設定「ソース名」「フィルター名」と、ON/OFF。

OBS のテキストを書き換える

obs.text
  • 設定「ソース名」 テキストのソース名、「文字」

OBS のメディアを最初から再生する

obs.media_restart
  • 設定「ソース名」 メディアのソース名

OBS のメディアを操作する

obs.media
  • 設定「ソース名」 メディアのソース名、「操作」は 再生・一時停止・停止・最初から・次・前

チャット・コメント

チャットに送る

chat.send
  • 設定「文字」、「送り先」(両方・Twitch・YouTube。空なら今の配信先)、「ピン留め」(オンにすると送ったメッセージをピン留めする。Twitch・YouTube の内蔵チャットとも)。

きっかけのコメントを消す

chat.delete
  • きっかけのコメントを消します。Twitch だけです(YouTube はまだできません)。コメントのきっかけ(コマンド・言葉を含むコメントなど)で使います。
  • 注意有効にするときに確かめが出ます(きっかけのコメントが消えます)。

きっかけのコメントを送った人をタイムアウトする

chat.timeout
  • 設定「秒」(空なら 60 秒)、「理由」。
  • きっかけのコメントを送った人をタイムアウトします。Twitch だけです(YouTube はまだできません)。
  • 注意有効にするときに確かめが出ます(コメントを送った人がタイムアウトされます)。

Twitch の操作(クリップ・予想・投票・マーカー・シャウトアウト)

Twitch のクリップを作る

twitch.clip
  • 設定配信中だけ

Twitch の予想を始める

twitch.prediction
  • 設定「題」 題、「選択肢(/ 区切り)」 選択肢を・で区切る、「秒」 受付の秒

Twitch の投票を始める

twitch.poll
  • 設定「題」 題、「選択肢(/ 区切り)」 選択肢を・で区切る、「秒」 投票の秒

Twitch の配信にマーカーを付ける

twitch.marker
  • 設定「文字」 説明。あとで切り抜く場所の目印。配信中だけ

Twitch でシャウトアウトする

twitch.shoutout
  • 設定「相手のチャンネル名」(ログイン名)。空にすると、きっかけの人(レイドしてくれた人など)にシャウトアウトします。
  • 配信中だけ使えます。Twitch の決まりで 2 分に 1 回、同じ相手には 1 時間に 1 回までです。

読み上げ・OBS 表示

読み上げる

tts.speak
  • 設定「文字」

読み上げを止める

tts.stop
  • 設定読んでいるものと、待っているものを全部

OBS 表示にお知らせを出す

overlay.notice
  • 設定「文字」、「秒」(出しておく時間)、「位置」(上・真ん中・下)、「大きさ」(小・中・大)、「色」(例 #ff4d4f)、「効果音」(登録した効果音の名前)。

OBS 表示のお知らせを消す

overlay.clear
  • 設定スクリプトが出したもの

曲・BGM・効果音

BGM を再生する

bgm.play
  • 設定「ファイル」(BGM のフォルダのファイル名か、登録した効果音の名前。空なら今の設定)、「フェード(秒)」。

BGM を止める

bgm.stop
  • 設定「フェード(秒)」 フェードの秒

BGM の音量を変える

bgm.volume
  • 設定「音量(0〜100)」 0-100

効果音を鳴らす

sound.play
  • 設定「名前」(登録した効果音の名前)、「鳴らす先」(配信と自分・配信だけ・自分だけ。空なら登録の設定)。

鳴っている効果音を止める

sound.stop

次の曲へ

song.next

曲を止める

song.stop

ノイズ除去・エフェクト

ノイズ除去の強さを変える

noise.strength
  • 設定「強さ(0〜100)」 0-100

エフェクトのプリセットを切り替える

effect.preset
  • 設定「名前」

エントリー

エントリーの受付を始める

entry.open

エントリーの受付を締め切る

entry.close

エントリーの次の人を呼ぶ

entry.next

配信テンプレート・PC の操作

配信テンプレートを適用する

template.apply
  • 設定「名前」

PC で登録したショートカットキーを送る

pc.shortcut
  • 設定「名前」
  • 注意有効にするときに確かめが出ます(PC で登録したショートカットキーを送ります)。

PC で登録したアプリ・ファイル・URL を開く

pc.open
  • 設定「名前」
  • 注意有効にするときに確かめが出ます(PC で登録したアプリ・ファイル・URL を開きます)。

変数(数える・覚える)

変数に値を入れる

var.set
  • 設定「名前」、「値」

変数に数を足す

var.add
  • 設定「名前」、「値」

スクリプト同士

別のスクリプトを動かす

script.run
  • 設定「名前」(動かすスクリプト)、「文」(渡す文字。呼ばれた側では {message})。
  • 動かす側のスクリプトは「別のスクリプトから呼ばれたとき」をきっかけにして、有効にしておきます。呼び合いが続く場合は、決まった段数で止まります。

スクリプトを有効/無効にする

script.enable
  • 設定「名前」と、有効にする/無効にする。
  • 有効にするときに確かめが出るスクリプト(配信を止めるなど)は、スクリプトからは有効にできません(画面から有効にします)。

外のアプリ・ツール

登録した送り先へ送る

send.to
  • 設定「送り先」(「送り先」で登録した名前)、「文字」。棒読みちゃん・VTube Studio のホットキー・VRChat のチャットボックス・Streamer.bot・Discord・ファイル・MIDI などへ送れます。

制御

待つ

ctrl-wait
  • 決まった秒数だけ待ってから、次の手順へ進みます(600 秒まで)。

もし〜なら

ctrl-if
  • 条件に合うときだけ中の手順を動かします。「そうでなく、もし」(elif)で 3 つ以上に分けたり、「そうでなければ」も付けられます。

○ 回くり返す

ctrl-repeat
  • 中の手順を決まった回数だけくり返します(上限あり)。

変数に入れる

ctrl-set
  • 変数に値や計算の結果を入れます(変数は最初 0)。一覧は list()・add(一覧, user)・remove(一覧, user) で作ります。

一覧の 1 つずつ

ctrl-for
  • 一覧(変数)の中身を 1 つずつ取り出して、中の手順を動かします。取り出したものは {n} のように使えます。

〜のあいだくり返す

ctrl-while
  • 式が合っているあいだ、決まった秒ごとに中の手順をくり返します。くり返す回数の上限(max)を必ず決めます。

ここで終わる

ctrl-stop
  • そのスクリプトをここで終えます。

例:参加コードを送ってピン留めする

OBS のシーンが「参加受付」のときに、英大文字と数字が混ざった 6 文字(例 A1B2C3)をコピーすると、チャットに「参加コード:A1B2C3」を送ってピン留めします。同じコードは 1 回だけ送ります。

  1. きっかけ: クリップボードに文字がコピーされたとき(文字数 6・大文字の英字と数字・両方を含むものだけ)
  2. もし scene == "参加受付" なら
  3. もし 送ったコード != message なら(前に送ったコードと違うときだけ)
  4. チャットに送る「参加コード:{message}」(ピン留めする)
  5. 変数「送ったコード」に {message} を入れる
  • 形に合わない文字(長い文章・パスワードの形でないものなど)は、アプリが読みません。
  • 同じコードをもう一度送りたいときは、ボタン(Stream Deck など)のきっかけで「チャットに送る『参加コード:{送ったコード}』」のスクリプトを作ります。
  • ピン留めは Twitch と YouTube(内蔵チャット)で使えます。

関連するページ

図はアプリの見本の HTML から再現した、見本データによる表示です。実際の表示と異なる場合があります。