#!/bin/bash
# koradio : mms라디오 방송을 녹음하는 간단한 bash 스크립트
# 만든이 : 아치리눅스 한국사용자모임 / 작은상자 ( linukizx at gmail.com)
# 의존 : ffmpeg, mplayer(mmsrip사용시 미필요)
# 의존 : mp3/ogg tag이용시 : mp3info perl-mp3-tag vorbis-tools

# 한국 주요 방송국 홈페이지 :
# SBS http://radio.sbs.co.kr/
# KBS http://kbs.co.kr
# MBC http://imbc.com

help() { 	#도움말
echo "koradio Ver. 0.2.1"
echo "간단한 한국 라디오 방송(mms) 녹음기"
echo "제작자 : 아치리눅스/작은상자"
echo "e-mail : linukizx at gmail.com"
echo ""
echo "사용법: koradio <옵션>... [녹음파일]"
echo " -t, --time=녹음시간(분)	녹음 시작 후 해당시간 이후 koradio가 녹음을 종료"
echo " -f, --format=녹음포멧		녹음 완료 후 변환할 음악 파일 포멧을 지정"
echo "				기본값은 wma"
echo " -d, --dir=저장 디렉토리	녹음 파일을 저장할 디렉토리를 지정합니다"
echo " -s, --station=방송국명	태그와 파일명에 쓰일 방송국명을 지정합니다"
echo " -a, --addr=방송주소		녹음 할 방송주소를 mms:/나 http://를 포함해서 지정"
echo " -t, --time=녹음시간		녹음 시작 후 해당시간 이후 녹음을 종료"
echo " -o, --oldfile=일수		녹음된 파일의 보관 일수를 지정합니다"
echo ""
echo "cron에 등록 하여서 사용하시면 편리합니다."
}

set_var() { 	# 변수지정
#	sec=$3

	RADIO_ADDR=""                   # 라디오 방송국 주소
	FILENAME=`date +"%y%m%d"`"_${RADIO_STATION}_${RADIO_TITLE}" # 녹음 파일명
	TAGDATE=`date +"%y%m%d"`			# TAG에 입력할 날짜정보
	savetime=$(($sec * 60))           # 녹음시간은 분단위로 입력 받아 초로 변환
	SAVEDIR="/media/data2/radio/data" # 저장 디렉토리 (주의 : 저장 디렉토리에 다른 파일은 저장하지마세요)
	SAVEDAY=7                       # 녹음 파일 저장기간 (일단위)
	FORMAT="mp3"					# 방송 저장을 할 파일형식 (mms은 wma)
	downloader="mplayer"			# 방송을 저장하는데 쓰일 프로그램 지정, 기본은 mplayer
	RADIO_ALBUM="RADIO_STATION"				# 테그정보용 라디오 방송제목
	RADIO_DJ="DJ"					# 테그정보용 라디오 DJ
	RADIO_TYPE="wma"				# 라디오 방송국 타입 (wma, mp3)
}

set_radioaddr() { # 방송국 주소 지정
	if [ "$RADIO_STATION" = "fm4u" ]; then # 목포 MBC FM4U
		RADIO_ADDR="mms://210.221.163.25/encoder-fM"
		RADIO_TYPE="wma"
	elif [ "$RADIO_STATION" = "mbcfm" ]; then # 원주 MBC 표준FM
		RADIO_ADDR="mms://live.wjmbc.co.kr/fm2"
		RADIO_TYPE="wma"
	elif [ "$RADIO_STATION" = "sbspowerfm" ]; then # SBS POWER FM (TBC, SBS의 대구지역방송국)
		RADIO_ADDR="mms://203.251.80.180/tbc_fm" #128kbps
  		$RADIO_ADDR="http://heisice.com/radio/redirect_to/sbs_powerfm/" # 64kbps
		RADIO_TYPE="wma"
	elif [ "$RADIO_STATION" = "sbslovefm" ]; then # SBS LOVE FM (64kbps)
		RADIO_ADDR="http://heisice.com/radio/redirect_to/sbs_lovefm"
		RADIO_TYPE="wma"
	elif [ "$RADIO_STATION" = "tbcfm" ]; then # 원주 MBC 표준FM
		RADIO_ADDR="mms://live.wjmbc.co.kr/fm2"
		RADIO_TYPE="wma"
	elif [ "$RADIO_STATION" = "ebs" ]; then # EBS
		RADIO_ADDR="mms://211.218.209.124/L-FM_300k"
		RADIO_TYPE="wma"
	elif [ "$RADIO_STATION" = "kbs" ]; then # KBS 부산총국 128 kbps
		RADIO_ADDR="mms://218.36.204.144:8080"
		RADIO_TYPE="wma"
	elif [ "$RADIO_STATION" = "kbsrki" ]; then # KBS RKI 32 kbps
		RADIO_ADDR="mms://211.233.92.66/rki/musictrap_audio/A10480.wma"
		RADIO_TYPE="wma"
	else
		echo "ERROR : 라디오 방송 주소가 지정 되지 않았습니다."
		exit 1
	fi
}

mmsrip() { 		# 실제 mms를 저장하는 부분
		# Mplayer
	if [ $downloader = "mplayer" ]; then
		mplayer -dumpstream -dumpfile ${SAVEDIR}/${FILENAME}_tmp.${RADIO_TYPE} ${RADIO_ADDR} &
		local mplayer_pid=$!
		sleep ${savetime}
		kill $mplayer_pid

		# mmsrip : mplayer보다 점유율은 더 낮지만 따로 설치해야 합니다., 좀 문제 잇는 코드 -_-;
	elif [ "$downloader" = "mmsrip" ]; then
		if [ "$RADIO_TYPE" = !"wma" ]; then
			echo "error : mmsrip은 mms가 아닌 형식의 방송을 지원하지 않습니다."
			exit 1
		fi
		mmsrip -o "${SAVEDIR}/${FILENAME}_tmp.${RADIO_TYPE} ${RADIO_ADDR}" --delay="${savetime}" -q
	fi
}

	
convert_audio() {
	if [ "$FORMAT" = "wma" ]; then	
		ffmpeg -i ${SAVEDIR}/${FILENAME}_tmp.${RADIO_TYPE} -acodec copy ${SAVEDIR}/${FILENAME}.${FORMAT} -atag fource/tag

	elif [ "$FORMAT" = "ogg" ]; then
		ffmpeg -i ${SAVEDIR}/${FILENAME}_tmp.${RADIO_TYPE}" -acodec vorbis -aq 100 "${SAVEDIR}/${FILENAME}.${FORMAT} -atag fource/tag
		# 태그정보 입력
		lltag	--yes -a "${RADIO_DJ}" -t "$RADIO_TITLE" -A "$RADIO_ALBUM" -g "Radio" -d "$TAGDATE" "${SAVEDIR}/${FILENAME}.${FORMAT}"

	elif [ "$FORMAT" = "mp3" ]; then
		ffmpeg -i ${SAVEDIR}/${FILENAME}_tmp.${RADIO_TYPE} -acodec libmp3lame -aq 100 -ab 120 ${SAVEDIR}/${FILENAME}.${FORMAT} -atag fource/tag
		# 태그정보 입력
		lltag	--yes -a "${RADIO_DJ}" -t ${RADIO_TITLE} -A ${RADIO_ALBUM} -g "Radio" -d $TAGDATE --mp3v2 ${SAVEDIR}/${FILENAME}.${FORMAT}
	fi
}

rm_temp() {
	rm "${SAVEDIR}/${FILENAME}_tmp.${RADIO_TYPE}"
}	
	
rm_oldfile() {
	find ${SAVEDIR} -ctime +${SAVEDAY} -exec rm -f '{}' \;
}

LANG=ko_KR.UTF-8

# Main
if [ $# = 0 ]
then
  help
  exit 0
fi

# 임시 지정
sec=$3
RADIO_STATION="$1"				# 라디오 방송국명
RADIO_TITLE="$2"		# 라디오 방송제목

set_var
set_radioaddr
mmsrip
convert_audio
rm_temp
rm_oldfile

exit 0
