# MPO2x.py
#
# A DEMO, very crude, Morse Code Practice Oscillator...
# Tested on Debian 6.0.0 using Python 2.6.6 and 2.7.2 and PCLinuxOS 2009 using Python 2.5.2.
# It may well work on earlier Python versions but is untested.
#
# (C)2011-2012, B.Walker, G0LCU. Now issued as Public Domain...
#
# The device, "/dev/audio" is required for this to work. Install "oss-compat" from your
# distro's repository if you haven't got "/dev/audio". Ensure the sound system is NOT
# in use by other programs and use the OS's mixing facilities to set the levels.
#
# Copy the file to the Lib folder(/drawer/directory) or where the modules
# reside as "MPO2x.py"...
#
# For a quick way to run just use at the ">>>" prompt:-
#
# >>> import MPO2x<RETURN/ENTER>
#
# And away we go...
#
# Written in such a way that youngsters can understand what is going on.
#
# Enjoy finding simple solutiuons to often very difficult problems... ;o)
def main():
# Just three imports required for this DEMO.
import sys
import termios
import tty
# Set as globals, my choice... ;o)
global character
global delay
global n
character="(C)2011-2012, B.Walker, G0LCU."
delay=75
n=0
# This is a working function; something akin to the BASIC INKEY$ function...
# Reference:- http://code.activestate.com/recipes/134892-getch-like-unbuffered-character-reading-from-stdin/
# Many thanks to Danny Yoo for the above code, modified to suit this program...
# In THIS FUNCTION some special keys do a "break" similar to the "Esc" key inside the program.
# Be aware of this...
def inkey():
fd=sys.stdin.fileno()
remember_attributes=termios.tcgetattr(fd)
tty.setraw(sys.stdin.fileno())
character=sys.stdin.read(1)
termios.tcsetattr(fd, termios.TCSADRAIN, remember_attributes)
return character
while 1:
# A simple clear screen and user display...
for n in range(0,32,1):
print "\n"
print "A simple crude Morse Code Practice Oscillator...\n"
print "Press the 'o', 'p' or 'Esc' keys...\n"
print "Pseudo-paddle simulation, 'o' is the 'dah' and 'p' is the 'dit'...\n"
print "(C)2011-2012, B.Walker, G0LCU. Issued as Public Domain...\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
# Open "/dev/audio" in write mode...
audio=open("/dev/audio", "wb")
# Use the "inkey()" function to get a key character.
character=inkey()
# Get out ensuring that the audio device is closed.
if character==chr(27):
audio.close()
break
# This is a VERY crude simulation of a paddle key to send your Morse Code.
# It IS quirky, but, is there a better way using standard Text Mode Python?
# It uses only the keys "o", "O", "p", "P" and "Esc"...
# Lower case is the slowest speed, upper case the fastest speed.
delay=0
if character=="p": delay=75
if character=="P": delay=50
if character=="o": delay=225
if character=="O": delay=150
# Play a crude sine-wave note at 1KHz of length "delay"...
for n in range(0,delay,1):
audio.write(chr(15)+chr(45)+chr(63)+chr(45)+chr(15)+chr(3)+chr(0)+chr(3))
# Ensure that the audio device is closed after each beep!
audio.close()
main()
# End of MPO2x.py DEMO...
# Enjoy finding simple solutiuons to often very difficult problems... ;o)
Diff to Previous Revision
--- revision 1 2012-01-09 18:58:55
+++ revision 2 2012-01-09 22:49:05
@@ -58,7 +58,7 @@
print "A simple crude Morse Code Practice Oscillator...\n"
print "Press the 'o', 'p' or 'Esc' keys...\n"
print "Pseudo-paddle simulation, 'o' is the 'dah' and 'p' is the 'dit'...\n"
- print "(C)2011-2102, B.Walker, G0LCU. Issued as Public Domain...\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
+ print "(C)2011-2012, B.Walker, G0LCU. Issued as Public Domain...\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
# Open "/dev/audio" in write mode...
audio=open("/dev/audio", "wb")