Uncovering Music IDs (EN) - Genelec - Français
Une erreur s'est produite lors du traitement du gabarit.
Java method "com.ch5finland.genelec.cms.service.impl.CMSContentFormatterServiceImpl.getMarkdown(String)" threw an exception when invoked on com.ch5finland.genelec.cms.service.impl.CMSContentFormatterServiceImpl object "com.ch5finland.genelec.cms.service.impl.CMSContentFormatterServiceImpl@61e9ea58"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign summary = cmsContentFormatter...  [in template "20116#20152#301848" at line 43, column 9]
----
1<#include "${templatesPath}/300307" />                                                                   
2 
3<#assign portletId = "p_p_id_" + themeDisplay.getPortletDisplay().getId() + "_"> 
4 
5<#list entities as cmsEntity>     
6    <#assign name = ""> 
7    <#if cmsEntity.getLocalizedField(profile, "/entity/fields/title")?has_content> 
8        <#assign name = cmsEntity.getLocalizedField(profile, "/entity/fields/title")> 
9    <#else> 
10        <#if cmsEntity.getLocalizedField(profile, "/entity/fields/name")?has_content> 
11            <#assign name = cmsEntity.getLocalizedField(profile, "/entity/fields/name")>   
12        </#if> 
13    </#if> 
14 
15    <#if cmsEntity.getField(profile, "/entity/relationships/video")?has_content> 
16        <#if cmsEntity.getField(profile, "/entity/relationships/video/properties/url")?has_content > 
17            <#assign bgVideo = cmsEntity.getField(profile, "/entity/relationships/video/properties/url") > 
18        </#if> 
19        <#if cmsEntity.getField(profile, "/entity/relationships/video/assets/videoFiles")?has_content > 
20            <#assign videoFiles = cmsEntity.getField(profile, "/entity/relationships/video/assets/videoFiles") > 
21            <#assign bgVideo = videoFiles.get(0).url > 
22        </#if>   
23    </#if> 
24     
25    <#if cmsEntity.getLocalizedField(profile, "/entity/assets/mainImage")?has_content>                         
26        <#assign mainImage = cmsEntity.getLocalizedField(profile, "/entity/assets/mainImage")> 
27    <#elseif cmsEntity.getField(profile, "/entity/assets/image")?has_content> 
28        <#assign mainImage = cmsEntity.getField(profile, "/entity/assets/image/url")> 
29    <#else> 
30        <#assign mainImage = ""> 
31    </#if> 
32     
33    <#assign mobileImg = ""> 
34    <#if  cmsEntity.getLocalizedField(profile, "/entity/assets/mobileMainImage")?has_content> 
35        <#assign mobileMainImage = cmsEntity.getLocalizedField(profile, "/entity/assets/mobileMainImage") > 
36        <#if mobileMainImage.url?has_content> 
37            <#assign mobileImg = mobileMainImage.url> 
38        </#if> 
39    </#if>     
40 
41    <#assign entity = cmsEntity.getField(profile, "/entity") >                                                                     
42    <#if cmsEntity.getField(profile, "/entity/fields/summary")?has_content> 
43        <#assign summary = cmsContentFormatterService.getMarkdown(cmsEntity.getLocalizedField(profile, "/entity/fields/summary"))> 
44    </#if>                                                                                                                         
45    <#if url?has_content> 
46        <#assign pageUrl = url> 
47    <#elseif cmsContentService.getUrlForEntity(themeDisplay, entity.id)?has_content> 
48        <#assign pageUrl = cmsContentService.getUrlForEntity(themeDisplay, entity.id)> 
49    <#elseif cmsEntity.getField(profile, "/entity/fields/url")?has_content> 
50        <#assign pageUrl = cmsEntity.getField(profile, "/entity/fields/url")> 
51    <#else> 
52        <#assign pageUrl = ""> 
53    </#if>                                                                                                                         
54</#list> 
55 
56<div class="parallax-window <#if bgVideo??>d-xl-none</#if>" data-parallax="scroll"></div>                                                                                                                    
57<div class="gradient-layer-black-left <#if bgVideo??>d-xl-none</#if>"></div>    
58 
59 
60    <section class="background"> 
61        <div class="container container-1440 container-padding <#if bgVideo??>d-xl-none</#if>"> 
62            <div class="row"> 
63                <div class="col-lg-6"> 
64                    <h1 class="text-light product-page-heading">${name}</h1> 
65                     
66                    <#if cmsEntity.getField(profile, "/entity/fields/summary")?has_content> 
67                        <div class="product-page-intro text-light">${summary}</div> 
68                    </#if> 
69                    <#if pageUrl?has_content && callToAction?has_content> 
70                        <a class="btn btn-light btn-medium" href="${pageUrl}" role="button"> 
71                            ${callToAction} 
72                        </a> 
73                    </#if> 
74                     
75                </div> 
76            </div> 
77        </div> 
78 
79        <#if bgVideo??> 
80            <div class="bg-video d-none d-xl-block"> 
81            <#if bgVideo?contains("youtube") || bgVideo?contains("youtu.be")> 
82                <#if bgVideo?contains("youtu.be")> 
83                    <#-- ie. youtu.be/x_ptCvAzbKI --> 
84                    <#assign videoId = bgVideo?keep_after("youtu.be/") > 
85                <#else> 
86                    <#-- ie. https://www.youtube.com/watch?v=x_ptCvAzbKI --> 
87                    <#assign videoId = bgVideo?replace("^.*\\?v=([\\w-_]*).*", "$1", "r") > 
88                </#if> 
89                 
90                <iframe frameborder="0" style="width: 100%; aspect-ratio: 16 / 9; border: none;" src="https://www.youtube-nocookie.com/embed/${videoId}?autoplay=1&controls=0&loop=1&mute=1&playlist=${videoId}"></iframe> 
91            <#else> 
92                <video muted="" playsinline="" autoplay="" loop="" style="background-image: url('${mainImage.url}');" > 
93                    <source src="${bgVideo}"> 
94                </video> 
95            </#if> 
96                <div class="video-content-container"> 
97                    <div class="container container-1440 container-padding"> 
98                        <div class="row"> 
99                            <div class="col-lg-6"> 
100                                <h1 class="text-light product-page-heading">${name}</h1> 
101                                 
102                                <#if cmsEntity.getField(profile, "/entity/fields/summary")?has_content> 
103                                    <div class="product-page-intro text-light">${summary}</div> 
104                                </#if> 
105                                <#if pageUrl?has_content && callToAction?has_content> 
106                                    <a class="btn btn-light btn-medium" href="${pageUrl}" role="button"> 
107                                        ${callToAction} 
108                                    </a> 
109                                </#if> 
110                                 
111                            </div> 
112                        </div> 
113                    </div> 
114                </div> 
115             
116            </div> 
117         
118        </#if> 
119    </section> 
120     
121<@parallaxBackground url="${mainImage.url}" speed="0.4" mobileUrl="${mobileImg}" portletId="${portletId}" /> 

Travel deeper into global music

United by our love for celebrating and shining a light on the world’s many different interpretations of musical art, Genelec and Helsinki’s prestigious Sibelius Academy are delighted to join forces for this special series of podcasts.

Full of inspiring interviews, live performances and extraordinary instruments, this first series is set to offer you ten unique and fascinating musical stories – with a new instrumentalist featured each month.

Enjoy exclusive live performances

Not only will you discover the diverse histories, learning journeys and creative processes of musicians with a rare level of skill, you will have the opportunity to experience their personal sound and exceptional playing – as each performs a piece of their choice.

So, come and feed your passion for global music and culture! Scroll down the page and press play to start watching Uncovering Music IDs.

Meet your host – Mehrnoosh Zolfaghari

Mehrnoosh is an internationally recognised composer, musician and player of the santoor (Persian hammered dulcimer) based in Finland. She graduated with a Master’s in Music Performance in Iranian Classical Music at the University of Tehran in Iran and also at Finland’s UNIARTS/Sibelius Academy with a Master’s in Global Music.

Rooted in Persian music and inspired by global and jazz traditions, her music blends heritage and innovation through storytelling, improvisation and cross-cultural collaboration. As a part-time teacher of Persian music at Sibelius Academy, she brings her musical world into dialogue with others – bridging musical heritage and culture through music, creative interaction and diverse community.

More about her work: https://www.youtube.com/@MehrnooshZolfaghari/featured

Follow Mehrnoosh on Instagram: https://www.instagram.com/mehrnoosh_zolfaghari/#

Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing:
==> cmsEntity.getLocalizedField(profile, "/entity/fields/title")  [in template "20116#20152#893963" at line 69, column 76]

----
Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: ${cmsEntity.getLocalizedField(profile...  [in template "20116#20152#893963" at line 69, column 74]
----
1<#include "${templatesPath}/227209" /> 
2 
3<#----------------------------------------------------------------------------- 
4    INIT 
5------------------------------------------------------------------------------> 
6<#assign assetPublisherInstanceId = themeDisplay.getPortletDisplay().getInstanceId()> 
7<#assign portletId = "p_p_id_" + themeDisplay.getPortletDisplay().getId() + "_"> 
8<#assign portletTitle = themeDisplay.getPortletDisplay().getTitle() > 
9<#assign useCustomTitle = themeDisplay.getPortletDisplay().getPortletSetup().getValue("portletSetupUseCustomTitle", "") > 
10 
11<#assign cmsContentService = serviceLocator.findService("com.ch5finland.genelec.cms.service.CMSContentService") > 
12<#assign cmsContentFormatterService = serviceLocator.findService("com.ch5finland.genelec.cms.service.CMSContentFormatterService") > 
13<#assign profileService = serviceLocator.findService("com.ch5finland.genelec.cms.service.ProfileService") > 
14<#assign profile = profileService.getProfile(request) > 
15 
16<#----------------------------------------------------------------------------- 
17    LOOP ENTRIES 
18------------------------------------------------------------------------------> 
19 
20<section class="latest-posts-container" > 
21 
22<#if useCustomTitle == "true"> 
23    <div class="row"> 
24        <div class="col-12 mb-4"> 
25            <h2 class="h2">${portletTitle}</h2> 
26        </div> 
27    </div> 
28</#if> 
29 
30        <div class="row flex-container flex-columns-3"> 
31 
32        <#if entries?has_content>  
33            <#list entries as curEntry>  
34 
35                <#assign articleIdAsString = curEntry.getAssetRenderer().getArticle().getArticleId() > 
36                <#assign cmsEntity = cmsContentService.getEntityByArticleId(profile, articleIdAsString) > 
37                 
38                <#assign id = cmsEntity.getField("/entity/id")> 
39                <#if cmsEntity.getField("/entity/fields/url")??> 
40                    <#assign videoID = "" > 
41                    <#assign videoURL = cmsEntity.getField("/entity/fields/url")> 
42                    <#assign videoType = ""> <#-- Youtube or vimeo --> 
43                     
44                    <#if videoURL?contains("youtu.be")> 
45                        <#assign videoID = videoURL?split("/")?last /> 
46                        <#assign videoType = "youtube"> 
47                    <#elseif videoURL?contains("youtube")> 
48                        <#assign videoID = videoURL?replace("^.*\\?v=([\\w-_]*).*", "$1", "r") />  
49                        <#assign videoType = "youtube"> 
50                    <#elseif videoURL?contains("vimeo")> 
51                        <#assign videoID = videoURL?split("/")?last />  
52                        <#assign videoType = "vimeo"> 
53                    </#if> 
54 
55 
56                    <div class="card card-img flex-item"> 
57                        <div class="aspect-ratio aspect-ratio-16-to-9 aspect-ratio-bg-cover"> 
58                            <div data-slide-id="video-${id}"  
59                                 class="btn zoom-gallery-slide-video video-slide responsive-wrapper active ${videoType}-pop"  
60                                 data-embed="${videoID}"  
61                                 id="video-${id}" 
62                                 aria-labelledby="video-title-header-${id}"> 
63                                <span class="icon-play"></span> 
64                                <span class="round-button"></span> 
65                            </div>                                 
66                        </div> 
67                        <div class="card-padding card-content"> 
68 
69                            <h3 id="video-title-header-${id}" class="h3">${cmsEntity.getLocalizedField(profile, "/entity/fields/title")}</h3> 
70 
71                        </div> 
72                    </div> 
73         
74                </#if> 
75            </#list>  
76        </#if> 
77 
78        </div> 
79 
80</section> 
81<script> 
82 
83 
84$('#${portletId} .vimeo-pop').on('click',function() { 
85	var id = $(this).data('embed'); 
86	var thumb = $(this).find("img"); // we assume thumb ratio is same as video's 
87	loadAndOpenVimeoVideo(id, thumb.width(), thumb.height()); 
88}); 
89 
90$(document).ready(function() { 
91	$( "#${portletId} .vimeo-pop" ).each(function(index){ 
92        var url = createVimeoUrl(this.dataset.embed); 
93		loadVimeoJson(url,this.dataset.embed,'thumbnail'); 
94	}); 
95}); 
96 
97$(document).ready(function() { 
98 
99	var youtube = document.querySelectorAll( ".youtube-pop" ); 
100 
101	$( "#${portletId} .youtube-pop" ).each(function(index){ 
102        if($(this).attr("data-embed") !== undefined){ 
103		var source = "https://img.youtube.com/vi/"+ this.dataset.embed +"/maxresdefault.jpg"; 
104		var videoContainer = this; 
105		 
106		var image = new Image(); 
107				image.src = source; 
108				image.className = "poster-image"; 
109				image.addEventListener( "load", function() { 
110					videoContainer.appendChild( image ); 
111				}( index ) ); 
112				videoContainer.addEventListener( "click", function() { 
113					var iframe = document.createElement( "iframe" ); 
114                    iframe.setAttribute( "frameborder", "0" ); 
115                    iframe.setAttribute( "allowfullscreen", "" ); 
116                    iframe.setAttribute( "allow", "autoplay" ); 
117                    iframe.setAttribute( "src", "https://www.youtube.com/embed/"+ videoContainer.dataset.embed +"?rel=0&autoplay=1" ); 
118                    iframe.setAttribute( "width", "100%" ); 
119                    iframe.setAttribute( "height", "100%" ); 
120                     
121                    var videoContainerSize = maxVideoSize(); 
122                    var videoSize = calcPreferredVideoSize( 
123                        videoContainerSize.width,  
124                        videoContainerSize.height, 
125                        image.width, 
126                        image.height 
127                    );                     
128                    openVideo(this, iframe.outerHTML, videoSize.width, videoSize.height); 
129 
130				} ); 
131        }; 
132	}); 
133 
134}); 
135 
136 
137$( window ).on( "load", function() { 
138    if (window.location.href.includes("?video=") && typeof genelec_videoPopupOpened == 'undefined') { 
139        genelec_videoPopupOpened = true; 
140        var urlParts = window.location.href.split("video="); 
141        if (urlParts.length > 1) { 
142            var videoId = 'video-' + urlParts[1]; 
143            $('#' + videoId).first().click() 
144        } 
145    } 
146}); 
147 
148 
149</script>