YDiary

メモ的な

Switch用のオーディオミキサを作る話(その2)

ydkk.hateblo.jp の続きです.

だいぶ間が空いてしまいましたが,実際にミキサを作るまでの手順を紹介します.

まずは適当に回路*1を起こして f:id:YDKK:20180514151638p:plain

ブレッドボードで試作

動作確認ができたら基板に起こして

中華メーカ*2に基板を発注して

部品をはんだ付けして完成!

必要な部品はこんな感じ*3 f:id:YDKK:20180514153534p:plain

秋月で揃えられる部品で組みました. 基板代を含めても一個あたり1500円もしません. 地味に良い部品を使っている部分や,オペアンプの負電源の生成にICを使っている部分などをどうにかすれば,あと500円ぐらいはコストを下げられそうです.

3Dプリンタがあればケースも作ったのですが,無いのでAmazonで適当なクリアケースを購入.

電源はUSBから取っていますが,余裕のあるケースにしたら半分ぐらい余っちゃったのでバッテリー駆動化なんかも出来そうです.

肝心の使い心地ですが,特にノイズもなく*4狙い通りマイク信号への混入も発生しません! 大満足の仕上がりです. オーディオ系の工作は初めてでしたが,安価でイカのプレイを快適にすることができました. SwitchのVCで似たような不満を抱えている方は,是非ミキサ自作に挑戦してみると良いと思います!*5

オペアンプの回路は,次に示すサイトなどを参考にしました.
簡単なオーディオミキサー
自作オーディオミキサー 〜オペアンプ加算増幅器〜

*1:1倍の反転増幅回路です.出力波形が反転してしまいますが,ゲーム用だし別に良いかなぁと.

*2:今回はFusion PCBを使いました.

*3:当初はUSB Mini-BとMicro-Bの両方を使える想定でいたのですが,なんと秋月の変換基板にはピン互換が無かった… https://twitter.com/Tiryoh/status/978644360450330625

*4:電源をSwitchもしくはPCなどの接続先のデバイスから取ると,グラウンドループノイズ?が発生する場合があるので,別電源にするのがベストです.

*5:HORIもどうせなら単体でこんな感じの周辺機器出せば売れると思うんだけどなぁ.

Switch用のオーディオミキサを作る話(その1)

はじめに

タイトルの通り,オペアンプを使ってNintendo Switch用のオーディオミキサを作りました.

そもそも何故こんなものを作ったのかを説明するために,まず現状のSwitch周りの配線の様子を次に示します. f:id:YDKK:20180226022201p:plain どうしてこうなったという感じの構成*1ですが,そこはひとまず置いておいて,今回作ったのは図の下部にある赤線で囲ってあるミキサの代わりになるものです.

SwitchにはVC機能が搭載されていないので,通話しながらゲームをプレイしようとすると必然的にゲーム音とVCの音声を混ぜる必要があります.スピーカ出力でプレイする場合は,それぞれの出力を別々のスピーカから出すことで簡単に解決できますが,ヘッドセットでプレイする場合はひと工夫する必要が出てきます.

解決策

この問題の解決には皆それなりに悩んでる*2ようです.
簡単な方法だと

こんな感じの簡易ミキサを使ったりすることなどが考えられます.簡易ミキサを使う上で注意する必要があるのは,ヘッドセットなどによっては端子が4極になっていたりする場合があるので,そこでさらに分配ケーブルなどが必要になる可能性がある点です.

私は,配線が煩雑になりそうということもあり,この問題の解決にAIR STEREOのミキサ部分を使うことにしました.

どうやら任天堂?もこの問題を認識しているらしく,HORIからSwitch向けのライセンス製品として販売されているヘッドセットのAIR STEREOには,ゲーム音とVC音声を混ぜられるミキサ*3が付属しています.

f:id:YDKK:20180226030657p:plain わざわざこんな図が添えてある

流石はこの用途専用のミキサなだけあり,目的にピッタリです.配線回りもシンプルになるのでずっとこのミキサを愛用していました*4

問題点

しかし,使用しているうちにこのミキサには問題があることに気が付きます.それは,上に挙げた簡易ミキサと同じように入力を単純に混ぜているだけなので,それぞれの入力が逆流してしまうということです.

単純に逆流するだけならばそれほど問題は無いのですが,前段の出力インピーダンスが低くてGNDが揺れるのか*5,大きめの音を再生すると何故かそれがマイク入力に混ざってしまうのです.結果として,エコーが発生してしまったり,PCで再生した別の音がマイク入力に混ざってしまったりする現象が発生しました.幸いDiscordには入力感度の調節機能が付いているので,コレを低めに調節することで音が混ざることは避けされますが,あまり下げ過ぎると今度は声を大きくしないと自分の声が相手に届かなくなってしまいます.また,単純な音量調節機能しか付いてないSkypeなどで問題になります.

そこで,代わりになるミキサをオペアンプを使って作ることにしました.

その2へつづく

*1:Switchの音がDACを通ってるあたりとか完全に自己満足

*2:イヤホンをしてその上からヘッドホンをする,という方法を聞いて驚いたことがある

*3:プラグ式なので他のヘッドセットが使用可能!

*4:おまけで付いてたヘッドセット本体?箱に入れたままですね…

*5:オーディオ周りはそれほど詳しくないので,この辺はあくまで憶測です

SH-03Jを買った

タイトルの通りです.
SH-03Jを購入しました.メイン端末としてはSH-06F以来になります.

本当は次のAQUOS PAD*1が出るまで待ちたかったのですが,流石にガタがきてる*2のと,ヤフオクで状態の良い白ロムが安かったのでついポチっちゃいました.

なんか初期セットアップが済んだ状態だったので,そのままAndroid 8.0までアップデートしてからファクトリーリセットして使ってます. まだ使い始めて2日間ぐらいしか経ってませんが,とりあえずSH-06Fと比べて感じたことなどを書いていこうと思います.

*1:そんな物はないって?ちょっと裏まで来てもらおうか

*2:電源ボタンが折れたりとか

続きを読む

技術の力で運用を楽にする ほか3本

この記事は,Silbird Advent Calendar 2017の21日目の記事です.

はじめに

さて、今年ももう残り少なくなりましたが、いかがお過ごしでしょうか。
今日の記事は、次の3本立てです。

  • 技術の力で運用を楽にする
  • 手軽に画面をGIF動画でキャプチャする
  • バックアップは忘れずに
続きを読む

Qiita:TeamをやめてCrowiに移行した話 ~移行編~

この記事は,Silbird Advent Calendar 2017の14日目の記事です.

はじめに

qiita.com qiita.com

に引き続きのCrowiネタです.

さて,上の記事で述べられている通り,Silbirdでは社内のドキュメントサービスをQiita:TeamからCrowiに移行しました.
移行に際して問題となるのが,これまでQiita:Teamに書いてきたドキュメントをどうするのかという点です.

この記事では,Qiita:TeamからCrowiへ記事を移行する方法について紹介します.

続きを読む

Git LFSをAmazon S3でいい感じにする話

この記事は,Silbird Advent Calendar 2017の7日目の記事です.

はじめに

皆さんはソースコードリポジトリの保存先として,GitHubなどのホスティングサービスをお使いでしょうか. また,リソースファイルなどのバイナリファイルを管理するためのリポジトリのサイズが肥大化していたりしないでしょうか.

実は,GitHubなどのホスティングサービスでは推奨されるリポジトリのサイズが決められており,そのサイズを大幅に超過するようなリポジトリは運営による凍結・削除の対象となってしまうことがあるのです.

この記事では,そうしたリポジトリの肥大化を,バイナリファイルをソースコードとは別で管理することによって防ぐことが可能なGit LFS (Large File Storage)と,Git LFSのサーバとしてAmazon S3を活用する方法などを紹介します.

続きを読む

Google Homeで普通のシーリングライトを制御する

はじめに

先日,Google Home Miniを購入しました.

Google関連のサービス・製品*1を多く利用しているので,それらと連携出来たら便利そうだと感じたのと,どうやらAPIを通して機能を拡張できそうだと分かったのが購入の決め手です.

さて,せっかくGoogle Homeを購入したので,音楽を再生したり,ニュースを聞いたりする他にシーリングライトなどの家電を制御したりしたくなってきます.

Google Homeで家電を制御する

Google Homeには,元々家電などを制御する機能が搭載されていますが,これを利用することができるのはPHILIPS Hueなどの一部のスマート家電のみです.

残念なことに,我が家で使用しているシーリングライトはHueではなく,一般的な,リモコンで操作するタイプのLEDシーリングライトです.そのため,そのままではGoogle Homeから制御することができません.

Google Homeの機能拡張

そこで目を付けたのが,APIを通した機能の拡張です.調べたところ,Google Homeの中身*2Google Assistantであり,Dialogflow上でアプリを作成してActions on Google経由で呼び出すことによって機能を拡張することができるようです.

dialogflow.com

しかし,この方法で作成したアプリは起動のために毎回「テスト用アプリに接続」というようなコマンドを言わないと使用することができない*3ようです.部屋の明かりを点けるために毎回そうしたコマンドを言うのは面倒ですし,何より直感的ではありません.

そこで次に調べたのが,IFTTTを使用する方法です.IFTTTを使用して連携する場合には,どういう訳か*4「テスト用アプリに接続」というようなコマンドを言わずに,直接制御用のコマンドを認識することが可能なようです.シーリングライトの制御という目的を考えれば,アプリにはそれほど高度な機能は求められず,せいぜいWebhookが使えれば十分なので,今回はIFTTTを使用することにしました.

ifttt.com

シーリングライトの制御

次に問題になるのが,Webhookを受け取った後に,どうやってシーリングライトを制御するかという点です.先述の通りHueなどのスマート家電ではないので,制御するためにはリモコンを使用するほかなさそうです.そこで,リモコンの信号を解析し,その通りに真似してしゃべることで制御することができるのではないかと考えました.ちょうど秋月通販で買い物をする予定があったので,ついでに赤外線受信器赤外線LEDなどを買いそろえました.

さて,リモコン信号の解析ですが,手元にArduinoもどき*5があったので,それを使用することにします.調べたところ,ArduinoのライブラリにIRremoteというものがあり,リモコン信号の送受信をサポートしていたのでこれを使用することとしました.

github.com

こんな感じのスケッチで,受信したリモコンの信号を出力させます.

IR Receive.c gist.github.com

回路図なんかは,ググればいくらでも出てくると思うので,そちらを参照してください. 一つ注意が必要な点として,我が家で使ってるシーリングライト*6はリモコンの信号が長いようで,IRremoteライブラリそのままでは全ての信号を受信しきれなかったため, IRremoteInt.h ファイルの43行目にある #define RAWBUF の値を500ぐらいの大きな値に変更しています.

そして,受信した信号を元に次のようなスケッチを作成しました.このコードは,デジタル入力の2ピンと4ピンを監視し, HIGH になった場合にはそれぞれリモコンの全灯と消灯の信号を送信しています.

IR Send.c gist.github.com

Webhookを受信して,Arduinoに伝えるのはRaspberry Piを使用しました*7C#で簡易HTTPサーバを書き,アクセスに応じてGPIOを制御してます.

ひとまず,モノとしてはこんな感じになりました.

最後に,IFTTTでこんな感じのアプレットを作成して完成です.

f:id:YDKK:20171114153044p:plain

出来上がったもの

実際に動かしている様子は次の通りです.

システム全体の構成図はこんな感じ.Google HomeとWebサーバより右側が我が家の中です. f:id:YDKK:20171114154230p:plain

終わりに

とりあえず家にあるもので作ったので,ラズパイとかArduinoのあたりが煩雑になってる気がする.既製品のスマートリモコンの類を利用したり,ESP-WROOM-02みたいなWi-Fiマイコンを使ったりするともっとスマートに仕上がりそう.

Amazon.co.jp: スマートリモコン

akizukidenshi.com

最初のうちは,つい今までの習慣で自然とリモコンに手が伸びてしまいますが,すぐに慣れました.両手がふさがってても明かりを点けられたり,消し忘れた際に遠くから喋るだけで明かりを消したりできるので最高です. 今後は,何か良さそうなものがあれば他のものも制御してみたいです.
Splatoon2向けの何かを作ったりもしてみようと思ったのですが,ログイン周りの処理が変わってからは iksm_session を自動生成できないようなので保留してます.

*1:カレンダとかGmailとかAndroidとか

*2:音声アシスタント

*3:あまりよく調べてないので,間違ってたら教えてください

*4:OAuth連携時に「音声コマンドの上書き」的な権限があったのが関係してそう.一般に開放されているのであればぜひ使ってみたい

*5:中華通販で300円ぐらいで買ったArduino UNO互換機.USB端子がMicro Bで便利

*6:SHARP製のシーリングライトで,CRMC-A018SDEZというリモコンを使用するもの

*7:諸々の都合で前にもう一段Webサーバがあります