summaryrefslogtreecommitdiff
path: root/internal/gui/generator.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/gui/generator.go')
-rw-r--r--internal/gui/generator.go23
1 files changed, 16 insertions, 7 deletions
diff --git a/internal/gui/generator.go b/internal/gui/generator.go
index ca9d854..92ead40 100644
--- a/internal/gui/generator.go
+++ b/internal/gui/generator.go
@@ -91,8 +91,12 @@ func (a *Application) generateAudio(word string) (string, error) {
rand.Seed(time.Now().UnixNano())
voice := allVoices[rand.Intn(len(allVoices))]
- // Update audio config with random voice
+ // Generate random speed between 0.90 and 1.00
+ speed := 0.90 + rand.Float64()*0.10
+
+ // Update audio config with random voice and speed
a.audioConfig.OpenAIVoice = voice
+ a.audioConfig.OpenAISpeed = speed
// Create audio provider
provider, err := audio.NewProvider(a.audioConfig)
@@ -127,11 +131,18 @@ func (a *Application) generateAudio(word string) (string, error) {
}
// Save audio attribution
- if err := a.saveAudioAttribution(word, outputFile, voice); err != nil {
+ if err := a.saveAudioAttribution(word, outputFile, voice, speed); err != nil {
// Non-fatal error, just log it
fmt.Printf("Warning: Failed to save audio attribution: %v\n", err)
}
+ // Save voice metadata for GUI display
+ metadataFile := filepath.Join(wordDir, "audio_metadata.txt")
+ metadata := fmt.Sprintf("voice=%s\nspeed=%.2f\n", voice, speed)
+ if err := os.WriteFile(metadataFile, []byte(metadata), 0644); err != nil {
+ fmt.Printf("Warning: Failed to save audio metadata: %v\n", err)
+ }
+
return outputFile, nil
}
@@ -154,8 +165,6 @@ func (a *Application) generateImagesWithPrompt(word string, customPrompt string,
Size: "512x512", // Half of 1024x1024
Quality: "standard",
Style: "natural",
- CacheDir: "./.image_cache",
- EnableCache: a.config.EnableCache,
}
searcher = image.NewOpenAIClient(openaiConfig)
@@ -216,7 +225,7 @@ func (a *Application) generateImagesWithPrompt(word string, customPrompt string,
usedPrompt := openaiClient.GetLastPrompt()
if usedPrompt != "" {
// Save the prompt to disk immediately for this word
- promptFile := filepath.Join(wordDir, "prompt.txt")
+ promptFile := filepath.Join(wordDir, "image_prompt.txt")
os.WriteFile(promptFile, []byte(usedPrompt), 0644)
// Only update UI if this word is still the current word
@@ -237,12 +246,12 @@ func (a *Application) generateImagesWithPrompt(word string, customPrompt string,
}
// saveAudioAttribution saves attribution info for generated audio
-func (a *Application) saveAudioAttribution(word, audioFile, voice string) error {
+func (a *Application) saveAudioAttribution(word, audioFile, voice string, speed float64) error {
attribution := fmt.Sprintf("Audio generated by OpenAI TTS\n\n")
attribution += fmt.Sprintf("Bulgarian word: %s\n", word)
attribution += fmt.Sprintf("Model: %s\n", a.audioConfig.OpenAIModel)
attribution += fmt.Sprintf("Voice: %s\n", voice)
- attribution += fmt.Sprintf("Speed: %.2f\n", a.audioConfig.OpenAISpeed)
+ attribution += fmt.Sprintf("Speed: %.2f\n", speed)
if a.audioConfig.OpenAIInstruction != "" {
attribution += fmt.Sprintf("\nVoice instructions:\n%s\n", a.audioConfig.OpenAIInstruction)