File size: 3,978 Bytes
5b0d83d
dbe4319
c6b8f95
ad7dc96
c6b8f95
 
dbe4319
c94aff8
c6b8f95
abf8f9e
2348631
96f47bd
c94aff8
2348631
c6b8f95
2348631
abf8f9e
 
 
2348631
96f47bd
c6b8f95
96f47bd
 
 
2348631
22c8d3b
42cf773
 
 
 
22c8d3b
ad7dc96
22c8d3b
c6b8f95
 
ad7dc96
22c8d3b
 
ad7dc96
42cf773
3dc8327
 
 
 
 
ac48b9a
3dc8327
c6b8f95
 
 
 
3dc8327
 
 
ac48b9a
 
 
dbe4319
c6b8f95
ad7dc96
 
ac48b9a
 
 
1b406ee
c6b8f95
ac48b9a
 
 
 
 
 
 
 
 
 
c6b8f95
ac48b9a
 
 
 
 
 
c6b8f95
ac48b9a
 
 
 
 
c6b8f95
ac48b9a
 
 
 
 
c6b8f95
ac48b9a
 
 
 
 
 
 
dbe4319
5b0d83d
ad7dc96
c6b8f95
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import gradio as gr
from transformers import pipeline
from gtts import gTTS
from moviepy.editor import TextClip, CompositeVideoClip, concatenate_videoclips
import numpy as np
from scipy.io.wavfile import write
from pydub import AudioSegment

script_generator = pipeline("text-generation", model="gpt2", truncation=True, max_length=100)


def text_to_speech(script):
    if isinstance(script, list):
        texts = [item['generated_text'] for item in script if isinstance(item, dict) and 'generated_text' in item]
        script = " ".join(texts)
        print("Final script for TTS:", script)  # Debugging line

    if not script.strip():
        raise ValueError("No text to convert to speech.")
        
    tts = gTTS(text=script, lang='en')
    audio_file = 'output.mp3'
    tts.save(audio_file)
    return audio_file


def generate_animation(script):
    if isinstance(script, list):
        texts = [item['generated_text'] for item in script if isinstance(item, dict) and 'generated_text' in item]
        script = " ".join(texts)
    
    lines = script.split('\n')
    clips = []
    for line in lines:
        text_clip = TextClip(line, fontsize=40, color='white', size=(800, 400), bg_color='black', method='caption')
        text_clip = text_clip.set_duration(3)
        clips.append(text_clip)
    final_video = concatenate_videoclips(clips)
    return final_video


def generate_sine_wave(frequency, duration, sample_rate=44100, amplitude=0.5):
    t = np.linspace(0, duration, int(sample_rate * duration), False)
    wave = amplitude * np.sin(2 * np.pi * frequency * t)
    return wave

def generate_kids_music(theme, output_music_file="kids_music.wav"):
    sample_rate = 44100
    duration = 2
    c4_wave = generate_sine_wave(261.63, duration)
    d4_wave = generate_sine_wave(293.66, duration)
    e4_wave = generate_sine_wave(329.63, duration)
    wave = np.concatenate([c4_wave, d4_wave, e4_wave])
    audio_wave = np.int16(wave * 32767)
    write(output_music_file, sample_rate, audio_wave)
    return output_music_file

def generate_kids_animation_with_music(theme, output_video_file="kids_animation.mp4"):
    music_file = generate_kids_music(theme)
    clips = [TextClip(f"Kids Music: {theme}", fontsize=70, color='yellow', size=(800, 400), bg_color='blue', method='caption').set_duration(5)]
    video = CompositeVideoClip(clips)
    video.write_videofile(output_video_file, fps=24)
    return output_video_file, music_file

def generate_comedy_and_animation(prompt):
    script = script_generator(prompt)
    print("Generated script:", script)  # Debugging line
    audio_file = text_to_speech(script)
    video_file = generate_animation(script)
    return script, audio_file, video_file

def generate_kids_content(theme):
    video_file, music_file = generate_kids_animation_with_music(theme)
    return music_file, video_file

with gr.Blocks() as app:
    gr.Markdown("## AI Comedy and Kids Content Generator")

    with gr.Tab("Generate Comedy Animation"):
        prompt_input = gr.Textbox(label="Comedy Prompt")
        generate_btn = gr.Button("Generate Comedy Script and Animation")
        comedy_script = gr.Textbox(label="Generated Script")
        comedy_audio = gr.Audio(label="Generated Audio")
        comedy_video = gr.Video(label="Generated Animation")

        generate_btn.click(
            generate_comedy_and_animation,
            inputs=prompt_input,
            outputs=[comedy_script, comedy_audio, comedy_video]
        )

    with gr.Tab("Generate Kids Music Animation"):
        theme_input = gr.Textbox(label="Kids Music Theme")
        generate_music_btn = gr.Button("Generate Kids Music and Animation")
        kids_music_audio = gr.Audio(label="Generated Music")
        kids_music_video = gr.Video(label="Generated Kids Animation")

        generate_music_btn.click(
            generate_kids_content,
            inputs=theme_input,
            outputs=[kids_music_audio, kids_music_video]
        )

app.launch()