Spaces:
Configuration error
Configuration error
| package utils | |
| import ( | |
| "fmt" | |
| "os" | |
| "os/exec" | |
| "strings" | |
| ) | |
| func ffmpegCommand(args []string) (string, error) { | |
| cmd := exec.Command("ffmpeg", args...) // Constrain this to ffmpeg to permit security scanner to see that the command is safe. | |
| cmd.Env = os.Environ() | |
| out, err := cmd.CombinedOutput() | |
| return string(out), err | |
| } | |
| // AudioToWav converts audio to wav for transcribe. | |
| // TODO: use https://github.com/mccoyst/ogg? | |
| func AudioToWav(src, dst string) error { | |
| commandArgs := []string{"-i", src, "-format", "s16le", "-ar", "16000", "-ac", "1", "-acodec", "pcm_s16le", dst} | |
| out, err := ffmpegCommand(commandArgs) | |
| if err != nil { | |
| return fmt.Errorf("error: %w out: %s", err, out) | |
| } | |
| return nil | |
| } | |
| // AudioConvert converts generated wav file from tts to other output formats. | |
| // TODO: handle pcm to have 100% parity of supported format from OpenAI | |
| func AudioConvert(src string, format string) (string, error) { | |
| extension := "" | |
| // compute file extension from format, default to wav | |
| switch format { | |
| case "opus": | |
| extension = ".ogg" | |
| case "mp3", "aac", "flac": | |
| extension = fmt.Sprintf(".%s", format) | |
| default: | |
| extension = ".wav" | |
| } | |
| // if .wav, do nothing | |
| if extension == ".wav" { | |
| return src, nil | |
| } | |
| // naive conversion based on default values and target extension of file | |
| dst := strings.Replace(src, ".wav", extension, -1) | |
| commandArgs := []string{"-y", "-i", src, "-vn", dst} | |
| out, err := ffmpegCommand(commandArgs) | |
| if err != nil { | |
| return "", fmt.Errorf("error: %w out: %s", err, out) | |
| } | |
| return dst, nil | |
| } | |