Can★Do無線イヤホンをハックしたかった話

あらまし

  • Can★Doとかに売っているBluetooth機器をハックしてみたい!

  • とりあえず、購入してPCに繋いでみた(ペアリング)

  • 特に何もしなくてもマイクやスピーカーが使えてしまった…

本文

こんにちは、星杜なぎさです。
あらましからネタバレをかましておりますが、特に気にしません。
今回も文章の添削等は何もしないスタイルで記載していきたいと思います。

今回の失敗談はですね、ちょっとややこしいのですが、
「100均のBluetooth機器(マイク+イヤホン)をPythonと連携できたら、いろいろつかえそうだよね!」と思ったので試してみたら、何も苦労することなく使えてしまった(拍子抜けした)という話です。
これで1つの記事を書こうかと思ったら、簡単すぎて、記事にまとめる意味がなさそう、なので供養だけしておこう、という感じです。

思い返してみれば、「Bluetoothを使うから、PythonライブラリはBleakを使う必要がある」と勝手に勘違いしていたのがダメだったようです。

結論から言うと「Bluetoothイヤホンは、接続(ペアリング)したら、有線接続のオーディオとほぼ同じように使用できる」ので、Bluetoothでつながっているなんてことは意識せずに、普通にPCのマイクやスピーカーを使う感覚で使える、というわけです。

手順

1. Bluetoothワイヤレスイヤホンを入手します

写真は、Can★Doで購入したもの。660円

2. PCとペアリングする

「設定」→「デバイス」→「Bluetooth」 から ペアリングできます

3. Pythonで使ってみる

以前書いた記事(【Python】録音と再生(SoundCard, SoundFile)|星杜なぎさ (note.com))のプログラムを実行してみる

はい、普通にマイク・スピーカーともに認識します

これ、普通に録音も再生もできそうね…

4. 一応、録音・再生を試してみた

以前のコードを改造して、3秒間録音
その音声を再生するプログラムを作成し実行

import soundcard as sc
import soundfile as sf

fs = 44100
recording_sec = 5

output_wave_path = "rec.wav"

# 録音
ble_mic = sc.get_microphone("RS-BTEMS01 Hands-Free AG Audio")

with ble_mic.recorder(samplerate=fs) as mic:
    print("Recording...")
    data = mic.record(numframes=fs*recording_sec)
    print("Saving...\n")
    sf.write(output_wave_path, data, fs)



# 再生
ble_speaker = sc.get_speaker("RS-BTEMS01 Hands-Free AG Audio")

with ble_speaker.player(samplerate=fs) as sp:
    print(f"Reading...({output_wave_path})")
    data, fs = sf.read(output_wave_path)
    print("Playing...\n")
    sp.play(data)

はい、問題なく音も取れてるし、再生もできましたね…

「rec.wav」も正常に録音できておりました…

まとめ

  • よーするに、ただの不完全燃焼

  • 当初想定していた、「無線で音声を録音する」「無線で音を鳴らす」は達成できているので、知見は溜まりました、と

  • ハッカソンやPoC作成では協力なデバイスとして活用できそう

    • Bluetooth(無線)で音声データを取得できる

    • Bluetooth(無線)で音データを出力できる

    • バッテリー搭載のため、コンセントなしで数時間は動かせる

今後どこかの機会で、Whisper(音声認識)やVOICEVOX(音声生成)、LLMと組み合わせて何か作れたらいいなー

この記事が気に入ったらサポートをしてみませんか?