#!/usr/bin/python3
# ====================================================================
# morse code sound on windows 10
# ====================================================================
# for more info: www.geeksforgeeks.org/play-sound-in-python/
# --------------------------------------------------------------------
# because of a problem with windows 10 and playground,
# install an older version of playsound
# pip3 uninstall playsound
# pip3 install playsound==1.2.2
## -------------------------------------------------------------------
# also install pydub
# pip3 install pydub
# ====================================================================
sos = '... --- ...'
import os
import sys
from time import sleep
from pydub import AudioSegment
from playsound import playsound
# ---- windows
dit = os.path.dirname(__file__) + '.\morse_dit.wav'
dah = os.path.dirname(__file__) + '.\morse_dah.wav'
gap = os.path.dirname(__file__) + '.\morse_gap.wav'
##dit = '.\morse_dit.wav'
##dah = '.\morse_dah.wav'
##gap = '.\morse_gap.wav'
# ---- linux/unix
#
#dit = os.path.dirname(__file__) + '/morse_dit.wav'
#dah = os.path.dirname(__file__) + '/morse_dah.wav'
#gap = os.path.dirname(__file__) + '/morse_gap.wav'
#dit = './morse_dit.wav'
#dah = './morse_dah.wav'
#gap = './morse_gap.wav'
# --------------------------------------------------------------------
# play dit/dah sounds
# --------------------------------------------------------------------
def ditdah(s):
for c in s:
if c == '.':
playsound(dit)
#sleep(0.001)
elif c == '-':
playsound(dah)
#sleep(0.001)
elif c == ' ':
playsound(gap)
#sleep(0.001)
else:
sleep(0.01)
# --------------------------------------------------------------------
# concatinate dit/dah wav files
# --------------------------------------------------------------------
def sound_wav(s):
sounds = None
for c in s:
if c == '.':
aseg = AudioSegment.from_wav(dit)
elif c == '-':
aseg = AudioSegment.from_wav(dah)
elif c == ' ':
aseg = AudioSegment.from_wav(gap)
else:
continue
if sounds is None:
sounds = aseg
else:
sounds += aseg
return sounds
# --------------------------------------------------------------------
# ---- main
# --------------------------------------------------------------------
sounds = sound_wav(sos)
sounds.export('.\sounds.wav', format='wav')
playsound('.\sounds.wav')
# ---- another way
#ditdah(sos)