71 lines
1.5 KiB
Go
71 lines
1.5 KiB
Go
package app
|
|
|
|
import (
|
|
"os"
|
|
|
|
"codeberg.org/danjones000/strip-beats/media"
|
|
"codeberg.org/danjones000/strip-beats/utils"
|
|
"github.com/rivo/tview"
|
|
)
|
|
|
|
func validateNumber(input string, lastChar rune) bool {
|
|
num, err := utils.HourMinSecToSeconds(input)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
if num < 0 {
|
|
return false
|
|
}
|
|
|
|
if file == nil {
|
|
return true
|
|
}
|
|
|
|
st := file.WantedAudioStream()
|
|
if st == nil {
|
|
return true
|
|
}
|
|
|
|
return num <= st.Duration
|
|
}
|
|
|
|
func fadeFile() error {
|
|
tmp, err := os.CreateTemp("", "audio.*.mka")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
tmp.Close()
|
|
|
|
var start, stop, up, down float64
|
|
|
|
cont := tview.NewApplication()
|
|
form := tview.NewForm().
|
|
AddInputField("Beginning time?", "0", 0, validateNumber, func(input string) {
|
|
start, _ = utils.HourMinSecToSeconds(input)
|
|
}).
|
|
AddInputField("Ending time? (leave 0 for full time)", "0", 0, validateNumber, func(input string) {
|
|
stop, _ = utils.HourMinSecToSeconds(input)
|
|
}).
|
|
AddInputField("Fade in duration?", "0", 0, validateNumber, func(input string) {
|
|
up, _ = utils.HourMinSecToSeconds(input)
|
|
}).
|
|
AddInputField("Fade out duration?", "0", 0, validateNumber, func(input string) {
|
|
down, _ = utils.HourMinSecToSeconds(input)
|
|
}).
|
|
AddButton("Start", func() {
|
|
cont.Stop()
|
|
})
|
|
|
|
form.SetBorder(true).SetTitleAlign(tview.AlignLeft)
|
|
if err := cont.SetRoot(form, true).EnableMouse(true).Run(); err != nil {
|
|
return err
|
|
}
|
|
|
|
err = media.TrimWithFade(*file, tmp.Name(), start, stop, up, down)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
SetTmpFile(tmp.Name())
|
|
return nil
|
|
}
|