<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:media="http://search.yahoo.com/mrss/"
	
	>

<channel>
	<title>jackmccombe</title>
	<link>https://jackmccombe.com</link>
	<description>jackmccombe</description>
	<pubDate>Fri, 26 Jun 2026 20:54:25 +0000</pubDate>
	<generator>https://jackmccombe.com</generator>
	<language>en</language>
	
		
	<item>
		<title>Home</title>
				
		<link>https://jackmccombe.com/Home</link>

		<pubDate>Tue, 27 Jul 2021 21:01:40 +0000</pubDate>

		<dc:creator>jackmccombe</dc:creator>

		<guid isPermaLink="true">https://jackmccombe.com/Home</guid>

		<description>

  .stair-inline {
    display: inline-block;
    width: 816px;
    height: 816px;
    max-width: 100%;
    vertical-align: middle;
  }
  .stair-inline model-viewer {
    width: 100%;
    height: 100%;
    background-color: transparent;
    pointer-events: none;   /* click passes through to the  so it links */
  }

&#60;img width="4454" height="6681" width_o="4454" height_o="6681" data-src="https://freight.cargo.site/t/original/i/ebc929d35b35a39f835132b5d333f9bf9e4c8f46c9ec793ceb2bea2b24df7b71/Transparent-Apse-Front.png" data-mid="114961471" border="0" data-scale="83" src="https://freight.cargo.site/w/1000/i/ebc929d35b35a39f835132b5d333f9bf9e4c8f46c9ec793ceb2bea2b24df7b71/Transparent-Apse-Front.png" /&#62;
&#60;img width="5760" height="3840" width_o="5760" height_o="3840" data-src="https://freight.cargo.site/t/original/i/a046503026a533a5a9520ed3de47c8fc0cdc91cef41c41dd55e88c97ce57adce/MS-64_Mass_Felix_Namque_16-12-22-016.jpg" data-mid="162426784" border="0"  src="https://freight.cargo.site/w/1000/i/a046503026a533a5a9520ed3de47c8fc0cdc91cef41c41dd55e88c97ce57adce/MS-64_Mass_Felix_Namque_16-12-22-016.jpg" /&#62;
&#60;img width="5760" height="3840" width_o="5760" height_o="3840" data-src="https://freight.cargo.site/t/original/i/002a912e97506c53f13ef6f503fc21c662b54bf0d9219b108a9dec115477bf92/Tranparent---MFA-Degree-Show-2019-2MB.png" data-mid="114962950" border="0" data-scale="100" src="https://freight.cargo.site/w/1000/i/002a912e97506c53f13ef6f503fc21c662b54bf0d9219b108a9dec115477bf92/Tranparent---MFA-Degree-Show-2019-2MB.png" /&#62;
&#38;nbsp;&#38;nbsp;

&#60;img width="1957" height="3515" width_o="1957" height_o="3515" data-src="https://freight.cargo.site/t/original/i/0456d03141cdfcf586b9dc718b4fface77338be8c372a0190ce1c157348d5adc/Transparent-Tulip.png" data-mid="114974676" border="0" data-scale="39" src="https://freight.cargo.site/w/1000/i/0456d03141cdfcf586b9dc718b4fface77338be8c372a0190ce1c157348d5adc/Transparent-Tulip.png" /&#62;




&#60;img width="2480" height="3508" width_o="2480" height_o="3508" data-src="https://freight.cargo.site/t/original/i/738c72332901b1cfd6c21827b7a2791d581d0fca1116ac439fbdf2e3ce782ea8/Poem-Short-Hand.jpg" data-mid="115780707" border="0" data-scale="56" src="https://freight.cargo.site/w/1000/i/738c72332901b1cfd6c21827b7a2791d581d0fca1116ac439fbdf2e3ce782ea8/Poem-Short-Hand.jpg" /&#62;

















&#38;nbsp;&#38;nbsp;</description>
		
	</item>
		
		
	<item>
		<title>MENU (JACKMCCOMBE)</title>
				
		<link>https://jackmccombe.com/MENU-JACKMCCOMBE</link>

		<pubDate>Tue, 27 Jul 2021 20:17:59 +0000</pubDate>

		<dc:creator>jackmccombe</dc:creator>

		<guid isPermaLink="true">https://jackmccombe.com/MENU-JACKMCCOMBE</guid>

		<description>&#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp;JACK MCCOMBE


Repetitions of a Maker, Mass Felix Namque, Anon. 1510&#38;nbsp;
Stairs Pitch
Mass Felix Namque, (Kyrie) Anon. 1510&#38;nbsp;


Symphony in Whistles No.1: In Somewhere Between E and F Minor


All The Walls I’ve Plastered in Chronological Order&#38;nbsp;


Moira Hargreaves 


Mastering Plastering and Other Thoughts on Making




About / Contact











</description>
		
	</item>
		
		
	<item>
		<title>Mass Felix Namque</title>
				
		<link>https://jackmccombe.com/Mass-Felix-Namque</link>

		<pubDate>Tue, 27 Jul 2021 20:05:25 +0000</pubDate>

		<dc:creator>jackmccombe</dc:creator>

		<guid isPermaLink="true">https://jackmccombe.com/Mass-Felix-Namque</guid>

		<description>

&#38;nbsp;Repetitions of a Maker: Mass Felix Namque (anon, 1510)

&#38;nbsp; &#38;nbsp; &#38;nbsp; The Royal Scottish Academy @ The National Galleries of Scotland
2021.&#38;nbsp;



6-channel digital audio, gypsum plaster, drywall, chipboard, metal wall studs, steel, stripped digital speaker, castor wheels.



&#60;img width="6463" height="4309" width_o="6463" height_o="4309" data-src="https://freight.cargo.site/t/original/i/14a581c5313f2a55a97a621058cd1094e8110d79e80d73f5ce457b97bb22a178/1F8A3783.jpg" data-mid="114823535" border="0"  src="https://freight.cargo.site/w/1000/i/14a581c5313f2a55a97a621058cd1094e8110d79e80d73f5ce457b97bb22a178/1F8A3783.jpg" /&#62;
&#60;img width="4454" height="6681" width_o="4454" height_o="6681" data-src="https://freight.cargo.site/t/original/i/3363e0fc6fcf26c468ba98629d11871e06a1ac43ed8d9584a7dc805c16ff34c7/1F8A4135.jpg" data-mid="114822284" border="0"  src="https://freight.cargo.site/w/1000/i/3363e0fc6fcf26c468ba98629d11871e06a1ac43ed8d9584a7dc805c16ff34c7/1F8A4135.jpg" /&#62;&#60;img width="4281" height="6422" width_o="4281" height_o="6422" data-src="https://freight.cargo.site/t/original/i/1bba532063dcf5d30d7f95c3236ce3e464b93f5eed9591c4a1a30fbf2b78596f/1F8A4140.jpg" data-mid="114823533" border="0"  src="https://freight.cargo.site/w/1000/i/1bba532063dcf5d30d7f95c3236ce3e464b93f5eed9591c4a1a30fbf2b78596f/1F8A4140.jpg" /&#62;


&#60;img width="3380" height="1962" width_o="3380" height_o="1962" data-src="https://freight.cargo.site/t/original/i/cf681da9e12284fc0c75c980fffffa4d511a55d04b271189647cbb7b4c28e402/Screenshot-2020-11-22-at-18.00.17.png" data-mid="115629453" border="0" data-scale="100" src="https://freight.cargo.site/w/1000/i/cf681da9e12284fc0c75c980fffffa4d511a55d04b271189647cbb7b4c28e402/Screenshot-2020-11-22-at-18.00.17.png" /&#62;

&#60;img width="6468" height="4312" width_o="6468" height_o="4312" data-src="https://freight.cargo.site/t/original/i/d28204109e3781861168e15c67e6b1e0e9b7fbb0f3262250eae75d1ebcb04151/1F8A3852.jpg" data-mid="115629459" border="0"  src="https://freight.cargo.site/w/1000/i/d28204109e3781861168e15c67e6b1e0e9b7fbb0f3262250eae75d1ebcb04151/1F8A3852.jpg" /&#62;



6-channel digital audio, gypsum plaster, drywall, chipboard, metal wall studs, steel, stripped digital speaker, castor wheels. 

Score: &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; Mass Felix Namque

Year: &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp;1510
&#38;nbsp; &#38;nbsp; 
Composer:&#38;nbsp; &#38;nbsp; &#38;nbsp; &#38;nbsp; anonymous
&#38;nbsp;
Performance: &#38;nbsp; &#38;nbsp; Jack McCombe


Felix Namque (Latin for "Be Happy") is a religious mass composed for 6 vocalists 
in the year 1510 – the same year in which the first influenza pandemic was ever documented. The composer of this historic work remains anonymous to this day. 

The polyphonic score, now held by Edinburgh University Library, was not known to exist until its recent discovery in the mid-20th century. Following its finding, the piece is now assumed to have been lost or hidden during the 16th&#38;nbsp;century Scottish Reformation.

 
Presented within a 6-channel audio/architectural installation, the score of Mass Felix Namque has been reproduced and performed in my own whistling; a medium which is closely associated with historic folklore and the foreshadowing of danger and disaster. 

The original score was transposed and adapted for whistling with close consultation and whistling lessons from world champion whistler Yuki Takeda. 













&#60;img width="5760" height="3840" width_o="5760" height_o="3840" data-src="https://freight.cargo.site/t/original/i/32f9fd517643af98e76a7493ec1883c7d5cc90d9f8454cb72b691792ebe5949c/MS-64_Mass_Felix_Namque_16-12-22-022.jpg" data-mid="162427363" border="0"  src="https://freight.cargo.site/w/1000/i/32f9fd517643af98e76a7493ec1883c7d5cc90d9f8454cb72b691792ebe5949c/MS-64_Mass_Felix_Namque_16-12-22-022.jpg" /&#62;
&#60;img width="5760" height="3840" width_o="5760" height_o="3840" data-src="https://freight.cargo.site/t/original/i/ef00fe5f8e7186e23435508abcbd03b27353448331c3b203ebee14023d6da68e/MS-64_Mass_Felix_Namque_16-12-22-023.jpg" data-mid="162427364" border="0"  src="https://freight.cargo.site/w/1000/i/ef00fe5f8e7186e23435508abcbd03b27353448331c3b203ebee14023d6da68e/MS-64_Mass_Felix_Namque_16-12-22-023.jpg" /&#62;
&#60;img width="5760" height="3840" width_o="5760" height_o="3840" data-src="https://freight.cargo.site/t/original/i/498646964515b758f6a207877ec5eda0e8ed59e46b05022f6ef54b69796d74de/MS-64_Mass_Felix_Namque_16-12-22-024.jpg" data-mid="162427365" border="0"  src="https://freight.cargo.site/w/1000/i/498646964515b758f6a207877ec5eda0e8ed59e46b05022f6ef54b69796d74de/MS-64_Mass_Felix_Namque_16-12-22-024.jpg" /&#62;
&#60;img width="5760" height="3840" width_o="5760" height_o="3840" data-src="https://freight.cargo.site/t/original/i/9a2983e1f16c7a93db0c1aaec12c80a26683958b59228e4a72db9717ec064537/MS-64_Mass_Felix_Namque_16-12-22-026.jpg" data-mid="162427366" border="0"  src="https://freight.cargo.site/w/1000/i/9a2983e1f16c7a93db0c1aaec12c80a26683958b59228e4a72db9717ec064537/MS-64_Mass_Felix_Namque_16-12-22-026.jpg" /&#62;








































</description>
		
	</item>
		
		
	<item>
		<title>Moira Hargeaves</title>
				
		<link>https://jackmccombe.com/Moira-Hargeaves</link>

		<pubDate>Mon, 09 Aug 2021 15:49:40 +0000</pubDate>

		<dc:creator>jackmccombe</dc:creator>

		<guid isPermaLink="true">https://jackmccombe.com/Moira-Hargeaves</guid>

		<description>


&#38;nbsp;Moira Hargreaves (About Common Grounds)&#38;nbsp;
&#38;nbsp; &#38;nbsp; &#38;nbsp;&#38;nbsp;The Glasgow School of Art, Master of Fine Art Dept,
2019.

&#60;img width="2480" height="3508" width_o="2480" height_o="3508" data-src="https://freight.cargo.site/t/original/i/738c72332901b1cfd6c21827b7a2791d581d0fca1116ac439fbdf2e3ce782ea8/Poem-Short-Hand.jpg" data-mid="115772626" border="0"  src="https://freight.cargo.site/w/1000/i/738c72332901b1cfd6c21827b7a2791d581d0fca1116ac439fbdf2e3ce782ea8/Poem-Short-Hand.jpg" /&#62;
&#38;nbsp;“About Common Grounds” by Moira Hargreaves.Poem in shorthand notation. Inkjet on newsprint.


It occurred to me they were striving,
obsessed,
necessary to replace.
This was a theory
intended to encourage 
a common ground.


Process.
In collaboration with other people.
Although their projects’ differed, there was a perspective,
a struggle.

Architecture (old and new)
and wide open spaces.
These views were important to stimulate a discussion of difference.

With the reflection of images,
those of a monument,
familiar to me as a Glasgow resident,
they sought the shapes 
to define a structure.

And trials of normal and artificial light.

The effect of this,
the exceptional drawings all done,
would leave the artist dissatisfied.


&#60;img width="2552" height="3508" width_o="2552" height_o="3508" data-src="https://freight.cargo.site/t/original/i/638fb8ca660230b1ce488c42c091f04938395ed1ff931551c52549a33e0d58ef/Scan-2.jpg" data-mid="115773397" border="0"  src="https://freight.cargo.site/w/1000/i/638fb8ca660230b1ce488c42c091f04938395ed1ff931551c52549a33e0d58ef/Scan-2.jpg" /&#62;


&#60;img width="2552" height="3508" width_o="2552" height_o="3508" data-src="https://freight.cargo.site/t/original/i/8e37d08e0ffd571852df04dbd2a3d13a4f483a3de58100aa60398846c6169967/Scan-1.jpg" data-mid="115773396" border="0"  src="https://freight.cargo.site/w/1000/i/8e37d08e0ffd571852df04dbd2a3d13a4f483a3de58100aa60398846c6169967/Scan-1.jpg" /&#62;



In 2019 at the Glasgow School of Art where I was studying my Masters of Fine Art Degree along with 29 other students, my grandmother Moira Hargreaves visited the MFA department as a visiting tutor.

Throughout the academic year, the MFA staff would invite established local and international artists, curators, philosphers and writers into the department to meet with its current students and discuss their ongoing work.&#38;nbsp;

Students would have the opportunity to “sign-up” to see the visiting tutors they feel most interested in, and whom may offer valuable insigt and context to their work and practice. A biography outlinging the accolades and interests of each visitor coming into the department would be posted on the communal notice board, next to which a sign up sheet would also be posted for students to reserve their time with the visitor.
For Thursday the 16th of November, I convinced the MFA staff to invite my grandmother into the department as a visiting tutor. Although having no formal training in the arts, Moira has always had a deeply critical curiosity into my own practice and my decisions to persue a career as an artist.
 The students who signed up to see Moira were unaware of my relationship to her and simply made their decision to have a studio visit with her from reading her biography posted on the notice board.
By using extracts from the shorthand notations she made during each of the tutorials, Moira produced a shorthand poem entitled “About Common Grounds”.
&#38;nbsp;
















































</description>
		
	</item>
		
		
	<item>
		<title>All The Walls I've Plastered in Chronological Order</title>
				
		<link>https://jackmccombe.com/All-The-Walls-I-ve-Plastered-in-Chronological-Order</link>

		<pubDate>Tue, 17 Aug 2021 14:37:33 +0000</pubDate>

		<dc:creator>jackmccombe</dc:creator>

		<guid isPermaLink="true">https://jackmccombe.com/All-The-Walls-I-ve-Plastered-in-Chronological-Order</guid>

		<description>
&#38;nbsp;All The Walls I've Plastered in Chronological Order&#38;nbsp;
&#38;nbsp; &#38;nbsp; &#38;nbsp;&#38;nbsp;Various Locations, 
past - present.

&#60;img width="5750" height="3833" width_o="5750" height_o="3833" data-src="https://freight.cargo.site/t/original/i/9413fdd23753be8adac0220ae6495b41759aad370bb45ad7503757fde0467610/DY3A1983.jpg" data-mid="116659216" border="0" data-scale="100" src="https://freight.cargo.site/w/1000/i/9413fdd23753be8adac0220ae6495b41759aad370bb45ad7503757fde0467610/DY3A1983.jpg" /&#62;October, 2017.



&#60;img width="5240" height="3493" width_o="5240" height_o="3493" data-src="https://freight.cargo.site/t/original/i/c239a69c71491e5e0c2dae4af121b1eb2951d8917abe00f6b6f6877dba792e1f/DY3A2721.jpg" data-mid="116660530" border="0"  src="https://freight.cargo.site/w/1000/i/c239a69c71491e5e0c2dae4af121b1eb2951d8917abe00f6b6f6877dba792e1f/DY3A2721.jpg" /&#62;November, 2017.



&#60;img width="5760" height="3840" width_o="5760" height_o="3840" data-src="https://freight.cargo.site/t/original/i/c02f46b5ccb453468c0a7eb4ccbdae9457e5f60e6a5f634707819d721354d285/DY3A3755.jpg" data-mid="116659415" border="0"  src="https://freight.cargo.site/w/1000/i/c02f46b5ccb453468c0a7eb4ccbdae9457e5f60e6a5f634707819d721354d285/DY3A3755.jpg" /&#62;
December, 2017.



&#60;img width="5758" height="3839" width_o="5758" height_o="3839" data-src="https://freight.cargo.site/t/original/i/802f9734c75772ada5175ebc8d03703407f06cb5af883e822938b40133c4af10/DY3A3746.jpg" data-mid="116659394" border="0"  src="https://freight.cargo.site/w/1000/i/802f9734c75772ada5175ebc8d03703407f06cb5af883e822938b40133c4af10/DY3A3746.jpg" /&#62;
December, 2017.



&#60;img width="5686" height="3791" width_o="5686" height_o="3791" data-src="https://freight.cargo.site/t/original/i/75e864c526d3fff5eeaf46eb357fe0e043f43e9481d94599c373f140f1f379b1/DY3A3751.jpg" data-mid="116659408" border="0"  src="https://freight.cargo.site/w/1000/i/75e864c526d3fff5eeaf46eb357fe0e043f43e9481d94599c373f140f1f379b1/DY3A3751.jpg" /&#62;
December, 2017.



&#60;img width="3819" height="5729" width_o="3819" height_o="5729" data-src="https://freight.cargo.site/t/original/i/4fff7bd0a441887a79eb047548cb9b5bfb40f735729c20742e774bac9cc2b554/DY3A3950-low-res.jpg" data-mid="116659424" border="0"  src="https://freight.cargo.site/w/1000/i/4fff7bd0a441887a79eb047548cb9b5bfb40f735729c20742e774bac9cc2b554/DY3A3950-low-res.jpg" /&#62;
January, 2018.


&#60;img width="3773" height="5660" width_o="3773" height_o="5660" data-src="https://freight.cargo.site/t/original/i/e937d1b8685ac93e4f8b8298f3490783cb0d63ac42f417013ad3d66a80539f51/DY3A3967.jpg" data-mid="116659425" border="0"  src="https://freight.cargo.site/w/1000/i/e937d1b8685ac93e4f8b8298f3490783cb0d63ac42f417013ad3d66a80539f51/DY3A3967.jpg" /&#62;
January, 2018.



&#60;img width="5760" height="3840" width_o="5760" height_o="3840" data-src="https://freight.cargo.site/t/original/i/0d3e28fc5f3570fbebc701ac5b4bf6d1f2b8e437bcf58eff05eec57646edf0af/MFA-Degree-Show-2019-2MB-2.jpg" data-mid="116662136" border="0"  src="https://freight.cargo.site/w/1000/i/0d3e28fc5f3570fbebc701ac5b4bf6d1f2b8e437bcf58eff05eec57646edf0af/MFA-Degree-Show-2019-2MB-2.jpg" /&#62;
May, 2019.



&#60;img width="5760" height="3840" width_o="5760" height_o="3840" data-src="https://freight.cargo.site/t/original/i/cc21e82e3e00d78ef35f24ab045ba1ee63463e184928510339dea82f0fe40f4f/MFA-Degree-Show-2019-2MB-4.jpg" data-mid="116662157" border="0"  src="https://freight.cargo.site/w/1000/i/cc21e82e3e00d78ef35f24ab045ba1ee63463e184928510339dea82f0fe40f4f/MFA-Degree-Show-2019-2MB-4.jpg" /&#62;
May, 2019.



&#60;img width="4454" height="6681" width_o="4454" height_o="6681" data-src="https://freight.cargo.site/t/original/i/3363e0fc6fcf26c468ba98629d11871e06a1ac43ed8d9584a7dc805c16ff34c7/1F8A4135.jpg" data-mid="116659206" border="0"  src="https://freight.cargo.site/w/1000/i/3363e0fc6fcf26c468ba98629d11871e06a1ac43ed8d9584a7dc805c16ff34c7/1F8A4135.jpg" /&#62;
December, 2020.

</description>
		
	</item>
		
		
	<item>
		<title>Render the Moment; Break With the Earth</title>
				
		<link>https://jackmccombe.com/Render-the-Moment-Break-With-the-Earth-1</link>

		<pubDate>Thu, 11 Nov 2021 20:27:51 +0000</pubDate>

		<dc:creator>jackmccombe</dc:creator>

		<guid isPermaLink="true">https://jackmccombe.com/Render-the-Moment-Break-With-the-Earth-1</guid>

		<description>
&#38;nbsp;Render the Moment; Break With the Earth&#38;nbsp;
&#38;nbsp; &#38;nbsp; &#38;nbsp;&#38;nbsp;Various Locations, 
past - present.




</description>
		
	</item>
		
		
	<item>
		<title>Symphony in Whistles no.1</title>
				
		<link>https://jackmccombe.com/Symphony-in-Whistles-no-1</link>

		<pubDate>Tue, 27 Jul 2021 20:25:33 +0000</pubDate>

		<dc:creator>jackmccombe</dc:creator>

		<guid isPermaLink="true">https://jackmccombe.com/Symphony-in-Whistles-no-1</guid>

		<description>



&#38;nbsp;Symphony in Whistles No.1: In SomewhereBetween E and F Minor&#38;nbsp;
Glasgow School of Art MFA Degree @ The Glue Factory,
2019







&#60;img width="3840" height="5760" width_o="3840" height_o="5760" data-src="https://freight.cargo.site/t/original/i/2ce9a561923ab8ae97102a89db9d1e35dd0998af4e90f0e2b15871a502864cad/MFA-Degree-Show-2019-2MB-6.jpg" data-mid="114825067" border="0"  src="https://freight.cargo.site/w/1000/i/2ce9a561923ab8ae97102a89db9d1e35dd0998af4e90f0e2b15871a502864cad/MFA-Degree-Show-2019-2MB-6.jpg" /&#62;

&#60;img width="5760" height="3840" width_o="5760" height_o="3840" data-src="https://freight.cargo.site/t/original/i/cc21e82e3e00d78ef35f24ab045ba1ee63463e184928510339dea82f0fe40f4f/MFA-Degree-Show-2019-2MB-4.jpg" data-mid="114825071" border="0"  src="https://freight.cargo.site/w/1000/i/cc21e82e3e00d78ef35f24ab045ba1ee63463e184928510339dea82f0fe40f4f/MFA-Degree-Show-2019-2MB-4.jpg" /&#62;

&#60;img width="5760" height="3840" width_o="5760" height_o="3840" data-src="https://freight.cargo.site/t/original/i/65358beca5841967bda56282d45d8bf1790dd16897cee9ecfa8d4f7afc8fec5d/MFA-Degree-Show-2019-2MB.jpg" data-mid="114825074" border="0"  src="https://freight.cargo.site/w/1000/i/65358beca5841967bda56282d45d8bf1790dd16897cee9ecfa8d4f7afc8fec5d/MFA-Degree-Show-2019-2MB.jpg" /&#62;

&#60;img width="5760" height="3840" width_o="5760" height_o="3840" data-src="https://freight.cargo.site/t/original/i/0d3e28fc5f3570fbebc701ac5b4bf6d1f2b8e437bcf58eff05eec57646edf0af/MFA-Degree-Show-2019-2MB-2.jpg" data-mid="114825072" border="0"  src="https://freight.cargo.site/w/1000/i/0d3e28fc5f3570fbebc701ac5b4bf6d1f2b8e437bcf58eff05eec57646edf0af/MFA-Degree-Show-2019-2MB-2.jpg" /&#62;

&#60;img width="5760" height="3840" width_o="5760" height_o="3840" data-src="https://freight.cargo.site/t/original/i/3055da0e46fdaa300efa673551445e931f9eed7e5e38a33a3a70bd8d8b42ac19/MFA-Degree-Show-2019-2MB-3.jpg" data-mid="114825073" border="0"  src="https://freight.cargo.site/w/1000/i/3055da0e46fdaa300efa673551445e931f9eed7e5e38a33a3a70bd8d8b42ac19/MFA-Degree-Show-2019-2MB-3.jpg" /&#62;

&#60;img width="5760" height="3840" width_o="5760" height_o="3840" data-src="https://freight.cargo.site/t/original/i/9720675c106fb93d1e0bf8d2616c0c69fd1743b408a0ab0c02f087e26d6736eb/MFA-Degree-Show-2019-2MB-7.jpg" data-mid="114825068" border="0"  src="https://freight.cargo.site/w/1000/i/9720675c106fb93d1e0bf8d2616c0c69fd1743b408a0ab0c02f087e26d6736eb/MFA-Degree-Show-2019-2MB-7.jpg" /&#62;

&#60;img width="3840" height="5760" width_o="3840" height_o="5760" data-src="https://freight.cargo.site/t/original/i/a9a2b31c1d0ee546a0c357044b293d1f5e049a4bf7e2bce78ffac40f8fafdf7e/MFA-Degree-Show-2019-2MB-5.jpg" data-mid="114825069" border="0"  src="https://freight.cargo.site/w/1000/i/a9a2b31c1d0ee546a0c357044b293d1f5e049a4bf7e2bce78ffac40f8fafdf7e/MFA-Degree-Show-2019-2MB-5.jpg" /&#62;

</description>
		
	</item>
		
		
	<item>
		<title>Stairs Pitch</title>
				
		<link>https://jackmccombe.com/Stairs-Pitch</link>

		<pubDate>Fri, 26 Jun 2026 20:54:25 +0000</pubDate>

		<dc:creator>jackmccombe</dc:creator>

		<guid isPermaLink="true">https://jackmccombe.com/Stairs-Pitch</guid>

		<description>


  
    Stairs Pitch
    
      Enable audio
    
    
      
    
    Ready for interaction.
  



  
    
    
  


.


  
    &#60;img src="https://res.cloudinary.com/z31tztds/image/upload/v1783624036/score_transparent_1_hjkt42.png" alt="Sheet music with a long melodic line" class="stairs-image" data-score-img="" style="opacity: 0;"&#62;
  



  .stairs-audio {
    --panel: rgba(255,255,255,0.06);
    --line: rgba(255,255,255,0.16);
    --text: #f5f3ee;
    --muted: rgba(245,243,238,0.72);
    --accent: #d7b15a;
    color: var(--text);
    background: linear-gradient(to bottom, #ff2a2a 0%, #a53cff 50%, #2a6bff 100%);
    min-height: 110vh;
    position: relative;
  }

  .stairs-audio__inner {
    position: sticky;
    top: 0;
    min-height: 100vh;
    display: grid;
    align-content: center;
    gap: 1rem;
    padding: clamp(1.5rem, 4vw, 4rem);
    max-width: 46rem;
  }

  .stairs-audio__eyebrow {
    font: 600 0.8rem/1.2 Arial, sans-serif;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--muted);
    margin: 0;
  }

  .stairs-audio__button {
    width: fit-content;
    min-height: 44px;
    padding: 0.8rem 1.1rem;
    border: 1px solid var(--line);
    background: rgba(255,255,255,0.08);
    color: var(--text);
    -webkit-text-fill-color: var(--text);
    font: 600 0.95rem/1 Arial, sans-serif;
    letter-spacing: 0.01em;
    cursor: pointer;
    transition: background 180ms ease, border-color 180ms ease, transform 180ms ease;
  }

  .stairs-audio__button:hover,
  .stairs-audio__button:focus-visible {
    background: rgba(255,255,255,0.14);
    border-color: rgba(255,255,255,0.32);
  }

  .stairs-audio__button:active {
    transform: translateY(1px);
  }

  .stairs-audio__status {
    font: 400 0.8rem/1.4 Arial, sans-serif;
    color: rgba(245,243,238,0.56);
    margin: 0;
  }

  .stairs-audio__meter {
    width: min(32rem, 100%);
    height: 0.4rem;
    background: rgba(255,255,255,0.08);
    overflow: hidden;
  }

  .stairs-audio__meter-fill {
    width: 0%;
    height: 100%;
    background: linear-gradient(90deg, var(--accent), #f0e3b7);
    transition: width 90ms linear;
  }

  .stairs-3d {
    min-height: 200vh;
    position: relative;
    background: #2a6bff;
  }

  .stairs-3d__pin {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
  }

  .stairs-3d__pin model-viewer {
    width: min(100%, 900px);
    height: 100%;
  }

  .stairs-gap {
    min-height: 20vh;
    background: #2a6bff;
  }

  .stairs-gap__spacer {
    display: block;
    height: 1px;
    color: transparent;
    user-select: none;
  }

  .stairs-score {
    min-height: 150vh;
    position: relative;
    background: #2a6bff;
  }

  .stairs-score__pin {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: clamp(1.5rem, 4vw, 4rem);
    box-sizing: border-box;
  }

  .stairs-image {
    max-width: min(100%, 1400px);
    max-height: 60vh;
    width: auto;
    height: auto;
    display: block;
    opacity: 0;
  }

  @media (max-width: 640px) {
    .stairs-audio { min-height: 100vh; }
    .stairs-3d { min-height: 140vh; }
    .stairs-gap { min-height: 6vh; }
    .stairs-score { min-height: 140vh; }
  }



(function () {
  const AUDIO_URL = "https://files.cargocollective.com/c1202650/DOWN.wav";
  const root = document.querySelector('[data-stairs-audio]');
  if (!root) return;

  const timelineEnd = document.querySelector('[data-stairs-score]');

  const button = root.querySelector('[data-audio-toggle]');
  const status = root.querySelector('[data-audio-status]');
  const progress = root.querySelector('[data-audio-progress]');

  let audioContext = null;
  let audioBuffer = null;
  let enabled = false;
  let rafId = null;
  let animationId = null;
  let targetProgress = 0;
  let lastMotionProgress = 0;
  let lastMotionTime = 0;
  let lastGrainAt = 0;
  let activeSources = [];

  const GRAIN_DURATION = 0.35;
  const GRAIN_INTERVAL = 0.03;
  const GRAIN_GAIN = 0.09;
  const MOTION_THRESHOLD = 0.002;
  const MOTION_TIMEOUT_MS = 70;
  const FADE_OUT_TIME = 0.18;
  const GRAIN_FADE = 0.025;
  const TARGET_SMOOTHING = 0.08;

  function setStatus(message) {
    status.textContent = message;
  }

  function setMeter(value) {
    progress.style.width = (Math.max(0, Math.min(1, value)) * 100).toFixed(2) + '%';
  }

  function stopAllSources() {
    activeSources.forEach(function (item) {
      try {
        item.gain.gain.cancelScheduledValues(audioContext.currentTime);
        item.gain.gain.setValueAtTime(Math.max(0.0001, item.gain.gain.value &#124;&#124; 0.0001), audioContext.currentTime);
        item.gain.gain.setTargetAtTime(0.0001, audioContext.currentTime, 0.04);
        item.source.stop(audioContext.currentTime + FADE_OUT_TIME + 0.01);
      } catch (e) {}
    });
    activeSources = [];
  }

  async function setupAudio() {
    if (!audioContext) audioContext = new (window.AudioContext &#124;&#124; window.webkitAudioContext)();
    if (audioContext.state === 'suspended') await audioContext.resume();

    if (!audioBuffer) {
      setStatus('Loading whistle audio...');
      const response = await fetch(AUDIO_URL);
      if (!response.ok) throw new Error('Audio request failed: ' + response.status);
      const arrayBuffer = await response.arrayBuffer();
      audioBuffer = await audioContext.decodeAudioData(arrayBuffer);
    }

    enabled = true;
    button.setAttribute('aria-pressed', 'true');
    button.textContent = 'Audio enabled';
    setStatus('Scroll to scrub through the whistle.');
    startAudioLoop();
  }

  function playGrain(progressValue) {
    if (!enabled &#124;&#124; !audioContext &#124;&#124; !audioBuffer) return;

    const now = audioContext.currentTime;
    if (now - lastGrainAt &#60; GRAIN_INTERVAL) return;

    const source = audioContext.createBufferSource();
    source.buffer = audioBuffer;

    const gain = audioContext.createGain();
    gain.gain.setValueAtTime(0.0001, now);
    gain.gain.setTargetAtTime(GRAIN_GAIN, now, GRAIN_FADE);
    gain.gain.setTargetAtTime(0.0001, now + Math.max(0.01, GRAIN_DURATION - GRAIN_FADE), GRAIN_FADE);

    source.connect(gain).connect(audioContext.destination);

    const maxOffset = Math.max(0, audioBuffer.duration - GRAIN_DURATION);
    const offset = Math.max(0, Math.min(maxOffset, progressValue * maxOffset));
    source.start(now, offset, GRAIN_DURATION);
    source.stop(now + GRAIN_DURATION);

    const item = { source: source, gain: gain };
    activeSources.push(item);
    source.onended = function () {
      activeSources = activeSources.filter(function (entry) { return entry !== item; });
    };

    lastGrainAt = now;
  }

  function getScrollProgress() {
    const firstRect = root.getBoundingClientRect();
    const endEl = timelineEnd &#124;&#124; root;
    const lastRect = endEl.getBoundingClientRect();
    const H = window.innerHeight &#124;&#124; 1;
    const totalHeight = lastRect.bottom - firstRect.top;
    const denom = Math.max(1, totalHeight - H);
    const scrolledPast = -firstRect.top;
    return Math.min(1, Math.max(0, scrolledPast / denom));
  }

  function updateTarget() {
    const raw = getScrollProgress();
    targetProgress += (raw - targetProgress) * TARGET_SMOOTHING;
    setMeter(targetProgress);
    rafId = null;
  }

  function requestUpdate() {
    if (rafId) return;
    rafId = requestAnimationFrame(updateTarget);
  }

  function startAudioLoop() {
    if (animationId) return;

    const tick = function (time) {
      const movement = Math.abs(targetProgress - lastMotionProgress);
      const moving = movement &#62; MOTION_THRESHOLD;

      if (moving) {
        lastMotionTime = time;
        lastMotionProgress = targetProgress;
        playGrain(targetProgress);
      } else if (time - lastMotionTime &#62; MOTION_TIMEOUT_MS) {
        stopAllSources();
      }

      animationId = requestAnimationFrame(tick);
    };

    animationId = requestAnimationFrame(tick);
  }

  button.addEventListener('click', async function () {
    try {
      await setupAudio();
      requestUpdate();
    } catch (error) {
      console.error(error);
      setStatus('Could not load audio. Cargo may be blocking fetch or the WAV may need conversion to MP3.');
    }
  });

  window.addEventListener('scroll', requestUpdate, { passive: true });
  window.addEventListener('resize', requestUpdate);
  requestUpdate();

  function pinState(stageEl) {
    const rect = stageEl.getBoundingClientRect();
    const H = window.innerHeight &#124;&#124; 1;
    if (rect.top &#62; 0) return 'enter';
    if (rect.bottom &#62; H) return 'lock';
    return 'exit';
  }

  function applyPinState(pinEl, state) {
    if (state === 'enter') {
      pinEl.style.position = 'absolute'; pinEl.style.top = '0'; pinEl.style.bottom = 'auto';
    } else if (state === 'lock') {
      pinEl.style.position = 'fixed'; pinEl.style.top = '0'; pinEl.style.bottom = 'auto';
    } else {
      pinEl.style.position = 'absolute'; pinEl.style.top = 'auto'; pinEl.style.bottom = '0';
    }
  }

  const stage = document.querySelector('[data-stairs-3d]');
  const staircase = document.querySelector('[data-staircase]');
  const pin = document.querySelector('[data-stairs-pin]');

  const scoreStage = document.querySelector('[data-stairs-score]');
  const scorePin = document.querySelector('[data-score-pin]');
  const scoreImg = document.querySelector('[data-score-img]');

  const PLAN = { theta: 0,  phi: 0    };
  const ISO  = { theta: 45, phi: 54.7 };

  const ROT_START = 0.5;
  const ROT_END   = -0.1;

  // Fade distance (in viewports). Shorter on mobile so the score arrives quicker.
  const SCORE_FADE_DESKTOP = 1.6;
  const SCORE_FADE_MOBILE  = 0.5;
  function scoreFade() {
    return (window.innerWidth </description>
		
	</item>
		
	</channel>
</rss>