리눅스: 어학공부를 위한 mp3 플레이어
2019.01.18 10:06
다음은 어학공부시 대화를 녹음해놓고 들어볼 때 유용한 유틸입니다.
녹음자체는 여러유틸이 있으니 사용하시고요
(저는 audacity를 이용하네요.)
네이버 매일어학 교재들 보면 아주 짧은 30초도 안되는 대화들로 이루어져 있는데요
이들을 날자순으로 저장해놓고 정해진 기간이상을 충분히 복습하는 것이 무엇보다 중요할겁니다.
특히 중국어같이 발음이 어려운 경우는 느리게 들어보는 것이 유용할텐데요-사실 중국어 때문에 만든 스크립트입니다.
체계적으로 들어야 하는데 매번 손으로 조절한다든가 그때마다 변하는 플레이리스트를 만드는 것이 번거로와서 복습을 체계적으로 잘 안하게되더군요.
그래서 그런 부분을 긁어주기 위해 만든 스크립트입니다.
이 스크립트의 유용한점은 많은 화일들의 범위를 지정할 수도 있고,
각각의 화일을 1.0속도 0.7배속도 1.0속도 등으로 시퀜스를 정해서 들려줄 수 있습니다.
(사실 스크립트는 vlc플레이어의 커맨드모드를 이용합니다. vlc는 어떤 리눅스는 딸려오기도 하고 어떤 리눅스는 깔아야할거에요.)
mp3말고 vlc에서 지원되는 화일은 모두 되고요.
어쩌면 자동으로 플레이되어야하는 데모나 프레젠테이션용도로 유용할수 있습니다.
아무튼 동영상이든 음악이든 플레이리스트를 만들기 번잡한 경우 유용합니다.
쓰임은,
sqplay * -r -l : 모두 섞어서 반복하여 들려줌
sqplay * 5 : 5번째 화일만 들려줌
sqplay * 5-10 : 5번째에서 10번째 화일까지 차례로 들려줌
5번째부터 10번째까지의 파일을 다른속도로 1.0 (제속도) 0.8 (80%속도) 1.0 (다시 제속도)로 3번을 들려주려면
다음처럼 사용합니다.
sqplay * 5-10 -s1.0-0.8-1.0
* 대신에 find나 ls의 리눅스 명령의 결과를 넣을 수도 있습니다. 예를 들어
$(ls * -t) 로 시간순으로 정렬결과를 넣을수도 있습니다.
조금 실제적인 예로,
최신으로 녹음된 5화일만 순서를 섞어서 1.0-0.8-1.0속도로 3번씩 반복하여 복습하고자 한다면,
sqplay $(ls * -t | tail -5) s1.0-0.8-1.0 -r
학습계획을 세워서 명령어를 저장해 놓으면 좋겠죠.
예를 들어 저는 20190111.mp3 같은 식으로 날자별로 화일을 저장하고 .bashrc에 다음과 같은 앨리어스를 사용해서 만들어놓습니다.
alias review10='cd ~/Documents/chinese && sqplay $(date --date="10 days ago" --rfc-3339=date | tr -d -).mp3 -s1.0-0.7-0.8-1.0'
이런식으로 항상 현재보다 10일 전의 것을 복습할 수 있어서 체계적 학습에 좋습니다.
저는 매우 만족스럽게 사용하는 스크립트네요.
유용히 사용하시길 바랍니다~
------------다음을 sqplay 로 저장하고 chmod +x sqplay 로 실행권한 줘서 사용--------------------------
#!/bin/bash
# Sequence player script using cvlc player
# Usage:
# sqplay $(ls * | tail -3) // play last 3 files
# sqplay $(ls * -t) 5-10 // sort by time then play from 5th to 10th
# sqplay * 5 -l // play 5th file repeatedly.
# sqplay *.mp3 12-20 -r -l // play all mp3 files from 12th to 20 with random order repeatedly.
# sqplay *.mp3 12-20 -s1.0-0.5-0.7 // play all mp3 files from 12th to 20 with speed of 1.0, 0.5, 0.7 (3times per file)
# sqplay * -l // play everything endlessly
#
# Limitation : space in file is not allowed.
range_ptrn="^[0-9]+\-[0-9]+$"
number_ptrn="^[0-9]+$"
# default range (all)
range_arr[0]=1
range_arr[1]=100000
# default play sequence
# you can give option with format i.e. ( -s1.0-0.5-0.8 )
seq_arr=( 1.0 )
# handle options
for arg in $@; do
if [[ $arg == -* ]]
then
if [[ $arg == "-l" ]]; then
loop=1
elif [[ $arg == "-r" ]]; then
shuffle=1
elif [[ $arg == "-v" ]]; then
verbose=1
elif [[ $arg == \-s* ]]; then
seq=$(echo $arg | cut -c 3-)
readarray -t seq_arr <<< $(echo $seq | tr "-" "\n")
fi
elif [[ $arg =~ $range_ptrn ]]; then
readarray -t range_arr <<< $(echo $arg | tr "-" "\n")
elif [[ $arg =~ $number_ptrn ]]; then
range_arr[0]=$arg
range_arr[1]=$arg
else
if [ -z ${l+x} ]; then
l="$arg"
else
l+=$'\n'
l+="$arg"
fi
fi
done
# make play list from given range
i=1
for fn in $l; do
if [[ $i -ge ${range_arr[0]} ]] && [[ $i -le ${range_arr[1]} ]]
then
if [ -z ${lst+x} ]; then
lst=$fn
else
lst+=$'\n'
lst+=$fn
fi
fi
(( i+=1 ))
done
# shuffle
if [[ $shuffle -eq 1 ]]; then
if [[ $verbose -eq 1 ]]; then
printf "shuffling...\n"
fi
lst=$(printf "$lst" | sort -R)
fi
for (( ; ; ))
do
for fn in $lst
do
n=1
for seq in "${seq_arr[@]}"; do
printf "playing $fn #$n at speed $seq\n"
cvlc -I ncurses $fn --rate="$seq" --play-and-exit
sleep 1
(( n+=1 ))
done
done
if [[ $loop -ne 1 ]]
then
break
fi
done
오.... 재밌네요.. ^^