10
июнь
2021
15:54

Создание звуковых MP3 файлов для изучения CW на основе словаря

10 июнь 2021 15:54

Задача - создать MP3 файл для тренировки приема телеграфа на слух, на основе слов русского языка, которые следовали бы в случайном порядке, но не повторялись.

План-максимум состоит в том, чтобы получить на выходе неограниченное множество MP3 файлов для прослушивания в карманном MP3 / FM приемнике.

1. Создание словаря наиболее употребимых русских слов

Нашел в Интернете частотный словарь русского языка и выбрал из него наиболее часто употребимые слова.
freqrnc2011.ods.zip

С помощью стандартного фильтра LibreOffice Calc убрал из таблицы имена собственные и слова с дефисами и разделил их на файлы по длине в буквах. Из 2 букв, из 3 букв и т.д., до 18 букв.

Скачать файлы с русскими словами в архиве:
top_rus.zip

Имена собственные в архиве:
names_rus.zip

Пример слов из 4 букв:
торс
орда
мирт
бриг
срам
ярмо
утюг
чудь
воск
имам
усик
елей
инет
ерик
фарш
фукс
клад
туша
цаца
киот
клоп
хаки

2. Обратная сортировка (перемешивание) слов в случайном порядке.

Сочинил команду:

cat top4.txt | tr ' ' '\n' | uniq | sort -R

где:

  • top4.txt - имя входного файла.
  • команда tr заменяет пробелы на переводы строки.
  • sort - R - операция, обратная сортировке (перемешивание слов в случайном порядке).

Вывод производится в стандартный поток stdout т.е. можно после этой команды использовать другие, берущие исходные данные из потока ввода stdin.

3. Генерация MP3 файла - при помощи команды ebook2cw

sudo apt-get install ebook2cw

Запуск программы производится командой ebook2cw с указанием входного файла и параметров, примерно так:

ebook2cw top3.txt -w 20 -e 20 -f 800 -b 64 -o 20wpm -d 60 -u -t 20wpm

ebook2cw ebook2cw is a command line program which converts a plain text ebook to Morse
code audio files. It works on several platforms, including Windows and Linux.

где:

-w 20 - скорость WPM (слов в минуту)
-e 20 - эффективная скорость WPM (слов в минуту)
-f 800 - частота тона телеграфа 800 (Герц)
-b 64 - битрейт, т.е. скорость результирующего MP3 файла
-q 8 - качество MP3 от 1 до 9 (1 - лучшее качество, 9 - худшее)
-o 20wpm - префикс имени файла "20wpm"
-d 60 - разделить файл на фрагменты (duration) по 60 секунд
-u - использовать кодировку Unicode для русского языка.
-t 20wpm - заголовок в ID теге выходного файла

В результате, очень быстро (со скоростью в 300 быстрее обычной) будет создан файл mp3 с "морзянкой":

ebook2cw 0.8.2 - (c) 2013 by Fabian Kurz, DJ1YFK

Reading configuration file: /home/vladimir/.ebook2cw/ebook2cw.conf

Speed: 20wpm, Freq: 800Hz, Chapter: >CHAPTER<, Encoding: UTF-8
Effective speed: 20wpm, Extra word spaces: 0.0, QRQ: 0min, reset QRQ: yes
Chapter limit: 60 seconds, Encoder: MP3

Starting 20wpm0000.mp3
Warning: don't know CW for unicode &#1019;
words: 405, time: 14:30
Finishing 20wpm0000.mp3

Total words: 405, total time: 14:30
Conversion time: 2s (Speedup: 290.0x)

4. Соединил всё вместе

Команда для запуска в терминале приобрела следующий вид:

cat top2.txt | tr ' ' '\n' | uniq | sort -R | ebook2cw -w 20 -e 20 -f 800 -b 64 -o 20wpm-2- -d 60 -u -t 20wpm

где top2.txt - имя входного файла.
20wpm-2- - префикс выходного файла MP3.

Пример результата работы команды
(Для набора слов из 4 букв, скорость CW равна 18 WPM)

Исходные слова:
1.txt.zip

Команда:

cat 1.txt | tr ' ' '\n' | uniq | sort -R | ebook2cw -w 18 -e 18 -f 800 -b 64 -o 18wpm-1- -d 60 -u -t 18wpm

Результат запуска (-o 18wpm-1-):

Результат повторного запуска (-o 18wpm-2-):

Результат повторного запуска (-o 18wpm-3-):

5. Многократный запуск команды для создания различных файлов MP3

Команду можно запускать многократно. Если параметр -o один и тот же, каждый раз создаётся файл с одними и тем же именем, но разным содержимым.

Поставил перед собой задачу изменять суффикс файла (-01, -02 - 03 и т.д.) после каждого запуска команды.
Задачу решил на следующий день. Написал скрипт на языке командных файлов BASH:

#!/bin/bash
#
# #This is a script that creates number of mp3 files with morse code
# Usage: hello some.txt 5 20
# where some.txt - input text file
# 5 - number of files
# 20 - speed wpm

txt=$1
max=$2
speed=$3

if [ -z txt ]; then
echo "Input text file:"
read txt
fi

if [ -z $max ]; then
echo "Number of MP3 files to create:"
read max
fi

if [ -z $speed ]; then
echo "CW speed in WPM:"
read speed
fi

echo max = $max
echo speed = $speed

delim="-"
ext=".mp3"

for (( cnt=1; cnt<=$max; cnt++ )); do

name1=$(printf "%02dwpm" $speed)
name2=$(printf "%03d" $cnt)

title=$txt$delim$name1$delim$name2
name=$title$ext

cat $txt | tr ' ' '\n' | uniq | sort -R | ebook2cw -u -f 800 -b 64 -w $speed -e $speed -t $title
mv -v "Chapter0000.mp3" "${name}"
done

exit 0


Использование likecw.sh:
запуск

bash likecw.sh 1-й_параметр 2-й_параметр 3-й_параметр

1-й_параметр - имя входного файла, например top7.txt
2-й_параметр - число файлов для генерации
3-й_параметр - скорость WPM

Пример:

bash likecw.sh top7.txt 5 20
  • создаст на основе top7.txt 5 файлов MP3 со скоростью CW 20wpm.

likecw.sh.zip

6. Как одной командой обработать все TXT файлы

Для каждого из файлов от top2.txt до top18.txt создается по 5 вариантов файлов MP3 со скоростью 20wpm:

bash likecw.sh top{2..18}.txt 5 20


Похожие публикации