Page 1 of 2
DESIGN ORAVOX en cours
Posted: Sun Jul 06, 2025 1:15 pm
by SergeV
Ola
Pour jean-yves, il serait bon de voir et de nettoyer ce fichier corel pour remettre exactement le format que Xavier a besoin quitte a faire des mini modif pour que les divers format des element collent. Apres pour faire l'anime du fond qui vibre en (a-png). Xavier conseil ce format.
Re: Construction IMAGES - ORAVOX
Posted: Thu Jul 24, 2025 9:57 am
by SergeV
TAILLE Image construction ORAVOX
ORAVOX
Cadre brun 614x995 pixel 150dpi
Lecteur
Cadre jaune 650x1191 150dpi
Re: DESIGN ORAVOX
Posted: Fri Jul 25, 2025 7:17 am
by CPAS
l'animation est très belle !!
mais 4Mo c'est malheureusement beaucoup trop, on va devoir réfléchir à une manière d'alléger ça (réduire la palette du PNG, diminuer le nombre de frames, etc...)
Re: DESIGN ORAVOX
Posted: Sat Jul 26, 2025 7:21 pm
by CPAS
mmh chipote-s-y si ca t'amuse (titre ! :p) mais à terme on pourra "compositionner", c'est à dire que tu peux faire UNE étoile qui brille en animation et moi j'en fait une grille décalée dans le temps, ainsi tu as cette animation là mais pour le "prix" de ne télécharger qu'une seule étoile (tu veux sque jveux dire ?)
tiens d'ailleurs si t'es chaud je veux bien que tu me fasses une anim d'UNE étoile qui brille. je pense qu'il y a moyen de faire des trucs rigolos avec
Re: DESIGN ORAVOX
Posted: Sat Jul 26, 2025 9:07 pm
by CPAS
j'ai fait un rapide test pour une animation sur le site en réutilisant la meme étoile, et c'est effectivement très efficace :
https://oravox.duckdns.org/test.html
la page : html 302 octets, css : 450 octets
l'étoile unique en png : 1,8ko
euh en tout et pour tout on en est à moins de 3ko
temps de chargement ? instantané.
bon c'est moche on est d'accord mais t'as compris l'idée
Re: DESIGN ORAVOX
Posted: Sat Aug 02, 2025 12:09 pm
by JYS
Voilà voilà, enfin mon premier post.
J'ai bidouillé un peu avec l'AI pour m'aider à concocter des options d'anim du fond étoilé.
L'un repose plus sur du script java e l'autre sur un grid en en animation css avec un peu de java.
Je ne savias même pas que l'on pouvait animer en CSS, super ça Seagor!
https://www.mojofarmer.com/oravox/
Dans le dossier Stars_Animations, ouvrir les fichiers .html
01 - c'est du CSS+JAVA
02 - c'est du CSS+/-JAVA
Re: DESIGN ORAVOX
Posted: Sat Aug 02, 2025 3:10 pm
by CPAS
coucou Jean-Yves
oui le css permet pas mal de choses, mais c'est assurément plus limité que le javascript
par contre avec le combo animation png (ou svg) + css ou peut pratiquement tout faire
à voir en fonction des besoins (et de l'énergie qu'on veut mettre pour optimiser le chargement des pages,
ce qui est pas une priorité vu la latence actuelle)
Re: DESIGN ORAVOX
Posted: Sat Aug 02, 2025 4:08 pm
by SergeV
Salut JY... oui bravo pour ton premier post iiiiippppaaaa
voila pour suivre les anims.
1 Anime de la barre time (étoiles jaunes) qui doit être synchro avec le mp3 en cour.
2 Anim du son avance/recule, étoiles verticales (type scaner)
3 Anim talisman
4 boutons divers
Re: DESIGN ORAVOX
Posted: Thu Aug 21, 2025 6:00 pm
by CPAS
euh je trouve plus l'image de la "coque" d'oravox, ce que j'appelle le "shell"
il est où ? tu l'as supprimée Serge ?
Re: DESIGN ORAVOX
Posted: Fri Aug 29, 2025 12:20 pm
by CPAS
il me faut la bordure brune et le fond opaque gris, la versio que tu m'as donné n'est que semi-opaque
edit : le fichier avec ce nom : a_MATRICE_oravox_final_L4.PNG
EDIT: au temps pour moi, j'ai réorganisé mes calques et j'en ai plus besoin dans l'immédiat, ca fonctionne sans.
Re: MISES AU POINT ANIMES
Posted: Sat Aug 30, 2025 11:42 am
by SergeV
Ola mon mini coup de gueule... Sorry.
-Voici les images que j'estime pertinentes. pour le montage des animes (LAYERS)
Apres, si on ne fait pas une réunion pour définir qui fait quoi? et comment? . je ne sais plus quoi penser...
- Après tous tes posts sur les animes!! 1,2,3 ? (xavier?) donc je propose que l'on ce vois tous la semaine prochaine avec jean-Yves.
Si c'est pas possible, alors j'estime qu'il y a mauvaise volonté d'avancé. C'est vraiment pas très constructif.
Cela créer une mauvaise dynamique de groupe, et beaucoup de confusions (jean yves).
Xavier pourrais tu faire en sorte
1) qu'il y ai une plage ouverte sur ton code pour y mettre les animes avec jean yves. Bien évidement avec ton accord, et tes vérifications avant enregistrement.
2) ou faire une copie sur laquelle on pourraient travailler.?? ou brefff trouver une solution.!!!
3) animes JY et XA
a anime transition vers synopsis anime de fondu d'images superposées
b anime voix barre verticale. ; on fait comme jean yves a fait . c'est plus simple. code vous devez parlez entre vous. une fois mis c'est mis...
c pour l'anime talisman apparition. je donnes toutes les images en sprit, a centrée sur l'oravox.
d Apres pour le timeout si jean yves peux faire tourné les anneaux du talisman, dans le sens des aiguilles, comme pour faire un decompte de temps visible. un tour complet sur les 4 anneaux!!! et par anneaux dans le même sens. En script c'est beatefull. Voila c'est ce qu'il faut pour finir le corp et la respiration de l'Oravox. Aucun supplément n'est a prévoir. tout est bien claire.
Pour infos nous serons a la fin.
Seul restera la création des json avec des mp3 et une image. et la boucle est bouclé.
Forza
ici je vous mets les layers finaux de base : venir sur ce poste régulièrement pour attraper les suivants.
Re: DESIGN ORAVOX
Posted: Sat Aug 30, 2025 1:23 pm
by CPAS
- Après tous tes posts sur les animes!! 1,2,3 ? (xavier?)
j'ai besoin que tu sois plus clair
1) à qui est destiné le message ? il y a mon nom et un point d'interrogation, je suppute donc que ca peut s'adresser à moi
2) que signifie le message ? là par contre j'ai aucun indice :/
Re: DESIGN ORAVOX
Posted: Sun Aug 31, 2025 6:39 am
by CPAS
bon, je renonce à comprendre tes interjections, Serge,
voici le code, si tu as besoin d'essayer d'y inclure des animations,
moi je me contente de finir la page d'upload et de corriger le timeout
HTML :
Code: Select all
<div class="player">
<audio></audio>
<img id="interface" src="/components/oravox-player/interface.avif" alt="Interface"/>
<img id="background" src="/components/oravox-player/background.png" alt="Fond"/>
<img id="glass" src="/components/oravox-player/glass.png" alt="Vitre"/>
<img id="cover" src="" alt="Couverture"/>
<img id="shell" src="/components/oravox-player/shell.png" alt="Coque">
<div id="buttons">
<button type="button" id="back" title="Reculer"></button>
<button type="button" id="stop" title="Pause"></button>
<button type="button" id="play" title="Jouer"></button>
</div>
<div id="buttons2">
<button type="button" id="restart" title="Recommencer"></button>
<button type="button" id="quit" title="Quitter"></button>
</div>
<div id="bar">
<div id="fill"></div>
</div>
<div id="choices">
<button id="btnA"></button>
<button id="btnB"></button>
<button id="btnC"></button>
</div>
<div id="chrono">0:00</div>
<div id="recording"></div>
<img id="timer" src="/components/oravox-player/timer.png"></div>
<div id="synopsis"></div>
<canvas id="canvas"></canvas>
</div>
CSS:
Code: Select all
.player {
position: absolute;
inset: 50% auto auto 50%;
transform: translate(-50%, -50%);
aspect-ratio: 610 / 987;
width: min(80vw, calc(75vh * 610 / 987));
}
#background {
position: absolute;
width: 100%;
}
#shell {
position: absolute;
width: 106%;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
filter: drop-shadow(0px 0px 8px black) drop-shadow(0px 0px 32px black);
pointer-events: none;
}
#cover {
position: absolute;
width: 100%;
}
#interface {
position: absolute;
width: 100%;
z-index: 1;
pointer-events: none;
}
button {
position: absolute;
background-color: transparent;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
border: none;
cursor: pointer;
z-index: 2;
}
button#back {
top: 84.7%;
left: 10.5%;
width: 18%;
aspect-ratio: 90/96;
background-image: url('/components/oravox-player/back.png');
}
button#stop {
top: 85.5%;
left: 42.5%;
width: 15%;
aspect-ratio: 74/80;
background-image: url('/components/oravox-player/stop.png');
}
button#play {
top: 84.7%;
left: 71.5%;
width: 18%;
aspect-ratio: 90/96;
background-image: url('/components/oravox-player/play.png');
}
button#restart {
top: 87.7%;
left: 67%;
width: 24%;
aspect-ratio: 147/60;
background-image: url('/components/oravox-player/restart.png');
opacity: 0.75;
}
button#quit {
top: 87.7%;
left: 8.5%;
width: 24%;
aspect-ratio: 147/60;
background-image: url('/components/oravox-player/quit.png');
opacity: 0.75;
}
#choices {
position: absolute;
top: 60%;
z-index: 2;
display: grid;
width: 80%;
left: 10%;
}
#choices button {
position: static;
color: white;
background: #963;
border: 2px solid #0008;
border-radius: 8px;
box-shadow: 2px 2px 8px black;
text-shadow: 2px 2px 8px black;
margin: 2%;
padding: 2%;
font-size: inherit;
}
#choices button:hover {
background: #C93;
color: black;
text-shadow: none;
}
#bar {
position: absolute;
background-image: url("/components/oravox-player/thumb_empty.png");
background-repeat: repeat-x;
background-position: center left;
background-size: auto 100%;
bottom: 16%;
left: 6.4%;
width: 88%;
height: 6.75%;
}
#fill {
width: 0%;
height: 100%;
background-image: url("/components/oravox-player/thumb.png");
background-repeat: repeat-x;
background-position: center left;
background-size: auto 100%;
transition: width 0.2s linear;
}
button.active {
animation: blink 1s steps(2, jump-none) infinite;
}
@keyframes blink {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
#chrono {
position: absolute;
color: #C93;
font-weight: bold;
font-family: monospace;
z-index: 1;
left: 19.5%;
top: 4.5%;
}
#recording {
position: absolute;
width: 12px;
height: 12px;
border-radius: 50%;
left: 50%;
top: -4%;
z-index: 9;
animation: rec-blink 1s steps(2, jump-none) infinite;
background-color: transparent;
}
@keyframes rec-blink {
from {
background-color: red;
}
to {
background-color: transparent;
}
}
#synopsis {
position: absolute;
color: #C93;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
#canvas {
position: absolute;
width: 100%;
aspect-ratio: 610 / 987;
pointer-events: none;
opacity: 0;
}
#timer {
position: absolute;
z-index: 3;
width: 50%;
left: 50%;
top: 35%;
transform: translate(-50%, -50%);
}
#glass {
position: absolute;
width: 100%;
z-index: 1;
pointer-events: none;
}
JAVASCRIPT:
Code: Select all
'use strict';
const TEMPLATE_URL = new URL('./oravox-player.html', import.meta.url).href;
const STYLE_URL = new URL('./oravox-player.css', import.meta.url).href;
export default class OravoxPlayer extends HTMLElement {
constructor() {
super();
this._shadow = this.attachShadow({ mode: 'open' });
this.state = { chapter: '001', currentTime: 0, objects: [] };
this._lastSave = Date.now();
this._rec = { recorder: null, stream: null, chunks: [], aborted: false, active: false };
this._sheetIndex = 0;
}
_norm(s) {
return String(s || '').toLowerCase()
.normalize('NFD')
.replace(/\p{Diacritic}/gu, '')
.replace(/[^\p{L}\p{N}\s]+/gu, ' ')
.replace(/\s+/g, ' ')
.trim();
}
async connectedCallback() {
const params = new URLSearchParams(location.search);
this._storyId = params.get('story') || 'empty';
const resp = await fetch(`/api/progress.php?story=${encodeURIComponent(this._storyId)}`, { credentials: 'include' });
if (resp.status === 401) return void location.replace('/login.html');
if (resp.ok) {
const data = await resp.json();
if (data.state_json) this._initialState = JSON.parse(data.state_json);
}
try {
const [html, css] = await Promise.all([
fetch(TEMPLATE_URL).then(r => r.text()),
fetch(STYLE_URL).then(r => r.text())
]);
this._shadow.innerHTML = `<style>${css}</style>${html}`;
const s = this._shadow;
this._audio = s.querySelector('audio');
this._audio.preload = 'metadata';
this._buttons = s.getElementById('buttons');
this._buttons2 = s.getElementById('buttons2');
this._interface = s.getElementById('interface');
this._synopsis = s.getElementById('synopsis');
this._play = s.getElementById('play');
this._stop = s.getElementById('stop');
this._back = s.getElementById('back');
this._restart = s.getElementById('restart');
this._quit = s.getElementById('quit');
this._bar = s.getElementById('bar');
this._fill = s.getElementById('fill');
this._cover = s.getElementById('cover');
this._choices = s.getElementById('choices');
this._btnA = s.getElementById('btnA');
this._btnB = s.getElementById('btnB');
this._btnC = s.getElementById('btnC');
this._chrono = s.getElementById('chrono');
this._recording = s.getElementById('recording');
this._timer = s.getElementById('timer');
this._canvas = s.getElementById("canvas");
this._ctx = this._canvas.getContext("2d");
this._audio.addEventListener('ended', async () => {
this._choices.style.display = '';
this._recording.style.display = '';
this._timer.style.display = '';
this._chrono.textContent = '0:00';
new Audio('/assets/audio/jingle.mp3').play().catch(() => {});
this._rec.aborted = false;
this._rec.active = false;
this._rec.chunks = [];
try {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const mediaRecorder = new MediaRecorder(stream);
this._rec.stream = stream;
this._rec.recorder = mediaRecorder;
this._rec.active = true;
console.log('[ enregistrement en cours ]');
mediaRecorder.addEventListener('dataavailable', e => {
if (e.data && e.data.size > 0) this._rec.chunks.push(e.data);
});
mediaRecorder.addEventListener('stop', async () => {
const aborted = this._rec.aborted;
this._recording.style.display = 'none';
this._timer.style.display = 'none';
this._rec.active = false;
this._rec.stream?.getTracks().forEach(t => t.stop());
this._rec.stream = null;
if (aborted) {
this._rec.chunks = [];
return;
}
const audioBlob = new Blob(this._rec.chunks, { type: 'audio/webm' });
this._rec.chunks = [];
console.log('[ envoi du blob au serveur ]');
try {
const resp = await fetch('/api/whisper.php', {
method: 'POST',
headers: { 'Content-Type': 'audio/webm' },
body: audioBlob
});
if (!resp.ok) throw new Error('HTTP ' + resp.status);
const { text = '' } = await resp.json();
console.log(text || '[ aucune transcription reçue ]');
const heard = this._norm(text);
const heardSet = new Set(heard ? heard.split(' ') : []);
const currentId = this.state.chapter;
const nextIds = this.storyMeta.chapters[currentId]?.choices || [];
const matchedId = nextIds.find(id => {
const cmds = this.storyMeta.chapters[id]?.commands || [];
return cmds.some(cmd => {
const c = this._norm(cmd);
return c && c.split(' ').some(tok => heardSet.has(tok));
});
});
if (matchedId) {
const chosenIndex = nextIds.indexOf(matchedId);
await this._choose(chosenIndex);
} else {
console.log(this.storyMeta.chapters[currentId]?.label || 'Label manquant');
}
} catch (err) {
console.error('whisper.php error:', err);
}
});
mediaRecorder.start();
setTimeout(() => { mediaRecorder.stop(); }, 3000);
} catch (err) {
console.error('getUserMedia/MediaRecorder error:', err);
this._recording.style.display = 'none';
this._timer.style.display = 'none';
}
});
this._audio.addEventListener('timeupdate', () => {
const cur = this._audio.currentTime || 0;
const dur = this._audio.duration || 0;
if (Number.isFinite(dur) && dur > 0) {
this._fill.style.width = ((cur / dur) * 100) + '%';
const rem = Math.max(0, dur - cur);
const minutes = Math.floor(rem / 60);
const seconds = String(Math.floor(rem % 60)).padStart(2, '0');
this._chrono.textContent = `${minutes}:${seconds}`;
} else {
this._fill.style.width = '0%';
this._chrono.textContent = '--:--';
}
if (Date.now() - this._lastSave > 2000) {
this._lastSave = Date.now();
this._saveState();
}
this.state.currentTime = cur;
});
this._audio.addEventListener('play', () => {
this._play.classList.add('active');
this._stop.classList.remove('active');
});
this._audio.addEventListener('pause', () => {
this._play.classList.remove('active');
this._stop.classList.add('active');
});
this._audio.addEventListener('error', e => console.error('Audio playback error:', e));
this._play.addEventListener('click', () => {
if (!this._audio.ended) {
if (this._audio.paused) this._audio.play();
else this._audio.currentTime = Math.min(this._audio.duration, this._audio.currentTime + 5);
}
});
this._stop.addEventListener('click', () => this._audio.pause());
this._back.addEventListener('click', () => {
this._abortRecordingIfAny();
this._recording.style.display = 'none';
this._timer.style.display = 'none';
this._choices.style.display = 'none';
this._audio.currentTime = Math.max(0, this._audio.currentTime - 5);
});
[this._btnA, this._btnB, this._btnC].forEach((btn, idx) => {
btn.addEventListener('click', async () => {
this._abortRecordingIfAny();
await this._choose(idx);
});
});
this._restart.addEventListener('click', async () => {
this._abortRecordingIfAny();
this._recording.style.display = 'none';
this._timer.style.display = 'none';
this._choices.style.display = 'none';
this.state.chapter = '001';
this.state.currentTime = 0;
await this._loadChapter(this.state.chapter, 0);
this._audio.play();
});
this._quit.addEventListener('click', () => {
this._abortRecordingIfAny();
this._saveState();
location.assign('/');
});
window.addEventListener('beforeunload', () => {
const payload = { story: this._storyId, state_json: JSON.stringify(this.state) };
navigator.sendBeacon('/api/progress.php', new Blob([JSON.stringify(payload)], { type: 'application/json' }));
}, { once: true });
const meta = await fetch(`/assets/stories/${this._storyId}/story.json`);
this.storyMeta = await meta.json();
this._cover.src = `/assets/stories/${this._storyId}/cover.avif`;
if (this._initialState) Object.assign(this.state, this._initialState);
await this._loadChapter(this.state.chapter, this.state.currentTime);
} catch (err) {
console.error('Init OravoxPlayer error:', err);
}
this._buttons2.style.display = 'none';
this._cover.addEventListener('click', () => {
this._sheetIndex = (this._sheetIndex + 1) % 2;
console.log('sheet:', this._sheetIndex);
if (this._sheetIndex == 0) {
this._cover.src = `/assets/stories/${this._storyId}/cover.avif`;
this._interface.src = `/components/oravox-player/interface.avif`;
this._buttons.style.display = '';
this._synopsis.textContent = '';
this._bar.style.backgroundImage = 'url("/components/oravox-player/thumb_empty.png")';
this._buttons2.style.display = 'none';
} else if (this._sheetIndex == 1) {
this._cover.src = `/components/oravox-player/cover2.png`;
this._buttons.style.display = 'none';
this._synopsis.textContent = 'SYNOPSIS';
this._interface.src = `/components/oravox-player/interface2.avif`;
this._bar.style.backgroundImage = 'none';
this._buttons2.style.display = '';
}
});
// TEST
const path = new Path2D();
path.arc(this._canvas.width / 2, this._canvas.height / 2, 48, 0, Math.PI * 2);
this._ctx.fillStyle = 'red';
this._ctx.fill(path);
}
async _choose(choiceIndex) {
const chap = this.storyMeta.chapters[this.state.chapter];
const next = chap.choices?.[choiceIndex];
if (!next) return;
this.state.chapter = next;
this.state.currentTime = 0;
await this._loadChapter(next, 0);
this._audio.play();
}
async _loadChapter(chapterId, startTime = 0) {
console.log("LOG: loadChapter()")
this._abortRecordingIfAny();
this._recording.style.display = 'none';
this._timer.style.display = 'none';
this._choices.style.display = 'none';
const chap = this.storyMeta.chapters[chapterId];
if (!chap) return console.warn('Chapitre introuvable :', chapterId);
this._audio.src = `/assets/stories/${this._storyId}/${chap.audio}`;
await new Promise(res => {
if (Number.isFinite(this._audio.duration)) return res();
const onMeta = () => { this._audio.removeEventListener('loadedmetadata', onMeta); res(); };
this._audio.addEventListener('loadedmetadata', onMeta, { once: true });
});
try { this._audio.currentTime = startTime; } catch {}
console.log(chap.label || 'Label manquant');
this._renderChoice(this._btnA, chap.choices?.[0]);
this._renderChoice(this._btnB, chap.choices?.[1]);
this._renderChoice(this._btnC, chap.choices?.[2]);
this.state.chapter = chapterId;
this._audio.dispatchEvent(new Event('pause'));
this._saveState();
}
_renderChoice(button, nextId) {
if (!nextId) {
button.style.display = 'none';
return;
}
const target = this.storyMeta.chapters[nextId];
button.textContent = target?.label ?? nextId;
button.style.display = '';
}
_saveState() {
console.log("LOG: saveState()")
fetch('/api/progress.php', {
method: 'POST',
credentials: 'include',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ story: this._storyId, state_json: JSON.stringify(this.state) })
}).catch(err => console.error('Erreur _saveState :', err));
}
_abortRecordingIfAny() {
console.log("LOG: abortRecordingIfAny()")
if (this._rec.active) {
this._rec.aborted = true;
this._rec.recorder?.stop();
this._rec.stream?.getTracks().forEach(t => t.stop());
this._rec.active = false;
this._recording.style.display = 'none';
this._timer.style.display = 'none';
this._rec.chunks = [];
}
}
}
customElements.define('oravox-player', OravoxPlayer);
Re: DESIGN ORAVOX
Posted: Sun Aug 31, 2025 8:41 am
by SergeV
je me référais a ca !!
mais cela s'adressait a tous et en particulier.
Post by Saegor » Thu Aug 21, 2025 7:42 pm
pour les animations, il y a un dilemme. il y avait deux options, dont deux pourries, il y en désormais trois, dont trois pourries
1) vous faites toutes les animations vous-mêmes. je les intègre comme elles sont, dans un png animé ou quelque chose du genre, et je crée un minimum de code pour les controler en javascript. je n'aurai pas beaucoup de boulot, mais ca sera très lourd donc peu réactif. c'est pourri.
2) je continue à fonctionner en CSS + JS, et à accumuler des couches et des couches de CSS et des couches et des couches de JS. ca me permet de pas devoir refactoriser le code mais ca va vite devenir très instable. c'est pourri.
3) j'utilise un canvas en javascript et je fonctionne comme il faut : en dessinant comme dans un véritable écran, et je paramètre mes animations en javascript. il faut que je change tout le code pour qu'il soit ce qu'il devra etre au final : un code de production. c'est hors de question que je fasse ca, on était d'accord pour un prototype et là on est plus du tout là dedans. c'est pourri.
après analyse la solution 1 est la moins pourrie de toutes, parce qu'elle correspond bien à un prototype et ne nécessite pas que je me tue à faire des animations avancées avec des outils pas adaptés

Low-Tech Stack Developer – Minimalist, Native Tooling
Post by Saegor » Thu Aug 21, 2025 7:44 pm
bon en fait le PNG animé ca pue la m, le javascript permet pas de le controler. faut soit faire des spritesheets (vous etes pas prêts) soit faire l'animation moi-même... bon voilà ce qu'on va faire : je vais faire le reste (l'upload, terminer la reco vocale (j'ai oublié la relance et le tiemout) et après on verra ce qu'il reste comme temps et on avisera)
Re: Dissipation de tout mal entendu
Posted: Sun Aug 31, 2025 9:29 am
by SergeV
Donc Xa... Même JY ne sais plus sur quel pied danser.?
Aux vues de tes derniers commentaires, je crois maintenant que tu ne veux pas simplement comprendre..?! C'est dommage, nous étions si bien partis.. Cela me rend très triste. - Mais bon si c'est ton choix, je ne peux pas aller contre. - Bien réfléchir il te faut, car je ne suis pas du tout en train de jouer, tu montes dans le train jusqu'au terminus, ou pas. Sache que je finirais le système avec toi ou sans toi. C'est le deal, et cela s'adresse a tous. Je ne veux rien vous imposer, si vous ni trouvez pas du plaisir, de l'intérêt, et de la camaraderie, dans un cadre hyper relax.
Mon but a moi, en plus de tout ceci, c'est de finir ORAVOX sans pressions, et c'est de vous garantir du financement et de la reconnaissance internationale si nous allons au bout, comme je l'entend. C'est un tout et c'est non négociable! ... Pas d'animations (2), ni de transitions calques, pas d'oravox en ligne !
Mais si vous avez mieux ailleurs, alors, il faut partir. (Pas de pression)
PS ; je t'aime tu le sais, Xavier. Vous le savez tous, je vous aimes, Mais il ne faut pas pousser bobonne dans les hortilles.
Serge
Re: DESIGN ORAVOX
Posted: Sun Aug 31, 2025 3:32 pm
by CPAS
Coucou Serge,
Oui, c'est important d'y trouver du plaisir. Pour ma part, avec mon anxiété, j'ai parfois du mal avec l'ambiance de travail actuelle.
J'ai l'impression que tu as de grandes ambitions — ce qui est très bien — et peut-être que les moyens dont tu disposes ne sont pas encore alignés avec ces ambitions. Ce n'est pas un reproche, juste une observation que je pense utile si tu veux avancer.
Pour ma part, je ferai comme prévu : je travaillerai à mon rythme jusqu'au 1er octobre et je veillerai à ce que mon code soit fonctionnel d'ici là. Je ne vais pas me lancer dans des animations pour l'instant, car je ne suis pas certain de pouvoir garantir un code prêt à temps. J'espère que tu trouveras quelqu'un de compétent pour intégrer ces éléments efficacement.
A l'équipe
Posted: Mon Sep 01, 2025 12:33 pm
by SergeV
Croquette Xavier : L'unique moyen qu'il faut, de base, c'est de ne pas ce retourner... Chaque chose en son temps, et à sa place...
Les professionnels ne changerons pas ce monde, par défaut, car la technique est un refuge. ils appliqueront ce que des parsonnes comme moi, tentent de trouver, en prennent des risques. contrôlés ou pas. C'est comme cela depuis le déput des temps.
Je ne suis personnes, je partages mes trouvailles, la vision. Temps philosophiquz et graphique c'est déjà énormes. Rien ne vient par hazard. Tout est encapsule
.1) Finir la phases 1 du projet, mecanique avec les animes. . 2) trouver des financiers qui vont payer nos heures de travail passées, et les heures de travail futurs avec en plus un développeur Ai pour la phase 2 : l'automatisation.
Tes croyances ou remarques sur mes capacité, en fait pour dire simplement je n'en ai rien à foutre. Je n'y crois pas, du moin pas comme cela. Trop de propagande castratrice passe par là. Pour moi c'est justement ça qui fait aussi mon travail. Ouvrir ces portes..! C'est bien plus porteur... !
Xavier, je ne ment jamais, et encore plus à moi même.. Ce serais idiot. Et dans ce cas rien n'aurais été possible.!
Tu dis que tu dois garder un équilibre. Je pense simplement que tu a peur de réussir, et que tu te met des limites qui sont ridicules et sont sûrement d'origine anxieuse. Ne change pas ton équilibre, mais arrête de te mettre des limites.
Maintenant si tu ne sens vraiment pas tout ceci.. C'est franchement dommage. C'est certainement à l'origine de ton anxiété. Une peur effroyable qui ne repose que sur la peur de réussir. Je peux t'aidé, ou du moin essayer. Nous sommes des opposés actuellement et alors ? Quand tu auras le goût en bouche d'une reusite.. On en reparlera... Chouke
Love
Serge
Jean Yves : te sens tu la force de faire ces incrustes animée dans le codes de Xavier ?
Xavier comment vois tu le fait que l'on change ton code pour ces incrustes animé, Alors que tu continue d'un autre côté le code.. J'arrive pas à comprendre. Qu'il soit plus facile pour toi de venir avec tous ces changement dans ton nouveau code ?? On fait comment ??
Réunion !!? Jean Yves ? Xavier ? Mick ?
Jeudi matin ?
Re: DESIGN ORAVOX
Posted: Mon Sep 01, 2025 4:52 pm
by CPAS
Pour moi, jeudi matin ça me va : je peux expliquer à qui le souhaite le fonctionnement de mon code et faire la passation ; en attendant de trouver quelqu’un pour l’utiliser, je continue à travailler dessus.
Re: DESIGN ORAVOX
Posted: Tue Sep 02, 2025 5:30 pm
by SergeV
ok pour moi, nous devons trouvé une solution qui soit super pour tous.
a jeudi
Re: DESIGN ORAVOX
Posted: Tue Sep 02, 2025 6:04 pm
by SergeV
Xavier, actuellement au niveaux des layers il y a u problème. trop de layers avec des ombres sont superposer. ce qui bouche l'image. on dois nettoyer et mettre les bonnes images bien en ordre que j'ai modifier et publié plus haut. tu verra les noms. pour la coquille tu la place en premier layer ou en dernier ? cela compte par rapport a l'ombre de la coquille. qui lui appartiens. pour etre plus précis , chaque ombres de l'écran appartiens a l'objet (layer) qui lui est rattaché. si tu vois ce que je veux dire. pour évité des superposition dans l'affiche et le synopsis breff regarde les images que j'ai poster. merci chouke.
pour les boutons du bas dans le synopsis restart ils ont l'air d'etre moins lumineux que le start? une raison?