{"id":10039,"date":"2021-03-23T10:19:53","date_gmt":"2021-03-23T17:19:53","guid":{"rendered":"https:\/\/www.pianogenius.com\/members\/?page_id=10039"},"modified":"2025-08-12T09:35:05","modified_gmt":"2025-08-12T16:35:05","slug":"65-show","status":"publish","type":"page","link":"https:\/\/www.pianogenius.com\/members\/training\/module65\/65-show\/","title":{"rendered":"Keisha D. &#038; Tim Gross Show"},"content":{"rendered":"<p>To see the full listing of what&#8217;s in this Module\u00a0<a href=\"https:\/\/www.pianogenius.com\/members\/training\/module65\/\">click here<\/a> for an overview.<\/p>\n<p>I just did a live <strong>&#8220;Facebook Live&#8221; show<\/strong> with my friend Keisha D. You can still watch the live show if you missed it, and this Module goes through how I rehearsed and learned the new songs I&#8217;m going to play with her.<\/p>\n<p>This Module covers the three new songs I learned for this show, Little Big Town&#8217;s &#8220;Girl Crush&#8221;, Alicia Keys &#8220;If I Ain&#8217;t Got You&#8221;, and Patsy Cline &#8220;Crazy&#8221;. Just click on the image below or the red arrow to continue on to this Module.<\/p>\n<p style=\"text-align: center;\"><strong>Watch the Facebook Live Show:<\/strong><\/p>\n<\/p>\n<div id=\"vloop-media\" class=\"vloop wide2\" data-aspect=\"16-9\">\n    <div class=\"vloop-wrapper\"\n         id=\"vloop-wrap-vlp_69d1014942a46\"\n         data-native-width=\"1072\"\n         data-native-height=\"603\"\n         data-has-controls=\"true\">\n\n        <div class=\"vloop-container\"\n             id=\"vloop-container-vlp_69d1014942a46\"\n             style=\"position: relative; width: 100%; max-width: 1072px; aspect-ratio: 1072 \/ 603;\">\n\n            <iframe id=\"vimeo-player-vlp_69d1014942a46\"\n                src=\"https:\/\/player.vimeo.com\/video\/1109402910?badge=0&autopause=0&player_id=0&app_id=58479\"\n                frameborder=\"0\"\n                allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media\"\n                style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\"\n                title=\"PianoGenius\">\n            <\/iframe>\n        <\/div>\n\n                <div id=\"loop-controls-vlp_69d1014942a46\" class=\"loop-controls\" style=\"width: 100%; margin-top: 8px; display: flex; justify-content: center;\">\n            <div class=\"loop-row\">\n                <button id=\"setA-vlp_69d1014942a46\" class=\"loop-btn setA\">Set A Point<\/button>\n                <span id=\"a-time-vlp_69d1014942a46\" class=\"loop-time\">--:--<\/span>\n                <span class=\"loop-dingbat\">&#8634;<\/span>\n                <span id=\"b-time-vlp_69d1014942a46\" class=\"loop-time\">--:--<\/span>\n                <button id=\"setB-vlp_69d1014942a46\" class=\"loop-btn setB\">Set B Point<\/button>\n                <button id=\"startLoop-vlp_69d1014942a46\" class=\"loop-btn startLoop\">&#9658; Run Loop<\/button>\n                <button id=\"stopLoop-vlp_69d1014942a46\" class=\"loop-btn stopLoop\">Remove Loop<\/button>\n                <select id=\"speedSelect-vlp_69d1014942a46\" class=\"speed-dropdown\">\n                    <option value=\"1\" selected>Speed \u25bc<\/option>\n                    <option value=\"0.5\">0.5x<\/option>\n                    <option value=\"0.75\">0.75x<\/option>\n                    <option value=\"1\">1x (Normal)<\/option>\n                    <option value=\"1.25\">1.25x<\/option>\n                    <option value=\"1.5\">1.5x<\/option>\n                    <option value=\"1.75\">1.75x<\/option>\n                    <option value=\"2\">2x<\/option>\n                <\/select>\n            <\/div>\n        <\/div>\n            <\/div>\n\n        <script>\n    \/\/ Load Vimeo API once\n    (function loadVimeo(){\n        if (window.Vimeo && window.Vimeo.Player) return;\n        var s = document.createElement('script');\n        s.src = \"https:\/\/player.vimeo.com\/api\/player.js\";\n        s.async = true;\n        document.head.appendChild(s);\n    })();\n    <\/script>\n\n    <script>\n    (function(uid){\n        function fitPlayerToViewport() {\n            var wrap = document.getElementById(\"vloop-wrap-\" + uid);\n            var container = document.getElementById(\"vloop-container-\" + uid);\n            var controls = document.getElementById(\"loop-controls-\" + uid);\n\n            if (!wrap || !container) return;\n\n            var nativeWidth = parseInt(wrap.getAttribute(\"data-native-width\"), 10);\n            var nativeHeight = parseInt(wrap.getAttribute(\"data-native-height\"), 10);\n\n            if (!nativeWidth || !nativeHeight) return;\n\n            var parent = wrap.parentElement;\n            if (!parent) return;\n\n            var parentWidth = parent.clientWidth;\n            if (!parentWidth || parentWidth < 1) {\n                parentWidth = window.innerWidth || document.documentElement.clientWidth || nativeWidth;\n            }\n\n            \/\/ Estimate total non-video vertical space that should remain visible.\n            \/\/ This includes controls, a little breathing room, and a larger safety margin\n            \/\/ so the controls remain visible on shorter screens and zoomed browsers.\n            var controlsHeight = controls ? controls.offsetHeight : 0;\n            var extraReserve = controls ? 96 : 20;\n\n            \/\/ Use visualViewport when available because it reflects browser zoom better.\n            var viewportHeight = (window.visualViewport && window.visualViewport.height)\n                ? window.visualViewport.height\n                : (window.innerHeight || document.documentElement.clientHeight || 900);\n\n            var availableVideoHeight = viewportHeight - controlsHeight - extraReserve;\n\n            \/\/ Prevent absurdly tiny calculations if something is temporarily off during layout\n            if (availableVideoHeight < 180) {\n                availableVideoHeight = 180;\n            }\n\n            var safeWidthFromHeight = Math.floor(availableVideoHeight * (nativeWidth \/ nativeHeight));\n\n            \/\/ Final width is limited by:\n            \/\/ 1) original shortcode width\n            \/\/ 2) available parent width\n            \/\/ 3) height-safe width so the full block fits on shorter screens \/ zoomed browsers\n            var finalWidth = Math.min(nativeWidth, parentWidth, safeWidthFromHeight);\n\n            if (finalWidth < 220) {\n                finalWidth = Math.min(nativeWidth, parentWidth);\n            }\n\n            container.style.maxWidth = finalWidth + \"px\";\n        }\n\n        function init() {\n            fitPlayerToViewport();\n\n            if (!(window.Vimeo && window.Vimeo.Player)) {\n                return setTimeout(init, 50);\n            }\n\n            var iframe = document.getElementById(\"vimeo-player-\" + uid);\n            if (!iframe) return;\n\n            var player;\n            try {\n                player = new Vimeo.Player(iframe);\n            } catch (e) {\n                return;\n            }\n\n            var setA            = document.getElementById(\"setA-\" + uid);\n            var setB            = document.getElementById(\"setB-\" + uid);\n            var startLoopButton = document.getElementById(\"startLoop-\" + uid);\n            var stopLoopButton  = document.getElementById(\"stopLoop-\" + uid);\n            var speedSelect     = document.getElementById(\"speedSelect-\" + uid);\n            var aTime           = document.getElementById(\"a-time-\" + uid);\n            var bTime           = document.getElementById(\"b-time-\" + uid);\n\n            \/\/ When controls are absent (noloop=\"true\"), do nothing\n            if (!(setA && setB && startLoopButton && stopLoopButton && speedSelect && aTime && bTime)) {\n                return;\n            }\n\n            var inPoint = null, outPoint = null, loopActive = false;\n\n            function formatTime(seconds) {\n                var minutes = Math.floor(seconds \/ 60);\n                var sec = Math.floor(seconds % 60);\n                return minutes + \":\" + (sec < 10 ? \"0\" + sec : sec);\n            }\n\n            setA.addEventListener(\"click\", function () {\n                player.getCurrentTime().then(function(time) {\n                    inPoint = time;\n                    aTime.textContent = formatTime(time);\n                });\n            });\n\n            setB.addEventListener(\"click\", function () {\n                player.getCurrentTime().then(function(time) {\n                    outPoint = time;\n                    bTime.textContent = formatTime(time);\n                });\n            });\n\n            startLoopButton.addEventListener(\"click\", function () {\n                if (inPoint !== null && outPoint !== null && inPoint < outPoint) {\n                    loopActive = !loopActive;\n                    if (loopActive) {\n                        startLoopButton.textContent = \"Pause Loop\";\n                        player.setCurrentTime(inPoint);\n                        player.play();\n                        player.off('timeupdate');\n                        player.on('timeupdate', function (data) {\n                            if (loopActive && data.seconds >= outPoint) {\n                                player.setCurrentTime(inPoint);\n                            }\n                        });\n                    } else {\n                        startLoopButton.textContent = \"Run Loop\";\n                    }\n                } else {\n                    alert(\"Set valid A and B points first.\");\n                }\n            });\n\n            stopLoopButton.addEventListener(\"click\", function () {\n                loopActive = false;\n                startLoopButton.textContent = \"Run Loop\";\n            });\n\n            speedSelect.addEventListener(\"change\", function () {\n                var selectedSpeed = parseFloat(this.value);\n                player.setPlaybackRate(selectedSpeed).catch(function(error) {\n                    console.error(\"Error setting playback speed:\", error);\n                });\n            });\n        }\n\n        var resizeTimer = null;\n        function handleResize() {\n            if (resizeTimer) {\n                clearTimeout(resizeTimer);\n            }\n            resizeTimer = setTimeout(function () {\n                fitPlayerToViewport();\n            }, 50);\n        }\n\n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', init);\n        } else {\n            init();\n        }\n\n        window.addEventListener('resize', handleResize);\n        window.addEventListener('orientationchange', handleResize);\n\n        if (window.visualViewport) {\n            window.visualViewport.addEventListener('resize', handleResize);\n        }\n\n    })('vlp_69d1014942a46');\n    <\/script>\n    \n    <style>\n    \/* Scope all styling under the plugin wrapper to avoid collisions *\/\n    .vloop-wrapper {\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: flex-start;\n        width: 100%;\n        margin: 0 auto;\n        padding: 0;\n        box-sizing: border-box;\n    }\n\n    .vloop-wrapper .vloop-container {\n        position: relative;\n        width: 100%;\n        margin: 0 auto;\n        overflow: hidden;\n        box-sizing: content-box;\n    }\n\n    .vloop-wrapper iframe {\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n        border: 0;\n        display: block;\n    }\n\n    \/* 2px black border that does NOT reduce interior video area *\/\n    .vloop-wrapper .vloop-container::after {\n        content: \"\";\n        position: absolute;\n        top: 0; left: 0; right: 0; bottom: 0;\n        border: 2px solid #000;\n        pointer-events: none;\n    }\n\n    .vloop-wrapper .loop-controls {\n        width: 100%;\n        margin-top: 8px;\n        display: flex;\n        justify-content: center;\n    }\n\n    .vloop-wrapper .loop-row {\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        gap: 10px;\n        flex-wrap: wrap;\n        width: 100%;\n    }\n\n    .vloop-wrapper .loop-btn,\n    .vloop-wrapper .speed-dropdown {\n        padding: 8px 12px !important;\n        border-radius: 5px !important;\n        border: none !important;\n        font-size: 14px !important;\n        cursor: pointer !important;\n    }\n\n    .vloop-wrapper .setA,\n    .vloop-wrapper .setB {\n        background: #468cc5 !important;\n        color: white !important;\n    }\n\n    .vloop-wrapper .startLoop {\n        background: #76be88 !important;\n        color: white !important;\n    }\n\n    .vloop-wrapper .stopLoop {\n        background: #ca6162 !important;\n        color: white !important;\n    }\n\n    .vloop-wrapper .loop-dingbat {\n        color: #468cc5 !important;\n        font-size: 18px !important;\n    }\n\n    .vloop-wrapper .speed-dropdown {\n        background-color: #f3ce72 !important;\n        color: black !important;\n    }\n\n    .vloop-wrapper .speed-dropdown option {\n        background-color: white !important;\n        color: black !important;\n    }\n\n    .vloop-wrapper .loop-time {\n        background-color: #e0e0e0 !important;\n        padding: 4px 8px !important;\n        border-radius: 4px !important;\n        display: inline-block !important;\n    }\n\n    @media (max-width: 640px) {\n        .vloop-wrapper .loop-row {\n            gap: 8px;\n        }\n\n        .vloop-wrapper .loop-btn,\n        .vloop-wrapper .speed-dropdown {\n            font-size: 13px !important;\n            padding: 7px 10px !important;\n        }\n    }\n    <\/style>\n\n    <\/div>\n\n<ul>\n<li>&#8220;<strong>Dreams<\/strong>&#8221; -Fleetwood Mac<\/li>\n<li>4:36 <strong>House At Pooh Corner<\/strong> -Kenny Loggins (sung by me)<\/li>\n<li>7:00 &#8220;<strong>Girl Crush<\/strong>&#8221; -Little Big Town (Keisha)<\/li>\n<li>10:32 &#8220;<strong>Operator<\/strong>&#8221; -Jim Croce (Me)<\/li>\n<li>14:40 &#8220;<strong>If I Ain&#8217;t Got You<\/strong>&#8221; -Alicia Keys (Keisha)<\/li>\n<li>19:04 &#8220;<strong>Tiny Dancer<\/strong>&#8221; -Elton John (Tim)<\/li>\n<li>25:30 &#8220;<strong>Crazy<\/strong>&#8221; -Patsy Cline (Keisha)<\/li>\n<li>28:40 -My dog makes an appearance because it was &#8220;National Puppy Day&#8221; that day \ud83d\ude42<\/li>\n<li>30:10 &#8220;<strong>With A Little Help From My Friends<\/strong>&#8221; -Joe Cocker version (Duet)<\/li>\n<\/ul>\n<p>On a side note, Keisha has some very serious health issues and doesn&#8217;t know how long she&#8217;ll be able to continue singing and performing; We&#8217;re friends but have never played together, which is why we wanted to do this now. \ud83d\ude42 Hope you enjoyed it. She sounds amazing on Alicia Keys&#8217; &#8220;If I Ain&#8217;t Got You&#8221;, and &#8220;With A Little Help From My Friends&#8221; was a heck of a lot of fun. \ud83d\ude42<\/p>\n<div align=\"center\"><center><a title=\"Home\" href=\"https:\/\/www.pianogenius.com\/members\/training\/module65\/\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentColor;\" src=\"https:\/\/www.pianogenius.com\/members\/wp-content\/uploads\/icon_home.png\" alt=\"Home\" width=\"68\" height=\"72\" \/><\/a><a title=\"Next\" href=\"https:\/\/www.pianogenius.com\/members\/training\/module65\/\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentColor;\" src=\"https:\/\/www.pianogenius.com\/members\/wp-content\/uploads\/icon_next.png\" alt=\"Next\" width=\"78\" height=\"72\" \/><\/a><\/center><\/div>\n","protected":false},"excerpt":{"rendered":"<p>To see the full listing of what&#8217;s in this Module\u00a0click here for an overview. I just did a live &#8220;Facebook Live&#8221; show with my friend Keisha D. You can still watch the live show if you missed it, and this Module goes through how I rehearsed and learned the new songs I&#8217;m going to play &hellip; <a href=\"https:\/\/www.pianogenius.com\/members\/training\/module65\/65-show\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Keisha D. &#038; Tim Gross Show<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":10001,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-10039","page","type-page","status-publish","hentry","wpautop"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.pianogenius.com\/members\/wp-json\/wp\/v2\/pages\/10039","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pianogenius.com\/members\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.pianogenius.com\/members\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.pianogenius.com\/members\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pianogenius.com\/members\/wp-json\/wp\/v2\/comments?post=10039"}],"version-history":[{"count":12,"href":"https:\/\/www.pianogenius.com\/members\/wp-json\/wp\/v2\/pages\/10039\/revisions"}],"predecessor-version":[{"id":13121,"href":"https:\/\/www.pianogenius.com\/members\/wp-json\/wp\/v2\/pages\/10039\/revisions\/13121"}],"up":[{"embeddable":true,"href":"https:\/\/www.pianogenius.com\/members\/wp-json\/wp\/v2\/pages\/10001"}],"wp:attachment":[{"href":"https:\/\/www.pianogenius.com\/members\/wp-json\/wp\/v2\/media?parent=10039"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}