Python

【Python】PaSoRiでカードを読み取ったら音を鳴らす

投稿日:2019年9月2日 更新日:

目的

前回、PaSoRiの上にICカードを置いた状態からカードの中の情報を読み取る、というものをPythonで試しましたが、世の中のカード読み取りの感じを出すためにカードが置かれるまで待ち受けで、カードをかざすと読み取って音を鳴らすものを試しに作ってみたい。

音源

フリーで使用可能な効果音を提供してくださっている以下のサイトを利用させていただきました。

https://soundeffect-lab.info/

好みの効果音をダウンロードして、適当なフォルダに入れておきます。ファイル形式はmp3かwavが良いです。

音を鳴らすためのライブラリ

Pythonで音を再生するライブラリとしてPyAudioというものが有名みたいです。ただ、他にも調べてみるとpydubというライブラリもありました。このpydubですが、単に音を再生するだけなら非常に少ないコードで実装できます。

今回はpydubで音を鳴らすことにします。

2019/0906追記:pydubを使用する場合でもpyaudioをimportしていないと何故か怒られましたので、結局pyaudioもimportするコードにしました。

コード

カードの待ち受けと読み取りの肝となるnfcのメソッド関連はこちらのマニュアルを参考にして書きます。

https://buildmedia.readthedocs.org/media/pdf/nfcpy/latest/nfcpy.pdf

主要な部分としては以下です。

① nfc.ContactlessFrontend()
ローカルデバイスとの通信を管理するメソッドです。PaSoRiをusb接続している場合は引数に’usb’を入れておき、最初に呼び出しておけば良いようです。

②clf.sense(target)
カードを検知するためのメソッドです。ターゲットを検知した時にIDmを返します。optionで検知のiteration(繰り返し数)とinterval(間隔)などを設定できます。

それでは実際のコードです。

import nfc
import time
import pyaudio
from pydub import AudioSegment
from pydub.playback import play

# 効果音ファイルの読み込み
sound = AudioSegment.from_file("your_sound.mp3", "mp3")

def check_ic():
    print('Waiting Now')

    # usb接続のNFCリーダを定義
    clf = nfc.ContactlessFrontend('usb')

    target = clf.sense(nfc.clf.RemoteTarget("212F"), iterations=1, interval=1)

    #カードが見つかったら読み取りに入る
    if not target_res is None:    
      tag = nfc.tag.activate(clf, target)
      tagdump=tag.dump()
         
      # 再生
      play(sound)
    
      #次の読み取りまで1秒待つ
      time.sleep(1)

    clf.close()

while True:
    check_ic()

結論

あまり手の込んだことはやれていませんが、とりあえず、カードをかざすと読み取って音が出る、という部分だけはできました。

-Python

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

【Python】算術平均と幾何平均計算

Contents1 目的2 平均3 算術平均4 幾何平均5 まとめ 目的 統計学を使いこなしたい。でも参考書を読んでいても難しい概念や数式が沢山出てきて、その時は分かったつもりになっても後で実践的に使 …

【Python】PaSoRiによるICカードの読み取り

Contents1 目的2 環境3 方針4 Step1 : WinUSBのインストール5 Step2 : libusbのインストール6 Step3 : Pythonによる実装7 結果 目的 交通機関な …

Python formatの基本的な使い方

Contents1 目的2 文字列整形3 型指定 目的 python3系の文字列操作のメソッドであるformatの基本的な使い方について勉強する。 文字列整形 formatの引数に文字列等(intやf …

VSCodeから外部のJupyterへ接続する

Contents1 目的2 環境3 Step1 : Jupyterのconfig設定4 Step2 : VSCodeからの接続5 Step3 : Jupyterを使用して確認6 まとめ 目的 自端末の …

【Python】標準偏差と分散の計算

Contents1 目的2 標準偏差3 Pythonによる標準偏差の計算4 分散 目的 以前の記事で四分位偏差によりデータの分散度の計算を行いましたが、四分位偏差ではデータの代表値である四分位数のみを …

言語切り替え

カテゴリー