morse_code_1.py

#!/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)