diff --git a/src/assets/UI/bena.png b/src/assets/UI/bena.png
new file mode 100644
index 0000000..966786f
Binary files /dev/null and b/src/assets/UI/bena.png differ
diff --git a/src/assets/UI/john.png b/src/assets/UI/john.png
new file mode 100644
index 0000000..90e1520
Binary files /dev/null and b/src/assets/UI/john.png differ
diff --git a/src/assets/UI/placeholder2.jpg b/src/assets/UI/placeholder2.jpg
new file mode 100644
index 0000000..60e507f
Binary files /dev/null and b/src/assets/UI/placeholder2.jpg differ
diff --git a/src/assets/UI/playbackBG.png b/src/assets/UI/playbackBG.png
new file mode 100644
index 0000000..b5e98f3
Binary files /dev/null and b/src/assets/UI/playbackBG.png differ
diff --git a/src/assets/UI/playbackBG2.png b/src/assets/UI/playbackBG2.png
new file mode 100644
index 0000000..3c3eb82
Binary files /dev/null and b/src/assets/UI/playbackBG2.png differ
diff --git a/src/assets/UI/productionBG.png b/src/assets/UI/productionBG.png
new file mode 100644
index 0000000..fd2ae61
Binary files /dev/null and b/src/assets/UI/productionBG.png differ
diff --git a/src/assets/UI/productionBG2.png b/src/assets/UI/productionBG2.png
new file mode 100644
index 0000000..f0081f0
Binary files /dev/null and b/src/assets/UI/productionBG2.png differ
diff --git a/src/assets/index.js b/src/assets/index.js
index 38aea19..b493749 100644
--- a/src/assets/index.js
+++ b/src/assets/index.js
@@ -165,23 +165,37 @@ export const mockups = {
import writingBG from "./UI/writingBG.png";
import studioBG from "./UI/studioBG.png";
import studioBG2 from "./UI/studioBG2.png";
+import productionBG from "./UI/productionBG.png";
+import productionBG2 from "./UI/productionBG2.png";
+import playbackBG from "./UI/playbackBG.png";
+import playbackBG2 from "./UI/playbackBG2.png";
export const background = {
writingBG,
studioBG,
studioBG2,
+ productionBG,
+ productionBG2,
+ playbackBG,
+ playbackBG2,
};
import nathalie from "./UI/nathalie.png";
import theo from "./UI/theo.png";
+import bena from "./UI/bena.png";
+import john from "./UI/john.png";
export const ai = {
nathalie,
theo,
+ bena,
+ john,
};
import placeholder from "./UI/placeholder.jpg";
+import placeholder2 from "./UI/placeholder2.jpg";
export const img = {
placeholder,
+ placeholder2,
};
diff --git a/src/components/DragDropTest.js b/src/components/DragDropTest.js
new file mode 100644
index 0000000..4ebd8f6
--- /dev/null
+++ b/src/components/DragDropTest.js
@@ -0,0 +1,137 @@
+import { View, Text, ScrollView, StyleSheet, Dimensions } from "react-native";
+import React, { useState } from "react";
+import Animated, {
+ runOnJS,
+ useAnimatedGestureHandler,
+ useAnimatedStyle,
+ useSharedValue,
+ withSpring,
+} from "react-native-reanimated";
+import { PanGestureHandler } from "react-native-gesture-handler";
+
+const { width } = Dimensions.get("window");
+
+const DragDropTest = () => {
+ const [leftItems, setLeftItems] = useState([
+ "fortnite",
+ "apex",
+ "callofduty",
+ ]);
+ const [rightItems, setRightItems] = useState([]);
+
+ const draggingItem = useSharedValue(null);
+ const translateX = useSharedValue(0);
+ const translateY = useSharedValue(0);
+
+ const moveItem = (item) => {
+ setLeftItems((items) => items.filter((i) => i !== item));
+ setRightItems((items) => [...items, item]);
+ };
+
+ const gestureHandler = useAnimatedGestureHandler({
+ onStart: (_, ctx) => {
+ ctx.startX = translateX.value;
+ ctx.startY = translateY.value;
+ },
+ onActive: (event, ctx) => {
+ translateX.value = ctx.startX + event.translationX;
+ translateY.value = ctx.startY + event.translationY;
+ },
+ onEnd: () => {
+ if (translateX.value > width / 2) {
+ runOnJS(moveItem)(draggingItem.value);
+ }
+ translateX.value = withSpring(0);
+ translateY.value = withSpring(0);
+ draggingItem.value = null;
+ },
+ });
+
+ const renderDraggable = (item) => {
+ const style = useAnimatedStyle(() => ({
+ transform: [
+ { translateX: draggingItem.value === item ? translateX.value : 0 },
+ { translateY: draggingItem.value === item ? translateY.value : 0 },
+ ],
+ zIndex: draggingItem.value === item ? 10 : 0,
+ }));
+
+ return (
+ {
+ draggingItem.value = item;
+ }}
+ >
+
+ {item}
+
+
+ );
+ };
+
+ return (
+
+
+ Left
+ {leftItems.map(renderDraggable)}
+
+
+
+ Right
+ {rightItems.map((item) => (
+
+ {item}
+
+ ))}
+
+
+ );
+};
+
+export default DragDropTest;
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ paddingTop: 50,
+ },
+ scrollWrapper: {
+ flexDirection: "row",
+ justifyContent: "space-around",
+ },
+ scroll: {
+ width: width / 2.2,
+ height: "90%",
+ backgroundColor: "#f0f0f0",
+ borderRadius: 10,
+ margin: 5,
+ padding: 10,
+ },
+ title: {
+ fontWeight: "bold",
+ fontSize: 16,
+ marginBottom: 10,
+ },
+ item: {
+ backgroundColor: "#aaf",
+ padding: 15,
+ marginVertical: 5,
+ borderRadius: 10,
+ },
+ text: {
+ color: "#333",
+ textAlign: "center",
+ },
+});
diff --git a/src/data/data.js b/src/data/data.js
index debca5e..ff08dec 100644
--- a/src/data/data.js
+++ b/src/data/data.js
@@ -33,6 +33,186 @@ export const EMOTION_CONVEY = [
"déclare une frustration, ressentiment, énergie tournée vers la révolte.",
color: ["#FF0000", "#99999900"],
},
+ {
+ title: "La Peur",
+ description:
+ "suggère l’anxiété, incertitude, perception du monde comme dangereux, tendance à l’évitement.",
+ color: ["#0900FF", "#99999900"],
+ },
+ {
+ title: "L’humour",
+ description:
+ "insinue par allusions, sous-entendus, voire absurdité et jeux de mots. Plaisante sur le contexte.",
+ color: ["#FFFFFF", "#99999900"],
+ },
+ {
+ title: "Le Courage",
+ description:
+ "invoque la force et la capacité d’avancer malgré la peur. Volonté d’affronté la vie, ouverture au changement positif.",
+ color: ["#FF441E", "#99999900"],
+ },
+ {
+ title: "L’llumination",
+ description:
+ "évoque la conscience pure, unité avec le tout, symbole de pureté et sagesse ultime.",
+ color: ["#CBD074", "#99999900"],
+ },
+ {
+ title: "La Paix",
+ description:
+ "suggére la paix intérieure inébranlable, la sérénite, la tranquilité profonde.",
+ color: ["#6CF0FF", "#99999900"],
+ },
+ {
+ title: "La Raison",
+ description:
+ "expose l'utilisation optimale de la logique, discernement, prise de décisions objectives et détachées. Clarté mentale.",
+ color: ["#4437A9", "#99999900"],
+ },
+ {
+ title: "L’Acceptation",
+ description:
+ "laisse entendre l'arrêt de la résistance, l'équilibre obtenu, la capacité à changer ou à d'accepter ce qui ne peut lʼêtre.",
+ color: ["#80D475", "#99999900"],
+ },
+ {
+ title: "La Volonté",
+ description:
+ "déclare ma motivation à agir, l'énergie, l'autodiscipline, la recherche dʼamélioration et dʼefficacité.",
+ color: ["#FF9E1E", "#99999900"],
+ },
+ {
+ title: "Le Désir",
+ description:
+ "laisse entendre un attachement à l’acquisition, la passion, la dépendance à des besoins, des personnes ou des objets extérieurs.",
+ color: ["#8C3F2C", "#99999900"],
+ },
+ {
+ title: "La Neutralité",
+ description:
+ "mentionne l’acceptation de la vie telle qu’elle est, détachement émotionnel, l’absence de jugement.",
+ color: ["#AFAFAF", "#99999900"],
+ },
+ {
+ title: "La Fierté",
+ description:
+ "expose un sentiment de supériorité, un besoin de reconnaissance externe.",
+ color: ["#D0BE00", "#99999900"],
+ },
+ {
+ title: "Le Chagrin",
+ description:
+ "exprime la tristesse profonde, perte, état de deuil ou de dépression, la mélancolie.",
+ color: ["#53519F", "#99999900"],
+ },
+ {
+ title: "L’Apathie",
+ description:
+ "laisse entendre l’absence d’émotion, le désespoir, absence d’énergie, neutralité des réactions, résignation face à la vie.",
+ color: ["#565656", "#99999900"],
+ },
+ {
+ title: "La Culpabilité",
+ description:
+ "sous-entends l’auto-blâme, l’incapacité à se pardonner, excuses répétées, des justifications alambiquées.",
+ color: ["#7B1B1B", "#99999900"],
+ },
+ {
+ title: "La Honte",
+ description:
+ "insinue un sentiment d’humiliation profonde, perte d’estime de soi, tendance à l’auto-dépréciation.",
+ color: ["#8E4746", "#99999900"],
+ },
+];
+
+export const SONG_STYLE = [
+ {
+ title: "Upbeat",
+ description: "Pour une ambiance joyeuse et rythmée",
+ },
+ {
+ title: "Grandios(e)",
+ description: "Pour un sentiment de grandeur",
+ },
+ {
+ title: "Chill",
+ description: "Pour une ambiance détendue ou apaisante, relax",
+ },
+ {
+ title: "Epic",
+ description: "Pour un sentiment grandiose et héroïque",
+ },
+ {
+ title: "Dramatic",
+ description: "Utilisé pour des effets théâtraux ou intenses",
+ },
+ {
+ title: "Comedic",
+ description: "Pour un ton humoristique",
+ },
+ {
+ title: "Theatrical",
+ description: "Pour un style musical qui évoque le théâtre",
+ },
+ {
+ title: "Flamboyant",
+ description: "Pour un style exubérant ",
+ },
+ {
+ title: "Melancholic",
+ description: "ambiance mélancolique",
+ },
+ {
+ title: "Introspective",
+ description: "Pour un caractère introspectif",
+ },
+ {
+ title: "Urban Tragedy",
+ description: "Pour une ambiance de tragédie urbaine",
+ },
+ {
+ title: "Eerie",
+ description: "Pour une ambiance étrange ou inquiétante",
+ },
+ {
+ title: "Mysterious",
+ description: "Pour un sentiment de mystère",
+ },
+ {
+ title: "Melancholic",
+ description: "ambiance mélancolique",
+ },
+];
+
+export const CUSTOM_SONG_STRUCTURE = [
+ "Introduction instrumentale courte.",
+ "Introduction instrumentale longue.",
+ "Ajoute un pré-refrain intrumental.",
+ "Utilisé pour une section contrastant avec les couplets et refrains.",
+ "Indique une section avec un solo Guitare.",
+ "Indique une section avec un solo Guitare électrique.",
+ "Indique une section avec un solo Batterie.",
+ "Indique une section avec un solo Saxo.",
+ "Indique une section avec un solo Violon.",
+ "Indique un moment de pause ou de changement.",
+ "Indique un interlude.",
+ "Indique un interlude mélodique.",
+ "Désigne une grande finition, un apogée.",
+ "Indique un arrêt net de la musique.",
+ "Permet de terminer la chanson en baissant le volume progressivement.",
+ "Indique une transition douce vers le silence.",
+];
+
+export const SONG_STRUCTURE = [
+ "1 couplet, 1 refrain, 1 couplet, 1 refrain",
+ "1 couplet, 1 refrain, 1 couplet, 2 refrains",
+ "1 couplet, 1 refrain, 2 couplets, 1 refrain",
+ "2 couplets, 1 refrain, 2 couplets, 1 refrain",
+ "2 couplets, 1 refrain, 2 couplets, 2 refrains",
+ "2 couplets, 1 refrain, 2 couplets, 1 refrain, 2 couplets, 1 refrain",
+ "2 couplets, 1 refrain, 2 couplets, 1 refrain, 2 couplets, 2 refrains",
+ "3 couplets, 2 refrains (metal)",
+ "Pas de couplet pas de refrain, juste un texte",
];
export const CHOOSE_GENRE = [
@@ -55,49 +235,234 @@ export const CHOOSE_GENRE = [
title: "Blues",
description: "Structure simple, thèmes sur les épreuves de la vie.",
},
+ {
+ title: "Folk",
+ description:
+ "Instruments acoustiques, narration, ancrage dans la tradition populaire.",
+ },
+ {
+ title: "Punk",
+ description:
+ "Énergie brute, textes contestataires, structures simples. Mouvement contre-culturel majeur.musique rebelle aux influences sociales et politiques fortes.",
+ },
+ {
+ title: "Dance",
+ description:
+ "Musique rythmée, conçue pour la danse, souvent électronique ou pop.",
+ },
+ {
+ title: "Grunge",
+ description:
+ "Sous-genre du rock, sons sales, textes introspectifs, popularisé par Nirvana.",
+ },
+ {
+ title: "EDM",
+ description:
+ "Musique électronique dynamique orientée clubs et festivals.Style Tomorrowland.",
+ },
+ {
+ title: "Trap",
+ description:
+ "Sous-genre du rap caractérisé par ses beats lourds et son attitude street. Popularisé à Atlanta, il domine le rap mainstream actuel.",
+ },
+ {
+ title: "Latino",
+ description:
+ "Reggaeton, salsa, bachata et autres styles hispaniques, rythmes dansants et festifs.",
+ },
+ {
+ title: "Dancehall",
+ description:
+ "Style jamaïcain rythmé dérivé du reggae, apprécié pour son énergie festive et sensuelle.",
+ },
+ {
+ title: "Latin Pop",
+ description:
+ "Musique pop Caribbean, Salsa, Merengue, rythmes latinos festifs et dansants.",
+ },
+ {
+ title: "Raggaeton",
+ description:
+ "Mélange latino de reggae, rap et dancehall aux rythmes entraînants. sons latinos modernes.",
+ },
+ {
+ title: "Rock",
+ description:
+ "Genre énergique dérivé du rock'n'roll, porté par guitares électriques et batterie puissante.",
+ },
+ {
+ title: "Rock progressif",
+ description:
+ "Rock complexe, longues compositions, virtuosité instrumentale.",
+ },
+ {
+ title: "Hard Rock",
+ description: "Rock énergique, guitares puissantes, voix souvent rauques.",
+ },
+ {
+ title: "Metal",
+ description:
+ "Dérivé extrême du rock avec des guitares saturées, une batterie énergique et des thèmes souvent sombres.",
+ },
+ {
+ title: "R&B",
+ description: "Genre doux et mélodieux issu du blues, jazz et gospel.",
+ },
+ {
+ title: "Phonk",
+ description:
+ "Samples funk, des voix rap vintage de Memphis, production hachées et vissées, combine à des éléments de jazz. atmosphère sombre et rythmes hypnotiques.",
+ },
+ {
+ title: "House",
+ description:
+ "Style électronique entraînant, rythmiques régulières et grooves dansants. Ambiance clubs, radio et festivals occidentaux.",
+ },
+ {
+ title: "Alternative",
+ description:
+ "Version expérimentale et variée du rock traditionnel, populaire en festivals indé. Caractérisé par attitude anti-mainstream.",
+ },
+ {
+ title: "Indie",
+ description:
+ "Musique indépendante variée, mettant en avant créativité et originalité.",
+ },
+ {
+ title: "Country",
+ description: "Musique traditionnelle américaine d'origine rurale.",
+ },
+ {
+ title: "Synthwave",
+ description:
+ "Musique électronique inspirée de l'esthétique années 80, nostalgique et futuriste. son revival esthétique.",
+ },
+ {
+ title: "Afrobeat",
+ description:
+ "Mélange de musique traditionnelle nigériane, de jazz, du highlife ghanéen, de funk et de chant, accompagné de percussions et de styles vocaux.",
+ },
+ {
+ title: "K-Pop",
+ description:
+ "Genre musical originaire de Corée du Sud qui combine divers styles comme la pop, le hip-hop, le R&B et l'électro. Mélodies accrocheuses.",
+ },
+ {
+ title: "Techno",
+ description:
+ "Musique électronique répétitive originaire de Détroit, tempo rapide, underground. Ambiance club.",
+ },
+ {
+ title: "Funk",
+ description:
+ "Musique rythmique marquée par des basses puissantes et grooves entraînants. pop moderne.",
+ },
+ {
+ title: "Disco",
+ description:
+ "Genre dance festif des années 70 caractérisé par des rythmes répétitifs et entraînants. Vit un revival puissant avec des références pop moderne.",
+ },
+ {
+ title: "New wave",
+ description:
+ "Fusion de punk, pop et électronique, esthétique expérimentale des années 80.",
+ },
+ {
+ title: "Jazz",
+ description:
+ "Genre basé sur l’improvisation et l’expression musicale complexe.",
+ },
+ {
+ title: "Lo-Fi",
+ description:
+ "Musique relaxante à basse qualité sonore, souvent instrumentale et appréciée pour l'étude ou la détente.",
+ },
+ {
+ title: "Bedroom Pop",
+ description:
+ "Pop intimiste. sonorités douces, dream pop, avec une prédominance d'instruments acoustiques, de synthétiseurs et de voix feutrées.",
+ },
+ {
+ title: "Ambient",
+ description:
+ "Musique atmosphérique et immersive privilégiant textures sonores et ambiances relaxantes. recherche de calme.",
+ },
+ {
+ title: "Dream Pop",
+ description:
+ "Pop éthérée aux mélodies oniriques, souvent caractérisée par des effets de guitares et synthés. Adorée pour son esthétique mélancolique dans l'indie occidental.",
+ },
+ {
+ title: "Grime",
+ description:
+ "Genre électronique urbain britannique aux paroles incisives et flow rapide.",
+ },
+ {
+ title: "Hyperpop",
+ description:
+ "Musique expérimentale maximaliste combinant pop, EDM et distorsions vocales exagérées. Gen-Z.",
+ },
+ {
+ title: "Gospel",
+ description:
+ "Musique religieuse afro-américaine, chœurs puissants, influence sur soul et R&B.",
+ },
];
export const VOICE = [
- "Une voix féminine interpretra ta chanson.",
- "Une voix masculine interpretera ta chanson.",
- "Deux voix pour interpreter ta chanson.",
- "Solo vocal puissant et dramatique.",
- "Un chœur gospel pour (dimension spirituelle ou émotionnelle).",
- "Un cri brut et puissant (émotion intense).",
- "Un couplet interprété en rap.",
- "Voix qui raconte une histoire, souvent sans chanter.",
- "Paroles déclamées plutôt que chantées, souvent dans un style poétique ou de slam.",
- "Technique vocale entre parler et chanter, typique de la musique expressionniste.",
- "Sensibilité ",
- "Voix séduisante et sensuelle.",
- "Voix profonde et résonnante.",
- "Voix légère et aérienne.",
- "Voix relaxante et sophistiquée.",
- "Voix synthétique.",
- "Voix découpées pour un style EDM ou future bass.",
- "Effet de distorsion (rendu + agressif).",
- "Slam (Chant parlé).",
- "Rap moderne.",
- "Technique",
- "Chant chargé d'émotion.",
- "Technique vocale rugueuse pour le métal ou le rock.",
- "Voix robotisée ou mécanique, genres électro ou futuristes.",
- "Voix étrange (atmosphère de science-fiction ou de mystère).",
- "Voix grave et intimidante (effet dramatique).",
- "Voix pure et céleste, évoquant la tranquillité ou le divin.",
- "Voix douce et aérienne, avec une touche d'intimité.",
- "Voix chantée dans une tonalité plus aiguë que la normale.",
- "Voix d'enfant (+ d'innocence).",
- "Chant en murmure (+ intime).",
- "Multiples voix superposées (effet harmonique riche).",
- "Voix légère et innocente.",
- "Voix soprano puissante (style opéra).",
- "Chant puissant (styles pop et Broadway).",
- "Mélange subtil de chuchotements et d’harmoniques.",
- "Voix rauque et granuleuse, utilisée dans le blues ou le rock.",
- "Chœur avec une tonalité légère et céleste.",
- "Inspiration et expiration sonores (effets dramatiques).",
- "Changements de volume ou de tonalité dans une même phrase.",
+ {
+ title: "base",
+ data: [
+ "Une voix féminine interpretra ta chanson.",
+ "Une voix masculine interpretera ta chanson.",
+ "Deux voix pour interpreter ta chanson.",
+ "Solo vocal puissant et dramatique.",
+ "Un chœur gospel pour (dimension spirituelle ou émotionnelle).",
+ "Un cri brut et puissant (émotion intense).",
+ "Un couplet interprété en rap.",
+ "Voix qui raconte une histoire, souvent sans chanter.",
+ "Paroles déclamées plutôt que chantées, souvent dans un style poétique ou de slam.",
+ "Technique vocale entre parler et chanter, typique de la musique expressionniste.",
+ ],
+ },
+ {
+ title: "Sensibilité",
+ data: [
+ "Voix séduisante et sensuelle.",
+ "Voix profonde et résonnante.",
+ "Voix légère et aérienne.",
+ "Voix relaxante et sophistiquée.",
+ "Voix synthétique.",
+ "Voix découpées pour un style EDM ou future bass.",
+ "Effet de distorsion (rendu + agressif).",
+ "Slam (Chant parlé).",
+ "Rap moderne.",
+ ],
+ },
+ {
+ title: "Technique",
+ data: [
+ "Chant chargé d'émotion.",
+ "Technique vocale rugueuse pour le métal ou le rock.",
+ "Voix robotisée ou mécanique, genres électro ou futuristes.",
+ "Voix étrange (atmosphère de science-fiction ou de mystère).",
+ "Voix grave et intimidante (effet dramatique).",
+ "Voix pure et céleste, évoquant la tranquillité ou le divin.",
+ "Voix douce et aérienne, avec une touche d'intimité.",
+ "Voix chantée dans une tonalité plus aiguë que la normale.",
+ "Voix d'enfant (+ d'innocence).",
+ "Chant en murmure (+ intime).",
+ "Multiples voix superposées (effet harmonique riche).",
+ "Voix légère et innocente.",
+ "Voix soprano puissante (style opéra).",
+ "Chant puissant (styles pop et Broadway).",
+ "Mélange subtil de chuchotements et d’harmoniques.",
+ "Voix rauque et granuleuse, utilisée dans le blues ou le rock.",
+ "Chœur avec une tonalité légère et céleste.",
+ "Inspiration et expiration sonores (effets dramatiques).",
+ "Changements de volume ou de tonalité dans une même phrase.",
+ ],
+ },
];
export const INSTRUMENTS = [
diff --git a/src/navigation/MainStack.js b/src/navigation/MainStack.js
index 02faecc..4cb5f2a 100644
--- a/src/navigation/MainStack.js
+++ b/src/navigation/MainStack.js
@@ -30,6 +30,8 @@ import PouchReady from "../screens/Studio/PouchReady";
import PhotoCover from "../screens/Studio/PhotoCover";
import AddPhotoCover from "../screens/Studio/AddPhotoCover";
import FinishCompose from "../screens/Studio/FinishCompose";
+import Production from "../screens/Production/Production";
+import ProductionOnboarding from "../screens/Production/ProductionOnboarding";
const screenOptions = {
headerShown: false,
@@ -133,6 +135,14 @@ const screens = [
name: Routes.FinishCompose,
component: FinishCompose,
},
+ {
+ name: Routes.ProductionOnboarding,
+ component: ProductionOnboarding,
+ },
+ {
+ name: Routes.Production,
+ component: Production,
+ },
];
export default function Main() {
diff --git a/src/navigation/Routes.js b/src/navigation/Routes.js
index fcda3e3..3f4d50f 100644
--- a/src/navigation/Routes.js
+++ b/src/navigation/Routes.js
@@ -39,4 +39,7 @@ export const Routes = {
PhotoCover: "PhotoCover",
AddPhotoCover: "AddPhotoCover",
FinishCompose: "FinishCompose",
+
+ ProductionOnboarding: "ProductionOnboarding",
+ Production: "Production",
};
diff --git a/src/screens/Onboarding.js b/src/screens/Onboarding.js
index 4b4409f..a25f0bd 100644
--- a/src/screens/Onboarding.js
+++ b/src/screens/Onboarding.js
@@ -17,6 +17,7 @@ export default ({ navigation }) => {
>