ご存知の方も多いと思いますが、「モスキート音」というのがあります。
何年か前、テレビでやっていました。
年を取るほど高音は聞き取れなくなるので、
蚊の羽音のような高い音は、オヤジは気にならないが、聞こえる若者にはすごく耳障り。
といった代物です。
思いつきで、高音を聞き取れるかどうか、テストするアプリをPythonで作ってみました。
今回はごく小さいので何とかなりますが、ウィンドウデザイナがないとやっぱりキツイか?
GUIライブラリはTkinterを使いました。
なおwinsound.Beepで出す関係上、Windows以外で動くかはわかりません。
beepコマンドを入れれば動くはずですが、試してません(Winしか持ってません)。
#encoding:utf-8 from __future__ import ( with_statement, division, print_function, ) import os import sys from functools import partial from Tkinter import * from tkFont import * import webbrowser author = u"doloop" Webpage = u"http://doloopwhile.blogspot.com/" try: import winsound except ImportError: import subprocess def beepsound(frequency, duration): #apt-get install beep subprocess.call("beep -f {0} -l {1}".format(frequency, duration)) else: def beepsound(frequency, duration): winsound.Beep(frequency, duration) class MainFrame(Frame): def __init__(self, *a, **kw): Frame.__init__(self, *a, **kw) self.duration_var = IntVar(self, 1000) beep_panel = LabelFrame(self, text=u"Beep the PC’s speaker(Hz).") beep_panel.pack() self.beep_buttons = [] buttons = Frame(beep_panel) for freq in xrange(1000, 20000 + 1, 1000): row = (freq - 1000) // 5000 column = (freq - 1000) % 5000 text = unicode(freq).center(5) btn = Button(buttons, text=text, command=partial(self.beep, freq) ) btn.grid(row=row, column=column, sticky=N+S+W+E) buttons.pack() dur_panel = LabelFrame(self, text=u"duration of sound(milliseconds).") dur_panel.pack() dur_scale = Scale( dur_panel, orient=HORIZONTAL, from_=0, to=2000, resolution=100, tickinterval=500, variable=self.duration_var ) dur_scale.pack(fill=BOTH) url_label = Label( self, cursor="hand2", fg="blue", text="{0}({1})".format(author, Webpage), takefocus=True, ) font = Font(font=url_label["font"]) font["underline"] = True url_label["font"] = font url_label.bind('<Button-1>', self.on_url_clicked) url_label.pack() def on_url_clicked(self, event): webbrowser.open(Webpage) def beep(self, freq): beepsound(freq, self.duration_var.get()) def main(): root = Tk() for freq in xrange(1000, 20000 + 1, 1000): beepsound(freq, 100) root.title(os.path.basename(sys.argv[0])) f = MainFrame(root) f.pack() root.mainloop() if __name__ == "__main__": main()
素直に白状すると、ここの同様のソフトのパクリです。