Beispiel #1
0
def preview_wave(message,
                 wpm=WPM,
                 frequency=FREQUENCY,
                 framerate=FRAMERATE,
                 amplitude=AMPLITUDE,
                 word_ref=WORD):
    """
    Listen (preview) wave

    sounddevice is required http://python-sounddevice.readthedocs.org/
    $ pip install sounddevice
    """
    samp_nb = samples_nb(message=message,
                         wpm=wpm,
                         framerate=framerate,
                         word_spaced=False)
    import sounddevice as sd
    lst_bin = _encode_binary(message)
    amplitude = _limit_value(amplitude)
    seconds_per_dot = _seconds_per_dot(word_ref)  # 1.2
    a = [
        calculate_wave(i, lst_bin, wpm, frequency, framerate, amplitude,
                       seconds_per_dot) for i in range(samp_nb)
    ]
    sd.play(a, framerate, blocking=True)
Beispiel #2
0
def preview_wave(message, wpm=WPM, frequency=FREQUENCY, framerate=FRAMERATE, amplitude=AMPLITUDE, word_ref=WORD):
    """
    Listen (preview) wave

    sounddevice is required http://python-sounddevice.readthedocs.org/
    $ pip install sounddevice
    """
    samp_nb = samples_nb(message=message, wpm=wpm, framerate=framerate, word_spaced=False)
    import sounddevice as sd
    lst_bin = _encode_binary(message)
    amplitude = _limit_value(amplitude)
    seconds_per_dot = _seconds_per_dot(word_ref)  # 1.2
    a = [calculate_wave(i, lst_bin, wpm, frequency, framerate, amplitude, seconds_per_dot)
         for i in range(samp_nb)]
    sd.play(a, framerate, blocking=True)
Beispiel #3
0
def main():
    parser = argparse.ArgumentParser(prog="msound", description='Create or listen morse code sound')
    parser.add_argument('-c', '--channels', help="Number of channels to produce", default=CHANNELS, type=int)
    parser.add_argument('-b', '--bits', help="Number of bits in each sample", choices=(BITS,), default=BITS, type=int)
    parser.add_argument('-r', '--rate', help="Sample rate in Hz", default=FRAMERATE, type=int)
    parser.add_argument('-a', '--amplitude', help="Amplitude of the wave on a scale of 0.0-1.0.", default=AMPLITUDE, type=float)
    parser.add_argument('-f', '--frequency', help="Frequency of the wave in Hz", default=FREQUENCY, type=float)
    parser.add_argument('-o', '--filename', help="The file to generate.", default='')
    parser.add_argument('-m', '--message', help='Message', default='SOS')
    parser.add_argument('-d', '--duration', help='Element duration', default=None, type=float)
    parser.add_argument('-s', '--speed', help="Speed in wpm (Words per minutes)", default=None, type=float)
    parser.add_argument('-w', '--word-ref', help="Reference word", default=WORD)
    parser.add_argument('-l', '--loop', dest='loop', action='store_true')
    args = parser.parse_args()

    message = args.message
    element_duration = args.duration
    wpm = args.speed
    framerate = args.rate
    amplitude = args.amplitude
    word_ref = args.word_ref

    element_duration, wpm = _get_speed(element_duration, wpm)

    display(message, wpm, element_duration, word_ref)

    if args.filename == '':  # preview
        preview_wave(message, wpm, args.frequency, framerate, amplitude, word_ref)
        while(args.loop):
            message_with_space = " " + message
            preview_wave(message_with_space, wpm, args.frequency, framerate, amplitude, word_ref)
    else:
        channels = ((generate_wave(message=message, wpm=wpm, framerate=framerate, skip_frame=0),) for i in range(args.channels))

        # convert the channel functions into waveforms
        samp_nb = samples_nb(message=message, wpm=wpm, framerate=framerate, word_spaced=False)
        samples = compute_samples(channels, samp_nb)

        if args.filename == '-':  # write to console
            filename = sys.stdout
            write_wavefile(filename, samples, samp_nb, args.channels, args.bits // 8, args.rate)
        else:  # write the samples to a .wav file
            filename = args.filename

        write_wavefile(filename, samples, samp_nb, args.channels, args.bits // 8, args.rate)
Beispiel #4
0
def main():
    parser = argparse.ArgumentParser(
        prog="msound", description='Create or listen morse code sound')
    parser.add_argument('-c',
                        '--channels',
                        help="Number of channels to produce",
                        default=CHANNELS,
                        type=int)
    parser.add_argument('-b',
                        '--bits',
                        help="Number of bits in each sample",
                        choices=(BITS, ),
                        default=BITS,
                        type=int)
    parser.add_argument('-r',
                        '--rate',
                        help="Sample rate in Hz",
                        default=FRAMERATE,
                        type=int)
    parser.add_argument('-a',
                        '--amplitude',
                        help="Amplitude of the wave on a scale of 0.0-1.0.",
                        default=AMPLITUDE,
                        type=float)
    parser.add_argument('-f',
                        '--frequency',
                        help="Frequency of the wave in Hz",
                        default=FREQUENCY,
                        type=float)
    parser.add_argument('-o',
                        '--filename',
                        help="The file to generate.",
                        default='')
    parser.add_argument('-m', '--message', help='Message', default='SOS')
    parser.add_argument('-d',
                        '--duration',
                        help='Element duration',
                        default=None,
                        type=float)
    parser.add_argument('-s',
                        '--speed',
                        help="Speed in wpm (Words per minutes)",
                        default=None,
                        type=float)
    parser.add_argument('-w',
                        '--word-ref',
                        help="Reference word",
                        default=WORD)
    parser.add_argument('-l', '--loop', dest='loop', action='store_true')
    args = parser.parse_args()

    message = args.message
    element_duration = args.duration
    wpm = args.speed
    framerate = args.rate
    amplitude = args.amplitude
    word_ref = args.word_ref

    element_duration, wpm = _get_speed(element_duration, wpm)

    display(message, wpm, element_duration, word_ref)

    if args.filename == '':  # preview
        preview_wave(message, wpm, args.frequency, framerate, amplitude,
                     word_ref)
        while (args.loop):
            message_with_space = " " + message
            preview_wave(message_with_space, wpm, args.frequency, framerate,
                         amplitude, word_ref)
    else:
        channels = ((generate_wave(message=message,
                                   wpm=wpm,
                                   framerate=framerate,
                                   skip_frame=0), )
                    for i in range(args.channels))

        # convert the channel functions into waveforms
        samp_nb = samples_nb(message=message,
                             wpm=wpm,
                             framerate=framerate,
                             word_spaced=False)
        samples = compute_samples(channels, samp_nb)

        if args.filename == '-':  # write to console
            filename = sys.stdout
            write_wavefile(filename, samples, samp_nb, args.channels,
                           args.bits // 8, args.rate)
        else:  # write the samples to a .wav file
            filename = args.filename

        write_wavefile(filename, samples, samp_nb, args.channels,
                       args.bits // 8, args.rate)