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 }) => { >