プッシュホンでは、受話器を上げて発信音を確認し、697Hzの音と1209Hzの音を同時に送話器の近くで鳴らせば「1」をプッシュしたことになります。ウィキペディアには「DTMF(英: Dual-Tone Multi-Frequency)は、0から9までの数字と、*、#、A、B、C、Dの記号の計16種類の符号を、低群・高群の2つの音声周波数帯域の合成信号音で送信する方法である」と説明されています。「DTMF」で検索すればすぐ表が見つかるでしょう。これを見れば、例えば「7」なら852Hzと1209Hz、と分かります。
コナン君の映画でこれを使ったものがありました。面白い映画でした。
www.omoshiro-suugaku.com
音の高さを変えるだけでこれを使えます。以下のようにすればOK。「1」をプッシュするwavファイルが作れます。
#======================================================== #waveファイルを作る。1をプッシュ。 # import sys import numpy as np import wave pi = np.pi fs = 22050 #サンプリング周波数 s = 20 #20秒の長さのwaveファイルを作る #s秒分のサウンドデータを作るには、fs*sフレームが必要。 N = fs * s #フレーム数(サウンドデータ数。左右で1フレーム) t = np.arange(0, s, 1/fs) #横軸 #sin(2π*□*t) の周波数は□の部分。16ビットで録音するので、 #-32768~32767がデータの範囲であることに注意。 #この範囲の外に出ると音が潰れる。 #---------------------- ldata = 15000 * np.sin(2*pi*697*t) #697の部分を852に書き換えると「7」になる rdata = 15000 * np.sin(2*pi*1209*t) #1209は1,7で共通 #---------------------- sounddata = np.zeros(N * 2, dtype= "int16") #左右のデータ分が必要 sounddata[0::2] = ldata sounddata[1::2] = rdata writewave = wave.Wave_write("keshitene.wav") #保存先ファイル #setparamの引数は #(nchannels, sampwidth, framerate, nframes, comptype, compname) #先頭から順にステレオ、サンプルのサイズ2バイト、 #サンプリング周波数fs、フレーム数N。 writewave.setparams((2, 2, fs, N, 'NONE', 'NONE')) writewave.writeframes(sounddata) #編集したサウンドデータを保存 writewave.close() sys.exit() #========================================================
これを実行してできあがったwavファイルを再生して、送話器に聞かせるのです。これで「1」をプッシュしたことに。続けて「7」をプッシュするwavファイルを2回再生すれば「177」をプッシュしたことになる……はずです。実際に職場の電話で実験してみました。しかし、ダイヤル回線らしく、何度試しても反応なし。「#」を先に押すとかネットには色々書いてあるのですが、ダメでした。どこかでプッシュホンを探して試します。うまくいったらまた記事にします。