見出し画像

Shokz OpenComm2 UC 2025 Upgrade レビュー | AI音声入力用マイクとして毎日使ってみた結果

こんにちは。ガジェットブロガーのじゃが(@jaga_farm)です。

AI音声入力で文章を書いたりコーディングしたりする人、最近増えてきましたよね。

ぼくもAqua Voiceを使って毎日音声入力をしているのですが、ずっと1つの不満がありました。マイクに口を近づけなきゃいけないから、デスクから動けないんです。マイクアームに首を伸ばして、SHURE MV7+に向かってボソボソ話す日々。もっと自由に動き回りながら音声入力できないかなと、ずっと思っていました。

そんなときにShokzから提供いただいたのが、骨伝導ヘッドセット「OpenComm2 UC 2025 Upgrade」です。結論から言うと、もう手放せなくなりました

骨伝導ヘッドセットをAI音声入力に使うという発想

この製品、本来はWeb会議やビジネス通話用です。でもぼくの使い方はちょっと違っていて、Aqua Voiceの音声入力専用マイクとして使っています。

ブームマイクが口元数センチまで伸びるので、小声でもしっかり拾ってくれます。家族がいる部屋でもボソボソ声で音声入力できるのは、地味ですがめちゃくちゃありがたいんです。

しかもこれ、骨伝導だから耳を塞ぎません。ぼくはAirPods Pro 3で音楽を聴きながら、OpenComm2で音声入力するという二刀流スタイルで使っています。見た目はちょっとアレかもしれませんが、家の中なら許容範囲でしょう。たぶん。

USBドングルで音の取り込み精度が段違いになる

今回一番の発見がここです。付属のLoop120 USBドングル経由だと、マイクのサンプリングレートが48kHzになります。サンプリングレートとは「1秒間に音を何回取り込むか」の数値で、高いほど声を細かく正確にデジタル化できます。

これがBluetooth直接接続だと16kHz。つまりドングル経由はBluetoothの3倍の細かさで音を取り込めることになります。AirPods Pro 3でも24kHzなので、ドングル経由はAirPodsの2倍の精度です。

なぜこんな差が出るかというと、ドングルの中に独立したBluetoothスタックが入っていて、Mac側はこれをUSBオーディオデバイスとして認識します。だからBluetoothのコーデック制約を受けないんです。

ちなみにぼくが普段デスクで使っているSHURE MV7+もUSB接続で48kHz。つまりドングル経由なら据え置きマイクと同じ精度で音を取り込めます。Aqua Voiceの認識精度も体感で明らかにドングル経由の方が上でした。

AI音声入力をヘビーに使いたいなら、ドングルなしのOpenComm2ではなく、UCモデル(ドングル付き)を選ぶべきです。ここは断言できます。

装着感は「つけているのを忘れる」レベル

35gしかないので、1日つけっぱなしでも全然負担になりません。フルチタニウムフレームにシリコンコーティングで、触り心地も良く安っぽさは一切ありません。さすがはShokz。

ただ、メガネをかけていると耳の付け根で少し干渉します。装着はできますが、外す時にメガネも一緒に持っていかれそうになるのは注意です。ここは慣れが必要でしょうか。

バッテリーは通話最大16時間。ぼくの使い方だと1日使い切っても切れたことがありません。USB-Cで充電できるようになったのも2025 Upgradeの嬉しいポイントで、5分の急速充電で2時間使えます。

音楽鑑賞としては正直厳しい

音楽再生の音質は期待しないほうがいいです。骨伝導の宿命で、低音を響かせると本体が振動しているのがわかります。カナル型イヤホンには遠く及びません。

だからぼくはAirPods Pro 3と併用しています。スピーカーはAirPods、マイクはOpenComm2。この使い分けがベストだと思っています。

あと、キャリングケースがデカいです。35gの軽量ヘッドセットに対してケースは重厚すぎます。質感は良いんですけどね。

ボタン1つでAqua Voiceを操作する(上級者向け)

以下のコードの実行は自己責任でお願いします。 macOSのシステムAPI(IOKit / CoreGraphics)を使用しており、環境によっては動作が異なる場合があります。

ここからはかなりマニアックな話です。OpenComm2のマルチファンクションボタンを、Aqua Voiceのハンズフリーモード起動・停止ボタンに変えてしまいました。

仕組みとしては、Loop120ドングルがヘッドセットのボタン操作をUSB HIDイベントとして送信しているので、それをSwiftで書いた自作デーモンでインターセプトしてFnキー操作に変換しています。

面白いのは、デバイスの状態(スタンバイ vs マイク使用中)でHIDイベントの種類が切り替わること。Karabiner-Elementsだと片方しか捕捉できず、起動はできても停止ができませんでした。だから専用デーモンを作る必要があったんです。

以下がそのSwiftコードです。macOSのターミナルにペーストしてコンパイル・実行できます。

Step 1:ソースコードの作成とコンパイル

以下をターミナルにそのままペーストしてください。Swiftソースファイルの作成、コンパイル、インストールまでを一括で行います。

cat > /tmp/shokz-aquavoice.swift << 'SWIFT_EOF'
import Foundation
import IOKit
import IOKit.hid
import CoreGraphics

// Shokz VendorID(Loop110/120共通)
let vendorID = 13585

let kVK_Function: CGKeyCode = 0x3F

func simulateFnPress() {
    let src = CGEventSource(stateID: .hidSystemState)
    if let down = CGEvent(keyboardEventSource: src, virtualKey: kVK_Function, keyDown: true),
       let up = CGEvent(keyboardEventSource: src, virtualKey: kVK_Function, keyDown: false) {
        down.post(tap: .cghidEventTap)
        up.post(tap: .cghidEventTap)
    }
}

func simulateFnDoubleTap() jjjjjjj{
    simulateFnPress()
    usleep(50000)
    simulateFnPress()
}

let manager = IOHIDManagerCreate(kCFAllocatorDefault, IOOptionBits(kIOHIDOptionsTypeNone))
let matchDict: [String: Any] = [kIOHIDVendorIDKey as String: vendorID]
IOHIDManagerSetDeviceMatching(manager, matchDict as CFDictionary)
IOHIDManagerScheduleWithRunLoop(manager, CFRunLoopGetCurrent(), CFRunLoopMode.defaultMode.rawValue)

let openResult = IOHIDManagerOpen(manager, IOOptionBits(kIOHIDOptionsTypeNone))
if openResult != 0 {
    print("ERROR: Cannot open HID manager (code: \(openResult))")
    print("Grant Input Monitoring + Accessibility permission.")
    exit(1)
}

let devices = IOHIDManagerCopyDevices(manager) as? Set<IOHIDDevice> ?? []
if devices.isEmpty { print("ERROR: Shokz dongle not found."); exit(1) }

let callback: IOHIDValueCallback = { context, result, sender, value in
    let element = IOHIDValueGetElement(value)
    let usagePage = Int(IOHIDElementGetUsagePage(element))
    let usage = Int(IOHIDElementGetUsage(element))
    let intValue = IOHIDValueGetIntegerValue(value)

    switch (usagePage, usage) {
    case (12, 205) where intValue == 1:
        simulateFnDoubleTap()
    case (11, 47):
        simulateFnPress()
    default:
        break
    }
}

IOHIDManagerRegisterInputValueCallback(manager, callback, nil)
print("shokz-aquavoice running. Press Ctrl+C to stop.")
CFRunLoopRun()
SWIFT_EOF

swiftc /tmp/shokz-aquavoice.swift -o /tmp/shokz-aquavoice \
  -framework CoreGraphics -framework IOKit && \
mkdir -p ~/.local/bin && \
cp /tmp/shokz-aquavoice ~/.local/bin/ && \
echo "Build & install OK"

Step 2:権限の付与

システム設定から以下の2つの権限を付与してください。

  • 入力監視:システム設定 → プライバシーとセキュリティ → 入力監視 → ターミナル(Terminal)をON

  • アクセシビリティ:システム設定 → プライバシーとセキュリティ → アクセシビリティ → shokz-aquavoice をON(初回実行時にダイアログが出ます)

権限を変更したら、ターミナルを一度閉じて再起動してください。

Step 3:動作テスト

~/.local/bin/shokz-aquavoice

「shokz-aquavoice running.」と表示されたら、ヘッドセットのマルチファンクションボタンを押してみてください。Aqua Voiceのハンズフリーモードが起動すれば成功です。もう一度押すと停止します。Ctrl+Cでデーモンを終了できます。

Step 4:ログイン時の自動起動(LaunchAgent登録)

以下をターミナルにペーストすると、Macログイン時にデーモンが自動で起動するようになります。

cat > ~/Library/LaunchAgents/com.shokz.aquavoice.plist << EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.shokz.aquavoice</string>
  <key>ProgramArguments</key>
  <array>
    <string>$HOME/.local/bin/shokz-aquavoice</string>
  </array>
  <key>RunAtLoad</key><true/>
  <key>KeepAlive</key><true/>
  <key>StandardOutPath</key>
  <string>/tmp/shokz-aquavoice.log</string>
  <key>StandardErrorPath</key>
  <string>/tmp/shokz-aquavoice.log</string>
</dict>
</plist>
EOF

launchctl load ~/Library/LaunchAgents/com.shokz.aquavoice.plist && \
echo "LaunchAgent registered. Will auto-start on login."

これでセットアップ完了です。デーモンを停止・削除したい場合は以下を実行します。

launchctl unload ~/Library/LaunchAgents/com.shokz.aquavoice.plist
rm ~/Library/LaunchAgents/com.shokz.aquavoice.plist
rm ~/.local/bin/shokz-aquavoice

注意点として、このデーモンを使うとマルチファンクションボタンのPlay/Pause機能がAqua Voiceに置き換わるため、ヘッドセットからの音楽再生・一時停止操作はできなくなります。また、この方法ではMacとのBluetoothペアリングを削除してドングルのみで接続する必要があるため、Macへの通話着信にヘッドセットのボタンで応答することもできません。音楽操作はAirPods側で、通話はMac本体から応答する形になります。

なお、上記のコードはmacOS向けです。WindowsでもLoop120が送るUSB HIDイベントは同じ(USB HIDは標準規格)なので、同じ仕組みは実現可能ですが、Windows HID APIやSendInput APIを使った別途実装が必要になります。

Web上を調べましたが、この手法の公開事例はほぼ見つかりませんでした。同じことをやりたい方の参考になれば嬉しいです。

まとめ

OpenComm2 UC 2025 Upgradeは、ぼくにとって「デスクから解放されるAI音声入力マイク」になりました。

27,880円は安くはありませんが、「骨伝導 + ブームマイク + 48kHz USBドングル」の組み合わせは競合がいません。毎日使うマイクだからこそ、この投資はかなりアリだと思っています。

AI音声入力をガッツリ使っている方には、個人的にかなりおすすめです。気になっている方は試してみる価値があると思います。


この記事のフルバージョンはブログで公開しています。
スペック比較表、SHURE MV7+とのマイク性能比較、Aqua Voice連携デーモンのソースコード全文など、詳細が気になる方はこちらをどうぞ

いいなと思ったら応援しよう!

じゃが よろしければ応援お願いします! いただいたチップは活動費に使わせていただきます!