#!/bin/bash

if [ $# -ne 1 ]; then
	printf "usage: %s file.tmp.mka\n" "$0"
	exit 1
fi

FILE="$1"

# -----------------------------------------------------------------------------
# Device information                                                       {{{1
# -----------------------------------------------------------------------------

# Change this to change what devices are being recorded
DEV_0="16 Channel System IN (Virtual Audio Cable)"
DEV_1="マイク (HyperX QuadCast S)"
DEV_2="Discord VC IN (Virtual Audio Cable)"
DEV_3="Game VC IN (Virtual Audio Cable)"

# -----------------------------------------------------------------------------
# Metadata                                                                 {{{1
# -----------------------------------------------------------------------------

# Timestamp
DATE_TS="$(date '+%s.%N')"

# Track names
# Change to reflect how the tracks show in the MKA file
TRK_0="Game Audio [Stereo Reference]"
TRK_1="Voice - DKK [HyperX QuadCast S]"
TRK_2="Voice - Discord VC [Reference]"
TRK_3="Voice - Game VC [Reference]"

# -----------------------------------------------------------------------------
# Phase 2: Process all delays                                              {{{1
# -----------------------------------------------------------------------------

I=0
INITIAL="0"
FILTER=""
MAP=""
DELAYS="$(\
	ffprobe \
		-loglevel quiet \
		-select_streams a \
		-show_entries stream=start_time \
		-of csv=p=0 \
		-i "$FILE"\
)"

for DELAY in $DELAYS; do
	if [ $I -eq 0 ]; then
		INITIAL="$DELAY"
		DELTA="0"
		MAP="-map \"[ch${I}]\""
		FILTER="[0:a:${I}]adelay=delays=${DELTA}:all=1[ch${I}]"
	else
		DELTA="$(echo "$INITIAL $DELAY" | awk '{ printf("%d", ($2 - $1) * 1000); }')"
		MAP="${MAP} -map \"[ch${I}]\""
		FILTER="${FILTER};[0:a:${I}]adelay=delays=${DELTA}:all=1[ch${I}]"
	fi
	let "I++"
done

# -----------------------------------------------------------------------------
# Phase 3: Correct and Compress                                            {{{1
# -----------------------------------------------------------------------------

eval "ffmpeg -i \"${FILE}\" -filter_complex \"${FILTER}\" ${MAP} -c:a flac -compression_level 12 -metadata DATE_ENCODED=\"$(date +%Y-%m-%dT%H:%M:%S.%N%:z)\" -metadata:s:a:0 title=\"${TRK_0}\" -metadata:s:a:1 title=\"${TRK_1}\" -metadata:s:a:2 title=\"${TRK_2}\" -metadata:s:a:3 title=\"${TRK_3}\" \"${FILE}.repaired.mka\""
