なんも分からないのでしらべた

なんもわからん!…ので、できる範囲で調べる。

Discordでゲーム音声を配信する方法

ゲーム動画の配信時にゲームの音声が配信先で再生されないので困った。
調べた結果を雑にまとめる。*1

前提

  • Discordでの配信音声はマイクからの入力音声のみ
    • デスクトップ音声は配信されない
    • デスクトップ音声をDiscordの入力音声に指定したい
  • デスクトップ音声とマイク音声を同時に配信したい場合は音声を合成する必要がある

解決策

音声ミキサーソフトを使う

f:id:kbn1053:20180212212236p:plain

f:id:kbn1053:20180212212254p:plain

使用するソフト

Voicemeeter Banana

https://www.vb-audio.com/Voicemeeter/banana.htm

参考サイト

分かり易かった順

jp.finalfantasyxiv.com

ghosthack.net

雑手順

ほとんど参考サイト通り

  • Voicemeeter Bananaをインストールする
    • インストール方法は省略
  • windows右下のスピーカーマークから再生デバイスを開く
  • 再生デバイスの設定
    • VoiceMeeter Inputを既定のデバイスにする
    • VoiceMeeter Aux Inputを既定の通信デバイスにする
  • 録音デバイスの設定
    • VoiceMeeter Outputを既定のデバイスにする
    • VoiceMeeter Aux Outputを既定の通信デバイスにする

f:id:kbn1053:20180212213034p:plain

f:id:kbn1053:20180212213052p:plain

  • Voicemeeter Bananaを起動
    • 基本的にマイク1の設定して終わり
    • スピーカーの設定(A1)は必要なかったようなあったような・・・
    • 合成された音声はB1 = VoiceMeeter Output / B2 = VoiceMeeter Aux Outputとして出力される
    • 操作画面は慣ないと分かりづらい🤒

操作画面は初見はなんのこっちゃとなったので、雑画像説明↓

f:id:kbn1053:20180212214838p:plain

  • Discordの音声設定

f:id:kbn1053:20180212215115p:plain

うまくいけばこれでデスクトップ音声とマイク音声が再生される。

動作確認方法

配信しているPC環境のみだと、うまく配信できているか確認しづらい。
スマフォなどでチェックすると確認がとりやすいかもしれない。

  • 友人に確認してもらう
  • スマフォにDiscord入れて別垢できちんと配信されているか確認する

終わりに

Discordでクソゲーム配信楽しいね!
終わり。

*1:配信慣れてる人なら当たり前の内容だが

スマートスピーカーのペアレンタルコントロールについて(メモ書き)

まとまった情報が無く、記事にできなかった。
リンクとメモを記録として残す。

前提

米国ではCOPPAという13才未満のプライバシー情報の収集を禁止する法律がある。
スマートスピーカーは音声情報をサーバーに送信するため、法的に現状グレーのような立場にあると述べているサイトもある。そのためか、GoogleHome/Alexaでは13才以下の子供をターゲットにしたアプリ/スキルを禁止している。

日本国内法では、米国同等の法律が無い。近いものは青少年インターネット環境整備法だ。
COPPAに比べてスマートスピーカに影響を与えることは少なそうだ。

http://fortune.com/2017/10/24/amazon-echo-alexa-children-kids-privacy/

  • COPPA本文

https://www.ftc.gov/enforcement/rules/rulemaking-regulatory-reform-proceedings/childrens-online-privacy-protection-rule

スマートスピーカー各社の対応

GoogleHome

  • 日本ではまだ未対応だけど、海外は13歳未満の子供へのフィルタリング設定機能

https://support.google.com/families/answer/7521263?hl=en

また、Google社のActionsポリシーの文面からは、大人・子供がほとんど共通で使えるようなものにしたいと考えているようだ。

  • Actions の考え方

https://developers.google.com/actions/policies/general-policies#user_experience

Amazon Alexa

(自分のSmartHacksQA回答文面より:https://smarthacks.jp/qa/50)

調べた限り、Echoでのペアレンタルコントロールは残念ながら今のところできないようです。

海外でも問題となっており、子供の使用をコントロールしきれないと感じるのでしたら、親は不便ですが使うのを控えるしかないのではないか、というのが回答です。

一応Echo側もフォローしますと、EchoスキルはAmazon公式の承認を元に公開が行われます。公序良俗に反するようなものや、ポルノなどは認可が下りないような仕組みになっております。また、Echoによる商品の購入や決済などはスマフォアプリから設定行うことで、悪戯による注文がされないようにできます。

米国では子供向けのスキルの認可を積極的に推進するなどしており、家族で利用しても問題ないように配慮して普及を進めている感じを受けます。これからの進化でペアレンタルコントロールも対応されるかもしれません。

  • Amazonのスキル承認のポリシー

https://developer.amazon.com/ja/docs/custom-skills/policy-testing-for-an-alexa-skill.html#policy-examples

  • 海外の議論

https://iot.stackexchange.com/questions/518/how-can-amazon-echo-dot-be-made-for-families-with-childrenparental-control

Line Clova

(未調査)

あるべき機能(やりたいこと)

子供の声を認識・特定して、スマートスピーカーが反応しない、スキルを起動できないようなコンテンツフィルタ。
親の声はスマートスピーカーを無制限で利用できることなど。

Firebase Functionsのcron起動(メモ書き)

GoogleによるとFirebase Functionsのcron起動には以下の2つの方法があるとのことだ。

  • GAE+PubSub
  • 外部サービス

twitterでアドバイスいただいたのと、たかだかcronでPubSub必要か?とも思ったので、今回は外部サービスを使うことにした。
Googleの動画内で紹介されていたcronサービスのcron-job.org*1を使ってみる。

cron-job.org - Kostenlose Cron-Jobs, von minütlich bis einmal im Jahr.

blog記事(PubSub実行)

developers-jp.googleblog.com

手順

ほとんど動画通りに実施。

環境設定のアクセスキーを設定

Firebaseが知らない人から呼ばれまくると嫌なので、アクセスキーを設定する。
Firebaseはhttpsが標準なのでアクセスキーは盗まれない…と思う。

ただし、Firebase自身でアクセス制御する方式なので悪意攻撃されたらリソースは食う。
これについては、Apigeeというサービスでリバースプロキシを噛まして悪意対策はできそう。
(この記事では触れない)

1. 環境にアクセスキーの設定する
環境の設定  |  Firebase

1.1 アクセスキー文字列はlinuxにて自動生成
qiita.com

pwgen -s 65 1

1.2 アクセスキーを書いたjsonファイルを用意

{
  "key":"xxx",
  "id":"xxxx"
}

1.2 アクセスキーをjsonファイルから設定
qiita.com

 firebase functions:config:set service_account="$(cat config.json)"

2.Functionsの公開関数先頭にアクセスキー制御処理を追加
動画の参考ソース置き場
functions-samples/index.js at master · firebase/functions-samples · GitHub

抜粋内容

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const secureCompare = require('secure-compare');

exports.accountcleanup = functions.https.onRequest((req, res) => {
  const key = req.query.key;

  // Exit if the keys don't match
  if (!secureCompare(key, functions.config().service_account.key)) {
    console.log('The key provided in the request does not match the key set in the environment. Check that', key,
        'matches the cron.key attribute in `firebase env:get`');
    res.status(403).send('Security key does not match. Make sure your "key" URL query parameter matches the ' +
        'cron.key environment variable.');
    return;
  }

//この下に通常処理を記載する

firebaseにdeployする

firebase deploy --only functions

うまくいけばwebapiのURLが生成されるのでコピーする

cron-job.orgでURLの呼び出し設定を行う

設定方法は以下のサイトが詳しい。
www.lancork.net

呼び出しURLには?key=xxxxxxをつけてパラメータを渡す。以下のような感じ。
f:id:kbn1053:20180202181059p:plain

その他

試しに数分後に起動する設定を行い、cron-job.orgにてsuccessと表示されたらcronが成功したということだ。
firebase側のconsoleからもlogや実行数が変化するので動作していることが確認できる。

*1:なんか転職サイト的なドメイン名でいやだな

GoogleHomeアプリ申請時のチェックポイント(リジェクト関連記事まとめ)

GoogleHomeアプリを公式申請した場合、審査にはある程度時間がかかる。
審査にかかる時間は短いと1日、長い場合1週間かかる(土日は休み)こともあるようだ。
先月自分が審査されていたときは、だいたい4営業日で結果が分かるという感じだった。
直近では、審査期間はもっと短くなったように思う。

審査期間が何日もかかる状態だと、開発者としてはやきもきして非常につらい。
ポカミスが原因のリジェクトはなるべく避けたいところだ。

事例を調べると自分も含めて、ちょっとした設定ミスが原因のリジェクトも多い。
何度もやらかしてGoogle社に迷惑をかけると申し訳ないので、自戒もかねてリジェクト関連の情報をまとめた。

調査結果

良く失敗するポイント

Actions on GoogleのApp information設定ミスがほとんど

  • Pronunciation (4件)
  • Sample Invocation (4件)
    • Sample Invocationに入力した言葉でアプリを起動できるか確認できないとリジェクト
    • シミュレーター等で呼び出してみて、ちゃんとアプリが呼び出せること
  • Category (4件)

調査方法

  • Googleで「GoogleHome リジェクト」で検索
  • Qiitaで「GoogleHome リジェクト」で検索
  • Twitterで「GoogleHome リジェクト」で検索

詳細

個別事例へのリンク

参考になりそうな順

qiita.com

note.mu

  • Actions on GoogleのApp information設定
    • Pronunciation
    • Sample Invocation
  • サーバー
    • サーバーダウン
  • VUI
    • ユーザーが何を回答すればいいか分からない

qiita.com

  • Actions on GoogleのApp information設定
    • Pronunciation
    • Sample Invocation
    • Category
  • VUI
    • 終了方法のガイド
  • 処理内容 / ロジック
    • 処理間違い

qiita.com

    • Actions on GoogleのApp information設定
      • Name
      • Privacy policy
      • Category
    • VUI
      • ユーザーが何を回答すればいいか分からない
    • 処理内容 / ロジック
      • 処理間違い

hobik-site.blogspot.jp

  • Actions on GoogleのApp information設定
    • Pronunciation
    • Sample Invocation
  • 処理内容 / ロジック
    • 処理間違い

kbn1053.hatenablog.com
拙作

■Category incorrect
「Business and finance」は金融、経済とかのアプリに使います。
本アプリはアプリを起動した時刻を保存したり前回呼び出した時間と今の時間の差を教えてくれたりするアプリなので「Productivity」のほうが適切かと存じます。

https://assistant.google.com/services/a/uid/00000036250bb88d?hl=ja
拙作

  • Actions on GoogleのApp information設定
    • Sample Invocation
  • 処理内容 / ロジック
    • 処理間違い

■Sample triggers incorrectly structured
Sample Invocationsでは、<アプリ名、または、 Pronunciation + Trigger Phrase>を組み合わせた形で文言を作成し、
必ずその文言がアプリ起動することをご確認いただいてから、ご申請いただく必要があります。
ご申請いただきました以下のSample Invocationsではアプリ起動が確認できないため、承認致しかねます。
・「つくば市ゴミカレンダー」
・「つくば市ごみカレンダー」
該当箇所を削除いただくか、本アプリがGoogleアシスタントで起動できる文言にご修正いただけますでしょうか。

■Unable to complete action described
本アプリをテストしたところ、アプリを起動するとアプリが「このアプリは使用できません。終了します。」と反応して終了するのを確認しました。
ご確認してご修正をお願い頂けますでしょうか。

その他

カテゴリの日本語訳の表

Category 日本語名 メモ
Art&lifestyle アート&ライフスタイル
Business&finance ビジネス&金融 金融、経済とかのアプリ
Education&reference 教養&知識 本や、教育、教育用ゲームなど
Food&drink フード&ドリンク
Games&fun ゲーム&娯楽 ゲームやダジャレなど
Health&fitness (日本語カテゴリなし)
Home control スマートホーム
Kids&family (日本語カテゴリなし) 「Kids & family」の場合、現在USでのみ対応しており、日本での対応は未定
Local 地域 地域固有の情報
Movies,photos&TV 映画&写真&テレビ
Music&audio 音楽&オーディオ 「音楽サービス」などといった、実際に音楽に関わるサービス
News&magazines ニュース&雑誌
Productivity 仕事効率化 時間を測ったり、ちょっとしたツール
Shopping (日本語カテゴリなし)
Social&communication ソーシャル&コミュニケーション
Sports スポーツ
Travel&transportation 旅行&交通機関
Weather 天気

firebaseの基礎知識を得る(1) (雑記)

最近はGoogleHomeアプリ開発でFirebaseにdeployしまくってる。
しかし、つまみ食い知識でFirebaseやっていくのに嫌気がさしてきたので、ここらで基礎知識を学ぶことにする。

まずは、Firebase紹介podキャストを一通り見た。

動画リスト

www.youtube.com

Firebaseの各種機能の紹介。

感想

何はともあれ、スマートフォン連携しろという内容。
中でも特によさそうなのは、Firebase Authenticationだった。再生数もこれはかなり多い。

アカウント新規作成してログインがだるいので、Googletwitterアカウントでログインしたい。常に。
Authenticationを使えばそれを簡単に実現できるらしい。とにかくサンプルを試したいと思った。

動画ではユーザー分析と収益化のためのツール群が多い印象を受けた。
素晴らしいとは思うが、紹介動画みただけでは「色々あるけど使いこなせないだろうなあ…」というネガティブな感想だった。

分析ツールは難しそうに感じたが、RealtimeDBとか、Hostingについては、Qiitaで記事を読んだり実装の経験があるため、だいぶ動画の内容が理解できた。やっぱり一度でも使ってみると良いことある。

全体としてはこれからFirebase使っていこう!と思っている人には勇気がわく動画だと思う。

その他

明日はFirebaseお姉さんの動画を一通り見ようと思う。

GoogleHomeアプリ「インターバル計測」をリリースした

リリースした。
前回アプリを呼び出した時間から何分経過したかを通知する。
(使うのも、実装も)かんたん。

全然簡単じゃない

基本ロジック自体はものすごく単純。
ただ、アプリの特性上、常用ユーザーが日に何度も呼ぶという「日常系」アプリなので、
firebase無料運用するとなると、色々安くするための実装が必要となる。

本気のユーザー数増に耐えきれるわけない。祈りながら公開中👏😇

その他仕様

  • firebase無料運用のため、強力なアクセス制限
    • アクティブユーザー80名のみが使える選ばれし者のアプリです()
  • 使い込んでいくうちに応答が シンプルになっていく機能
    • この方針は面白いのでいろいろ研究したい
    • 最終的に、ユーザー「おい」G「あいよ」を目指すのがAIアシスタント

振り返り

Googleによる審査が結構時間かかるので、カテゴリ設定とかは慎重に選んで
リジェクト要因を確実につぶしてから申請したいところ。

webエンジニア用語にSPA(シングルページアプリケーション)という言葉があるが、
GoogleHomeアプリでも、最初の応答で何かしらの情報を伝えて即終わるという構造だとシンプルで作りやすいと感じる。
この構造のアプリをワンショットトークアプリ、OTAとか名付けよう(やめよう)

知りたい情報があるとき、だらだら会話のキャッチボールはしたくない。相手が人間でもそうだ。
GoogleHomeに話しかけるときは何かを得たいときだ。
良いスマートスピーカー(アプリ)は最小文字数の会話でそれを達成すべきだ。
これは中々おもしろい切り口なので、この指標を元に、現在公開中のアプリを分析してみようと思う。

Trelloで全てのタスクが完了したときにごほうび画像を表示するChrome拡張を作った

まんぞく…。

詳細(GitHub)

github.com

インストール(Chrome web store)

chrome.google.com

振り返り

Chrome拡張自体は参考記事読むと簡単に作れる…。
しかし、動作モードをpage_actionにすると急にいろいろやらなきゃいけなくてめんどくさい。
簡単にはbrowserモードで作るのがよい。