Oh the sweet joy the return of spring brings. And here’s a bucolic springtime celebration, carried on the pastoral lilt of the folk guitar mixed with voice, sparkling glockenspiels and soothing flutes. A musical exploration full of freshness, organic sounds as trees blossom, flowers bloom, nature awakes.
Album | Titel | Versions | Länge | Komponist/Autor | Beschreibung | Suchbegriffe | Key | BPM |
|
|
---|---|---|---|---|---|---|---|---|---|---|
|
![]() |
Sweet Melancholy [CEZ4485 - 9] |
0 | 2'13 | BENJAMIN DOHERTY | Ballad in a nu-folk spirit. Intimate & touching but with a touch of ... | Folk Ballade independent cinema Folk-Gitarre vertraut ... | D | 137 |
|
|
![]() |
Days after Days [CEZ4488 - 3] |
1'58 | Eric Lohrer | Nu folk ballad / acoustic folk. Peaceful, light-hearted & pastoral. ... | Nu Folk outdoor zuversichtlich sorglos ... | G | 140 |
|
|
|
![]() |
Days after Days Alternate [CEZ4488 - 19] |
Vers. | 1'58 | Eric Lohrer | Underscore without snaps. Nu folk ballad / acoustic folk. Peaceful, ... | Nu Folk outdoor zuversichtlich sorglos ... | G | 140 |
|
|
![]() |
There is a Land [CEZ4488 - 11] |
2'27 | Jérémy Dirat | Nu folk song ins 60's spirit. Hopeful, driving & soulful. Female ... Text | Nu Folk zuversichtlich energisch schwungvoll ... | Gbm | 105 |
|
|
|
![]() |
There is a Land Alternate 1 [CEZ4488 - 30] |
Vers. | 2'26 | Jérémy Dirat | Underscore. Nu folk song ins 60's spirit. Hopeful, driving & soulful. ... | Nu Folk zuversichtlich energisch schwungvoll ... | Gbm | 105 |
|
|
![]() |
There is a Land Alternate 2 [CEZ4488 - 31] |
Vers. | 2'27 | Jérémy Dirat | Alternate with whistling melody intro. Nu folk song ins 60's spirit. ... | Nu Folk zuversichtlich energisch schwungvoll ... | Gbm | 105 |
|
|
![]() |
Springtime Shower [CEZ4478 - 1] |
0 | 2'18 | Colo Colo | Pop folk bed, indie acoustic bed. Catchy, warm & confident. Tender. ... | Gartenarbeit Land & Garten pastoral Pop Folk ... | D | 162 |
|
|
![]() |
Two Birds [CCB1051 - 5] |
3'42 | David Ratté | Canadian indie folk band. Harmonica intro with acoustic guitar. Soft ... Text | Folk Song folky Folk Ballade vertraut ... | G | 124 |
|
|
|
![]() |
Two Birds Intrumental [CCB1051 - 24] |
Vers. | 3'42 | David Ratté | Instrumental alternate. | Nu Folk Folk Ballade Liebeskomödie folky ... | G | 124 |
|
|
![]() |
Early Morning Stroll [CEZ4480 - 9] |
0 | 2'25 | William Atzel | Bucolic, rural & minimalist. Gentle folk picking acoustic guitar & ... | friedlich pastoral Folk Ballade Land & Garten ... | G | 89 |
|
|
![]() |
A Simple Gesture [CEZ4358 - 6] |
0 | 2'18 | Jérémy Dirat | Nu folk. Nature. Holidays. Family life. Tender & joyful. Acoustic ... | zärtlich Land & Garten zuversichtlich outdoor ... | C | 114 |
|
|
![]() |
Canopy [CEZ4327 - 2] |
2'16 | Barthélémy Corbelet | Wild open space, pastoral & delicate. Acoustic guitar, celestial ... | pastoral panoramabild friedlich Land & Garten ... | Eb | 73 |
|
|
|
![]() |
Canopy Alternate without ...
[CEZ4327 - 14] |
Vers. | 2'16 | Barthélémy Corbelet | Pastoral, simple & intimate. Acoustic guitar & voice. | panoramabild verträumt Land & Garten hell ... | Eb | 72 |
|
|
![]() |
The New Camping Car [CEZ4265 - 4] |
0 | 1'50 | Loïs Blanca, Baptiste Thiry | Carefree & joyful. Acoustic guitars, marimba, piano & rhythm. | Gartenarbeit outdoor Daylife Land & Garten ... | C | 162 |
|
|
![]() |
A La Bonne Heure [CEO2029 - 1] |
1'32 | Arnaud de Boisfleury | Carefree & pastoral. Strings, flute & piano. | pastoral Daylife Land & Garten französisches Kino ... | Eb | 113 |
|
|
|
![]() |
A La Bonne Heure 2 [CEO2029 - 17] |
Vers. | 1'33 | Arnaud de Boisfleury | Carefree & pastoral. Piano, flute & strings. | hüpfend Haustiere alte französische Komödienfilme altmodisch ... | Eb | 129 |
|
|
![]() |
A La Bonne Heure 3 [CEO2029 - 18] |
Vers. | 1'33 | Arnaud de Boisfleury | Carefree & pastoral. Piano, violin & strings. | altmodisch Daylife zuversichtlich Küche & Deko ... | Bb | 129 |
|
|
![]() |
Happy Campers [CEZ4178 - 2] |
1'47 | Eric Caissy, Baptiste Thiry | Carefree & determined. Whistling, guitar, electronics & rhythm. | zuversichtlich Indiepop outdoor Pop-Rock ... | D | 92 |
|
|
|
![]() |
Happy Campers 2 [CEZ4178 - 15] |
Vers. | 1'47 | Eric Caissy, Baptiste Thiry | Carefree & determined. Electric guitar, synth & rhythm. | Basteln aktuell schwungvoll outdoor ... | D | 92 |
|
|
![]() |
Heading Home [CEZ4181 - 5] |
1'44 | Julien Vega | Positive & joyful. Whistling, piano, glockenspiel & rhythm. | Haustiere Werbung Küche & Deko sorglos ... | Eb | 162 |
|
|
|
![]() |
Heading Home 2 [CEZ4181 - 20] |
Vers. | 1'44 | Julien Vega | Positive & joyful. Clarinet, piano, glockenspiel & rhythm. | Werbung Daylife Haustiere zuversichtlich ... | Eb | 80 |
|
|
![]() |
Grand Canyon [CEZ4104 - 1] |
0 | 2'28 | Gréco Casadesus | Uplifting & majestic. Progression.Large orchestra with French horns. | das weite Meer majestätisch Tierdoku friedlich ... | C | 77 |
|
|
![]() |
Prairie [CEZ4070 - 1] |
0 | 2'22 | Manuel Galvin | Peaceful & simple. Folk guitar. | Folk-Gitarre friedlich outdoor Land & Garten ... | E | 92 |
|
|
![]() |
Perfect Day [CEZ4217 - 9] |
0 | 1'56 | Colo Colo | Indie pop. Uplifting & pensive. Electric guitar, synth & rhythm. | begeisternd Indiepop panoramabild outdoor ... | G | 130 |
|
|
![]() |
Wild Again [CEZ4190 - 3] |
2'07 | Colo Colo | Positive & cyclic. Piano, snaps, female singer, electric guitar & ... Text | Indiepop auf Englisch gesungen zuversichtlich Kindheit ... | A | 84 |
|
|
|
![]() |
Wild Again 2 [CEZ4190 - 18] |
Vers. | 2'07 | Colo Colo | Positive & cyclic. Piano, snaps, electric guitar & rhythm. | zuversichtlich Kindheit Indiepop sorglos ... | A | 84 |
|
|
![]() |
Picking and Choosing [CEZ4212 - 3] |
0 | 2'59 | Nicolas Moreau | Country picking & swing jazz. Light & bouncy. Finger picking guitar, ... | Picking Gitarre Basteln Land & Garten Klarinette (alle) ... | A | 90 |
|
|
![]() |
Pen Duick [CEZ4106 - 8] |
0 | 1'55 | Eric Lohrer, Didier Malherbe | Circular & peaceful. Cavaquinho, zeff & djembe. | savanne Bretagne hell Keltische Musik ... | Dm | 86 |
|
|
![]() |
Just Whistle [CEZ4188 - 5] |
2'34 | Colo Colo | Warm & joyful. Whistlings, electric guitar, glockenspiel, male singer ... Text | Indiepop zuversichtlich outdoor Werbung ... | D | 78 |
|
|
|
![]() |
Just Whistle 2 [CEZ4188 - 18] |
Vers. | 2'34 | Colo Colo | Confident & carefree. Electric guitar, glockenspiel, synth & rhythm. | Indiepop zuversichtlich outdoor Werbung ... | D | 78 |
|
|
![]() |
Just Whistle 3 [CEZ4188 - 19] |
Vers. | 2'34 | Colo Colo | Luminous & joyful. Whitlings, electric guitar, glockenspiel, synth & ... | Indiepop zuversichtlich outdoor Werbung ... | D | 78 |
|
|
![]() |
A New Day Dawn [CEZ4104 - 4] |
0 | 1'24 | Baptiste Thiry | Tender & bucolic. String ensemble with acoustic guitar & piano. | Liebesfilme hell Vögel panoramabild ... | A | 149 |
|
|
![]() |
Bagatelle [CEV3001 - 23] |
0 | 1'35 | Marc-Olivier Dupin | A sweet fragrance of the past. Flute, cello & viola trio. | altmodisch 1900 Land & Garten zart ... | Gm | 74 |
|
|
![]() |
Les Jardins de L'Alhambra [CEV3001 - 11] |
0 | 2'41 | Gérard Torikian | Mischievous. Spanish atmosphere @ 0'50. Piano & string quintet. | Land & Garten Kammermusikorchester pastoral Pizzicato ... | Am | 118 |
|
|
![]() |
Flying [CCB1022 - 1] |
0 | 3'54 | Gréco Casadesus | Wide, lyrical & great achievement. Build up gradually. Symphony ... | happy end panoramabild Symphonieorchester Kulturerbe ... | Bm | 136 |
|
|
![]() |
Oregon Redwoods [CEZ4145 - 11] |
0 | 2'44 | Pierre-André Athané | Peaceful & charming. Folk guitar trio. | Land & Garten Folk-Gitarre zärtlich Folk Ballade ... | D | 164 |
|
|
![]() |
The Family Home [CEZ4265 - 6] |
0 | 1'35 | Anne-Sophie Versnaeyen | Pastoral & peaceful. Guitar, strings, flute & percussion. | pastoral Gartenarbeit outdoor Daylife ... | Bb | 145 |
|
|
![]() |
Where it Shines [CEZ4188 - 1] |
3'27 | Colo Colo | Confident & positive. Piano, electric guitar, male voices, singer @ ... Text | Indiepop auf Englisch gesungen zuversichtlich Küche & Deko ... | Em | 127 |
|
|
|
![]() |
Where it Shines 2 [CEZ4188 - 14] |
Vers. | 3'26 | Colo Colo | Positive & uplifting. Piano, electric guitar, synth & rhythm. | Indiepop zuversichtlich Küche & Deko begeisternd ... | Em | 127 |
|
|
![]() |
Recreation [CEZ4217 - 3] |
0 | 1'47 | Pascal Macaigne | Indie rock. Triumphant & happy. Acoustic and electric guitars, bass & ... | outdoor Küche & Deko Indie-Rock alternativer Rock Daylife ... | A | 130 |
|
|
![]() |
Concerto in E minor - Allegro ...
[CLA9103 - 12] |
0 | 7'01 | Saverio Mercadante | Pastoral & refined. Flute & symphony orchestra | klassische Musik (alle) romantische Musik 19. Jahrhundert Querflöte ... | Em | 165 |
|
|
![]() |
Sonata - Spring - Allegro [MIL005 - 1] |
0 | 3'36 | Ludwig van Beethoven | Carefree & pastoral. Piano and violin. | klassische Musik (alle) zuversichtlich romantische Musik bekannte Musik ... | C | 147 |
|
|
![]() |
Lakme - Act I - Duet - Viens ...
[ULY3006 - 18] |
0 | 4'54 | Léo Delibes | Lyrical & charming. Duo soprano & symphony orchestra. Text | klassische Musik (alle) bekannte Musik romantische Musik Oper ... | B | 136 |
|
login
password
Nom
Loading ' + file.name + ' ' + (file.size ? (file.size/1024|0) + 'K' : ''); fichier=file.name; } } //--- //- recog readfiles //--- readfiles = function(files) { var formData = tests.formdata ? new FormData() : null; for (var i = 0; i < files.length; i++) { if (tests.formdata) formData.append('file', files[i]); // previewfile(files[i]); en commentaire pcq nom du fichier pas important et pas beau } formData.set('lang','de'); // now post a new XHR request if (tests.formdata) { var xhr = new XMLHttpRequest(); xhr.open('POST', '/recog/upload.php'); xhr.onload = function() { progress.value = progress.innerHTML = 100; }; xhr.onloadend = function() { JSONreponse= xhr.responseText.trim(); if(JSONreponse=="ERR"){ spinnerStopCancellable(); $('#progress_external_recommendation_file').hide(); document.getElementById('file_external_recommendation').files = null; document.getElementById('file_external_recommendation_lbl').innerHTML = 'Choose file from your computer'; getAlertDanger("An error has occured, please try again with another file"); }else if(JSONreponse=="ERR_NOT_CONNECTED"){ //jQuery('#infoBoxListePage_connect').show(); TipNotConnected(); }else{ $('#fichiercharge').remove(); $('#chargementde').remove(); $('progress').hide(); spinnerStop(); reponses = JSON.parse(JSONreponse); reponsesMots = reponses.mots; suggestiontitres(files[0].name, 'mp3'); /** SG 21/10/2021 : POUR CACHER LA BOX QD RESULTAT AFFICHÉ **/ if($('.external_recommendationbox').length){ /** SG 22/10/2021 : POUR PROGRESS BAR EXTERNAL_RECOMMENDATION **/ $('#progress_external_recommendation_file').width('100%'); $('.external_recommendationbox').hide(); $('#progress_external_recommendation_file').width('0%'); $('#progress_external_recommendation_file').hide(); $('#file_external_recommendation').val(''); document.getElementById('file_external_recommendation_lbl').innerHTML = 'Drop your file here.'; } } }; if (tests.progress) { $('progress').show(); $('#progress_external_recommendation_file').show(); spinnerStart(); xhr.upload.onprogress = function (event) { if (event.lengthComputable) { var complete = (event.loaded / event.total * 100 | 0); if(complete!=100){ $('#recogdiv').each(function(){$(this).remove();}); } /** SG 22/10/2021 : PR PROGRESS BAR EXTERNAL_RECOMMENDATION **/ if($('#progress_external_recommendation_file').length){ $('#progress_external_recommendation_file').width((event.loaded/event.total*100)+'%'); } progress.value = progress.innerHTML = complete; } } } xhr.send(formData); } } //--- //- recog readfiles //--- readfiles_image = function(files) { var formData = tests.formdata ? new FormData() : null; for (var i = 0; i < files.length; i++) { if (tests.formdata) formData.append('file', files[i]); // previewfile(files[i]); en commentaire pcq nom du fichier pas important et pas beau } formData.set('lang','de'); // now post a new XHR request if (tests.formdata) { var xhr = new XMLHttpRequest(); xhr.open('POST', '/ajax/get_keywords_from_brief.php'); xhr.onload = function() { progress.value = progress.innerHTML = 100; }; xhr.onloadend = function() { JSONreponse= xhr.responseText.trim(); if(JSONreponse=="ERR"){ spinnerStopCancellable(); $('#progress_external_recommendation_file').hide(); document.getElementById('file_external_recommendation').files = null; document.getElementById('file_external_recommendation_lbl').innerHTML = 'Choose file from your computer'; getAlertDanger("XXXXXAn error has occured, please try again with another file"); }else if(JSONreponse=="ERR_NOT_CONNECTED"){ //jQuery('#infoBoxListePage_connect').show(); TipNotConnected(); }else{ $('#fichiercharge').remove(); $('#chargementde').remove(); $('progress').hide(); spinnerStop(); var parsedRes = JSON.parse(JSONreponse); var div_error = document.getElementById('external_brief_errors'); if ( parsedRes.error !== undefined ) { var txt_error = "Error : "; if ( parsedRes.error == "brief_empty" ) { txt_error += "Your brief is empty"; } else if ( parsedRes.error == "brief_too_long" ) { txt_error += "Your brief is too long, it must be 1000 characters long maximum"; } div_error.innerHTML = txt_error; div_error.style.display = 'block'; spinnerStop(); } else { div_error.innerHTML = ''; div_error.style.display = 'none'; var responseJSON = parsedRes; var response = responseJSON; var url = "/liste_resultats.php?"; var params = []; var tab_mots = []; for( var valou of response ) { params.push("mot[]=" + encodeURI(valou + "@@@@" + valou + "@@@@" + valou)); tab_mots.push(valou); } if ( params.length == 0 ) { div_error.innerHTML = 'No results found, please try again later.'; div_error.style.display = 'block'; spinnerStop(); return; } url += params.join("&"); xajax_check_multiple_words(tab_mots.join(' '), [], false, true, false, ''); //window.location.href = url; } } }; if (tests.progress) { $('progress').show(); $('#progress_external_recommendation_file').show(); spinnerStart(); xhr.upload.onprogress = function (event) { if (event.lengthComputable) { var complete = (event.loaded / event.total * 100 | 0); if(complete!=100){ $('#recogdiv').each(function(){$(this).remove();}); } /** SG 22/10/2021 : PR PROGRESS BAR EXTERNAL_RECOMMENDATION **/ if($('#progress_external_recommendation_file').length){ $('#progress_external_recommendation_file').width((event.loaded/event.total*100)+'%'); } progress.value = progress.innerHTML = complete; } } } xhr.send(formData); } } //--- //- afficherPanneauEntree //--- afficherPanneauEntree = function(){ var zeObj = $('#header-search-query'); if(zeObj.val()!=""){ $('#boiteAdviceRico').show(500); } } //--- //- jelancenoresult //--- jelancenoresult = function(){ in_search=false; $('#msgdbg').text($("#header-search-query").attr('value')); spinnerStart(); //xajax_check_multiple_words($("#header-search-query").attr('value'), xajax.getFormValues('search_form')); }; var mytimeoutrb; var randomPercent = 0 randomBar = function( ){ randomPercent = randomPercent + 5 if(randomPercent > 100) { randomPercent = 0 } progress = document.getElementById('uploadprogress'); progress.value = progress.innerHTML = randomPercent; mytimeoutrb = setTimeout( function(){randomBar( );} , 300); } todoOnKeyDown = function(zeObj,e){ $carousel_gallery_home.flickity('pausePlayer'); /** le moteur suggest est désactivé quand on tape une touche, cela empeche le masque "Entrée" de s'afficher, et lance le timeout de 3 secondes pour l'ouvrir **/ spinnerStop(); clearTimeout(timeoutAfficherPanneauEntree); in_search=true; timeoutAfficherPanneauEntree = setTimeout(function(){afficherPanneauEntree();},3000); //var kc=e.keyCode; var kc = e.key || e.code; if(kc=="Enter" || kc==13 || kc==37 || kc==38 || kc==39 || kc==40 || zeObj.value=='' || zeObj.value.indexOf('?+')!=-1){ spinnerStop(); } if($('#btn_external_recommendation').length > 0){ /** SG 21/20/2021 : POUR CACHER BOUTON external_recommendation QD QQUE CHOSE DE TAPER **/ if((zeObj.value).length>0){ /////16/04/2024 Eric / on ne le retire plus. : document.getElementById('btn_external_recommendation').style.display = 'none'; }else{ document.getElementById('btn_external_recommendation').style.display = 'flex'; } } if(( kc==13 || kc=='Enter') && zeObj.value!='' ){ var r = $(".text-tags .text-label").map( function(){return $(this).text();}).get().join(' '); if(r!=''){ var phrase=r + ' ' + zeObj.value; }else{ var phrase=zeObj.value; } $.ajax({ type: "POST", url: "/ajax/check_is_prompt.php", data: { phrase: phrase, langue: 'de' } }).done(function(reponse) { if (reponse === "OK" && "cn"!=="de") { /**vider le formulaire de recherche**/ empty_search_form(); /**appeler la fonction de recommandation par brief**/ searchExternalRecommendationFromBrief(phrase); } else { //bouton entrée tappé fct_menuzonehidden(); spinnerStart(); clearTimeout('jelancelenoresultdansxsecondes'); xajax_check_multiple_words(phrase, xajax.getFormValues('search_form')); } }); }else if(( kc==13 || kc=='Enter') && zeObj.value==''){ fct_menuzonehidden(); } } todoOnBlur = function(zeObj,e){ var v = zeObj.value; $carousel_gallery_home.flickity('pausePlayer'); spinnerStop(); clearTimeout(timeoutAfficherPanneauEntree); in_search=true; timeoutAfficherPanneauEntree = setTimeout(function(){afficherPanneauEntree();},3000); spinnerStop(); /** SG 24/10/2023 : POUR CACHER BOUTON external_recommendation QD QQUE CHOSE DE TAPER **/ if($('#btn_external_recommendation').length > 0){ if((zeObj.value).length>0){ /////16/04/2024 Eric / on ne le retire plus. : document.getElementById('btn_external_recommendation').style.display = 'none'; }else{ document.getElementById('btn_external_recommendation').style.display = 'flex'; } } if(v!=''){ fct_menuzonehidden(); spinnerStart(); clearTimeout('jelancelenoresultdansxsecondes'); zeObj.value = ''; var r = $(".text-tags .text-label").map( function(){return $(this).text();}).get().join(' '); var phrase = ''; if ( r!='' ) { phrase = r + ' ' + v; } else { phrase = v; } $.ajax({ type: "POST", url: "/ajax/check_is_prompt.php", data: { phrase: phrase, langue: 'de' } }).done(function(reponse) { if (reponse === "OK") { /**vider le formulaire de recherche**/ empty_search_form(); /**appeler la fonction de recommandation par brief**/ searchExternalRecommendationFromBrief(phrase); } else { //bouton entrée tappé fct_menuzonehidden(); spinnerStart(); clearTimeout('jelancelenoresultdansxsecondes'); xajax_check_multiple_words(phrase, xajax.getFormValues('search_form')); ////////show_bpm_key_zone("search"); } }); } else { //fct_menuzonehidden(); //remettre cette ligne si problème sur le onblur //SG 03/11/2023 : afin que la cartouche ne se ferme plus au onblur de l'input et que le bouton ai search se cache quand des mots sont présents dans l'input var r = $(".text-tags .text-label").map( function(){return $(this).text();}).get().join(' '); if ( r!="" ) { /////16/04/2024 Eric / on ne le retire plus. : $("#btn_external_recommendation").hide(); } else { if (document.getElementsByClassName('recogbutton').length == 0) { fct_menuzonehidden(); } } } } //Tooltip sur liste track search v4 pour les recommandations tooltip_menu_media = function(button,id_media,name,mode='modal'){ $.ajax({ url: "/ajax/get_tooltip_template.php", // Ton script PHP qui va générer le bon template type: "POST", data: { name: name, id_media: id_media }, success: function(responseHTML) { if(mode === 'modal'){ // On reçoit le HTML dynamisé en fonction des paramètres jcAlertTT(responseHTML, { boxWidth: 'calc(600px + 10%)', theme: 'cez-'+name, },name,mode); }else if(mode === 'tooltip'){ jcAlertTT(responseHTML, { boxWidth:'300px', theme: 'cez-'+name, },name,mode,button); } const $tooltip = $("#" + name + "_" + id_media); const modalBackdrop = $(".jconfirm-cez-"+name+" .jconfirm-cell"); //on charge pour ce contenu le code pour la region if(name === "tooltiprecommandation"){ $(document).on("mousedown", function (e) { if (modalBackdrop.is(e.target)) { $tooltip.find('.Ttr_timingdebut').val(''); $tooltip.find('.Ttr_timingfin').val(''); fctclearRegions(); } }); from_last_click ="recommandationedit"; if (!myPlaylist || typeof myPlaylist.playlist !== 'object') { //console.error("myPlaylist.playlist n'est pas un objet valide."); return; } //console.log("",myPlaylist.playlist); //! Cas ajaxify surtout, où le titre du player ne fait pas parti de la liste de lecture de la page nouvellement affichée // Vérifier si l'id_media est présent dans la playlist const idExistsInPlaylist = myPlaylist.playlist.some( item => String(item.id_media) === id_media ); if (!idExistsInPlaylist) { // Récupérer les IDs dans l'attribut onclick du bouton Tl_play let $parentTr = $(button).closest('tr'); let $parentUl = $parentTr.find('td:first ul.boxcontroleplayer'); let id_mediaAttr = $parentUl.attr('id_media'); let positionAttr = $parentUl.attr('position'); let onclickAttr = $parentUl.find("button.Tl_play").attr("onclick"); //console.log(id_mediaAttr+" pos"+positionAttr); // Extraire les IDs avec une expression régulière let match = onclickAttr.match(/PlayPauseUnTitreButton\('([^']+)'/); if (match && match[1]) { let idsList = match[1]; xajax_load_player_playlist(idsList,0,positionAttr,from_last_click,"oui"); } }else{ //! Si le titre existe dans la playlist, c'est que la page a été rechargé. Ici 2 problematiques, soit on a cliqué sur un bouton de lecture de la liste de titre et on a prechargé une playlist contenant les alernates, ou bien c'est une version playlist allegée //--playlist avec les alernates if (String(id_media).startsWith("0")) { id_media_alt = String(id_media).slice(1); // Supprime le premier caractère pos = $('#boxcontrol_'+id_media_alt).attr('curposition'); //--sinon c'est la playlist allegée }else{ const playlistValues = Object.values(myPlaylist.playlist); // Rechercher l'index const index = myPlaylist.playlist.findIndex( item => String(item.id_media) === id_media ); //console.log("Index trouvé :", index, "Données :", playlistValues); if (index !== -1) { const currentItem = playlistValues[index]; pos = index; } } window.setCurrentSongLOAD(pos); } setTimeout(() => { let dureetrack = $("#time-total").html(); let [minutesDT, secondsDT] = dureetrack.split(':').map(Number); let newseconds = (minutesDT * 60) + secondsDT; window.createRegion('0', newseconds, 'false', 'false', '', 'recommandation_' + id_media); jQuery('.wavesurfer-handle-start').css('width','4px').css('background-color','#222222'); jQuery('.wavesurfer-handle-end').css('width','4px').css('background-color','#222222'); }, 150); $(document).on("click", ".Ttr_validate", function (e) { let timingdebut = $tooltip.find('.Ttr_timingdebut').val(); let timingfin = $tooltip.find('.Ttr_timingfin').val(); //console.log(timingdebut+" "+timingfin+" Suivant"); //launch_recommendation('https://stream.cezamemusic.com/albums/ULY3006/mp3/128/17-Delibes-Lakme-Act-I-Duet-Viens-Mallika-01.mp3','28912');" }); $(document).on("click", ".Ttr_cancel", function (e) { $tooltip.find('.Ttr_timingdebut').val(''); $tooltip.find('.Ttr_timingfin').val(''); $('.jconfirm-cez-tooltiprecommandation .jconfirm-closeIcon').trigger("click"); fctclearRegions(); }); } }, error: function(xhr) { console.error("Erreur lors du chargement du tooltip :", xhr); } }); } // Variable globale pour stocker le timeout let tooltipTimeout; // Gestionnaire d'événements avec délai $(document).on({ mouseenter: function(e) { const button = this; const id_media = $(button).data("id-media"); const name = $(button).data("name"); tooltip_gestion_alternative(button, id_media, name); /* clearTimeout(tooltipTimeout); tooltipTimeout = setTimeout(() => { tooltip_gestion_alternative(button, id_media, name); }, 500); */ }, mouseleave: function() { clearTimeout(tooltipTimeout); } }, ".tooltip-trigger-alt"); const tooltip_gestion_alternative = function(button, id_media, name) { let isTooltipOpen = false; let isMouseOverButton = false; let isMouseOverTooltip = false; let closeTimeout; // Création du conteneur du tooltip avec styles pour l'animation if (!$('#tooltip-container').length) { $('body').append(`
`); } const tooltipContainer = $('#tooltip-container'); // Fonction pour positionner le tooltip const updateTooltipPosition = function() { if (!isTooltipOpen) return; const buttonPos = $(button).offset(); const buttonHeight = $(button).outerHeight(); const buttonWidth = $(button).outerWidth(); let tooltipTop = buttonPos.top + buttonHeight -175; let tooltipLeft = buttonPos.left + (buttonWidth / 2) + 10; const tooltipWidth = tooltipContainer.outerWidth(); const windowWidth = $(window).width(); if (tooltipLeft + tooltipWidth > windowWidth) { tooltipLeft = windowWidth - tooltipWidth - 10; } tooltipContainer.css({ top: tooltipTop, left: tooltipLeft }); }; // Fonction pour ouvrir le tooltip avec animation const openTooltip = function() { if (isTooltipOpen) return; $.ajax({ url: "/ajax/get_tooltip_template.php", type: "POST", data: { name: name, id_media: id_media }, success: function(responseHTML) { tooltipContainer.html(responseHTML); tooltipContainer.css('display', 'block'); // Force un reflow pour assurer que la transition fonctionne tooltipContainer[0].offsetHeight; // Applique l'animation tooltipContainer.css({ 'opacity': '1', 'transform': 'translateY(0)' }); isTooltipOpen = true; updateTooltipPosition(); }, error: function() { console.error('Erreur lors du chargement du tooltip'); } }); }; // Fonction pour fermer le tooltip avec animation const closeTooltip = function() { if (!isMouseOverButton && !isMouseOverTooltip) { closeTimeout = setTimeout(() => { tooltipContainer.css({ 'opacity': '0', 'transform': 'translateY(-5px)' }); // Attendre la fin de l'animation avant de cacher setTimeout(() => { tooltipContainer.css('display', 'none'); isTooltipOpen = false; }, 200); }, 300); } }; // Gestionnaire d'événements pour le bouton $(button).on({ mouseenter: function() { isMouseOverButton = true; clearTimeout(closeTimeout); openTooltip(); }, mouseleave: function() { isMouseOverButton = false; closeTooltip(); } }); // Gestionnaire d'événements pour le tooltip tooltipContainer.on({ mouseenter: function() { isMouseOverTooltip = true; clearTimeout(closeTimeout); }, mouseleave: function() { isMouseOverTooltip = false; closeTooltip(); } }); // Mettre à jour la position lors du défilement ou redimensionnement $(window).on('scroll resize', updateTooltipPosition); // Ouvrir immédiatement le tooltip openTooltip(); return { destroy: function() { clearTimeout(closeTimeout); $(button).off('mouseenter mouseleave'); tooltipContainer.off('mouseenter mouseleave'); $(window).off('scroll resize', updateTooltipPosition); tooltipContainer.remove(); } }; }; launch_recommendation = function(localurl,last_item_played, debut=null, fin=null){ let logged_in = false; jQuery.ajax({url: "/ajax/check_conn.php", type: "GET", async: false, success: function(JSONreponseFromAjax){ logged_in = JSONreponseFromAjax; }} ); var cookiepubai = document.cookie.match('(^|;) ?no_pub_ai=([^;]*)(;|$)'); var test_pubai = false; if ( cookiepubai !== null ) { test_pubai = cookiepubai[2]; } //SG 14/11/2023 : si pas connecté, on affiche la popup de pub pour les fonctionnalités complémentaires de l'IA // if ( logged_in != "OK" && !test_pubai ) { ///pour l'instant on met ça de côté ... TipNotConnectedPubAi(false); // } $('progress').hide(); spinnerStart(); /**on supprime le div de recog, vu que l'on va en charger un nouveau**/ jQuery('#recogdiv').remove(); if ( !$('body').hasClass('mobile') ) { randomBar( ); } if (debut !== null && fin !== null && Number.isFinite(debut) && Number.isFinite(fin)) { paramjson = {localurl: localurl, id_media: last_item_played,lang:'de', debut: debut, fin: fin}; }else{ paramjson = {localurl: localurl, id_media: last_item_played,lang:'de'}; } jQuery.ajax({url: "/recog/upload.php", type: "POST", data : paramjson, success: function(JSONreponseFromAjax){ if(JSONreponseFromAjax=="ERR"){ $('progress').hide(); spinnerStop(); }else if(JSONreponseFromAjax=="ERR_NOT_CONNECTED"){ TipNotConnected(); $('progress').hide(); spinnerStop(); }else if(JSONreponseFromAjax.match(/^ERR_/) ){ $('progress').hide(); spinnerStop(); clearTimeout(mytimeoutrb); }else { clearTimeout(mytimeoutrb); if ( !$('body').hasClass('mobile') ) { progress = document.getElementById('uploadprogress'); progress.value = progress.innerHTML = 0; } jQuery('progress').hide(); spinnerStop(); reponses = JSON.parse(JSONreponseFromAjax); reponsesMots = reponses.mots; JSONreponse = JSONreponseFromAjax; suggestiontitres(last_item_played,'equal'); } } }); } // Fonction pour obtenir le début et la fin d'une région spécifique function getRegionTiming(idMedia) { // Supposons que votre instance WaveSurfer est dans la variable 'wavesurfer' const regionId = 'recommandation_' + idMedia; const regionKey = hasRegionStartingWith(); let region = null; //ne jamais clear les (climax[0-9]) //if(regionKey.some(item => item.startsWith('climax'))){ if(regionKey){ regionKey.forEach(key => { if(key==regionId){ region=myPlaylist.regions.list[key]; } }); } if (region!=null) { return { start: region.start, // Début en secondes end: region.end // Fin en secondes }; } return { start: null, // Début en secondes end: null // Fin en secondes }; } //--- //- changeScrollHeight //--- changeScrollHeight = function() { var h = parseInt(window.prompt('Please type new scroll height (number in pixels):', jQuery.Autocompleter.defaults.scrollHeight)); if(h > 0) { $("#suggest1").setOptions({ scrollHeight: h }); } } //--- //- focus_header_search_query //--- focus_header_search_query = function(){ //$("#header-search-query").trigger("activate.autocomplete"); $("#header-search-query").click(); } //--- //- RemoveAccents //--- RemoveAccents = function(strAccents) { var strAccents = strAccents.split(''); var strAccentsOut = new Array(); var strAccentsLen = strAccents.length; var accents = 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÕÖØòóôõöøÈÉÊËèéêëðÇçÐÌÍÎÏìíîïÙÚÛÜùúûüÑñÿý'; var accentsOut = "AAAAAAaaaaaaOOOOOOOooooooEEEEeeeeeCcDIIIIiiiiUUUUuuuuNnSsYyyZz"; for (var y = 0; y < strAccentsLen; y++) { if (accents.indexOf(strAccents[y]) != -1) { strAccentsOut[y] = accentsOut.substr(accents.indexOf(strAccents[y]), 1); } else strAccentsOut[y] = strAccents[y]; } strAccentsOut = strAccentsOut.join(''); //return strAccentsOut.replace(/ +/,"-"); strAccentsOut=strAccentsOut.replace(/'/g,"-").replace(/&+/g," ").replace(/ +/g,"-").replace(/\-+/,'-'); return strAccentsOut; } //--- //- addAlbumAndLaunch //--- addAlbumAndLaunch = function(id_album,e,f){ e.after(""); f.submit(); } //--- //- launchSearch //--- launchSearch = function(){ jQuery('.loupe').click(); } /**tout ce qui se rapoporte au filtrage par bpm et key**/ load_bpm_key_slider = function(){ jQuery('#slider').slider({ range: true, min: 10, max: 300, step: 1, values: [ 10, 300 ], slide: function( event, ui ) { jQuery('.slider-min').html(ui.values[ 0 ]); jQuery('.slider-max').html(ui.values[ 1 ]); }, change: function( event, ui ) { var min = ui.values[ 0 ]; var max = ui.values[ 1 ]; jQuery('#customFilterBpm').val(''); jQuery.ajax({ url: '/ajax/ajax_search_filters.php?minbpm='+min+'&maxbpm='+max} ).done(function(){ var only_word_search = jQuery('#search_form').serialize().replace('search_external_recommendation_youtube=&search_external_recommendation_brief=', ''); const url_params = new URLSearchParams(window.location.search); const id_media_str = url_params.get('id_media_str'); var tmp_url = ""; if ( id_media_str !== null ) { tmp_url = '/liste_resultats.php?id_media_str='+id_media_str+'&randkeybpm='+Math.random().toString(36).substring(7); }else if(only_word_search!=''){ tmp_url = '/liste_resultats.php?'+jQuery('#search_form').serialize()+'&randkeybpm='+Math.random().toString(36).substring(7); } goLaunchAjaxify(tmp_url,'#searchlink','search_' + Math.random().toString(36).substring(7)); }); } }); } -->