Adjust the volume of each audio track (yours and others) in the Session Mix to get the mix where you want it (i.e. where it sounds good and well balanced to you). Any volume changes you make will affect only what you hear. They don’t affect the volume of what others hear in the session. Everyone has their own customizable session mix.
Note that your session mix is the mix that will be used for any recordings you make and for any broadcasts you stream. If another musician in your session makes a recording or streams a broadcast, it will use that musician’s session mix, not yours.
@@ -1664,7 +1680,7 @@ const JKSessionScreen = () => {
currentUser={backingTrackData.currentUser}
isPopup={true}
onClose={() => {
- console.log('JKSessionScreen: JKSessionBackingTrackPlayer onClose called');
+ // console.log('JKSessionScreen: JKSessionBackingTrackPlayer onClose called');
dispatch(closeModal('backingTrack'));
dispatch(clearBackingTrackData());
}}
@@ -1720,12 +1736,12 @@ const JKSessionScreen = () => {
{/* Media Controls Popup - Only show when explicitly opened */}
{showMediaControlsPopup && !popupGuard && (() => {
- console.log('JKSessionScreen: RENDERING Media Controls Popup - showMediaControlsPopup:', showMediaControlsPopup, 'popupGuard:', popupGuard);
+ // console.log('JKSessionScreen: RENDERING Media Controls Popup - showMediaControlsPopup:', showMediaControlsPopup, 'popupGuard:', popupGuard);
setPopupGuard(true); // Set guard immediately to prevent re-renders
return (
{
- console.log('JKSessionScreen: Media Controls Popup closing');
+ // console.log('JKSessionScreen: Media Controls Popup closing');
dispatch(closeModal('mediaControls'));
setMediaControlsOpened(false);
setPopupGuard(false); // Reset guard when closing
@@ -1735,7 +1751,7 @@ const JKSessionScreen = () => {
windowId="media-controls"
>
{
- console.log('JKSessionScreen: JKPopupMediaControls onClose called');
+ // console.log('JKSessionScreen: JKPopupMediaControls onClose called');
dispatch(closeModal('mediaControls'));
setMediaControlsOpened(false);
setPopupGuard(false); // Reset guard when closing
diff --git a/jam-ui/src/components/common/WindowPortal.js b/jam-ui/src/components/common/WindowPortal.js
index dc113ba73..8ed02f2b6 100644
--- a/jam-ui/src/components/common/WindowPortal.js
+++ b/jam-ui/src/components/common/WindowPortal.js
@@ -68,21 +68,6 @@ const WindowPortal = ({
newWindow.document.body.style.backgroundColor = '#f8f9fa';
newWindow.document.body.style.overflow = 'hidden';
- // Copy all stylesheets from parent window to popup
- const stylesheets = Array.from(document.querySelectorAll('link[rel="stylesheet"], style'));
- stylesheets.forEach(sheet => {
- if (sheet.tagName === 'LINK') {
- const newLink = newWindow.document.createElement('link');
- newLink.rel = 'stylesheet';
- newLink.href = sheet.href;
- newWindow.document.head.appendChild(newLink);
- } else if (sheet.tagName === 'STYLE') {
- const newStyle = newWindow.document.createElement('style');
- newStyle.textContent = sheet.textContent;
- newWindow.document.head.appendChild(newStyle);
- }
- });
-
// Add window ID for identification
if (windowId) {
newWindow.windowId = windowId;
diff --git a/jam-ui/src/helpers/utils.js b/jam-ui/src/helpers/utils.js
index 2c529f372..79fef2b68 100644
--- a/jam-ui/src/helpers/utils.js
+++ b/jam-ui/src/helpers/utils.js
@@ -64,6 +64,36 @@ import viola45 from '../assets/img/instruments/icon_instrument_viola45.png';
import violin45 from '../assets/img/instruments/icon_instrument_violin45.png';
import voice45 from '../assets/img/instruments/icon_instrument_voice45.png';
+import accordion45_inverted from '../assets/img/instruments/icon_instrument_accordion45_inverted.svg';
+import acoustic_guitar45_inverted from '../assets/img/instruments/icon_instrument_acoustic_guitar45_inverted.svg';
+import banjo45_inverted from '../assets/img/instruments/icon_instrument_banjo45_inverted.svg';
+import bass_guitar45_inverted from '../assets/img/instruments/icon_instrument_bass_guitar45_inverted.svg';
+import cello45_inverted from '../assets/img/instruments/icon_instrument_cello45_inverted.svg';
+import clarinet45_inverted from '../assets/img/instruments/icon_instrument_clarinet45_inverted.svg';
+import computer45_inverted from '../assets/img/instruments/icon_instrument_computer45_inverted.svg';
+import default45_inverted from '../assets/img/instruments/icon_instrument_default45_inverted.svg';
+import drums45_inverted from '../assets/img/instruments/icon_instrument_drums45_inverted.svg';
+import electric_guitar45_inverted from '../assets/img/instruments/icon_instrument_electric_guitar45_inverted.svg';
+import euphonium45_inverted from '../assets/img/instruments/icon_instrument_euphonium45_inverted.svg';
+import flute45_inverted from '../assets/img/instruments/icon_instrument_flute45_inverted.svg';
+import french_horn45_inverted from '../assets/img/instruments/icon_instrument_french_horn45_inverted.svg';
+import harmonica45_inverted from '../assets/img/instruments/icon_instrument_harmonica45_inverted.svg';
+import keyboard45_inverted from '../assets/img/instruments/icon_instrument_keyboard45_inverted.svg';
+import mandolin45_inverted from '../assets/img/instruments/icon_instrument_mandolin45_inverted.svg';
+import oboe45_inverted from '../assets/img/instruments/icon_instrument_oboe45_inverted.svg';
+import other45_inverted from '../assets/img/instruments/icon_instrument_other45_inverted.svg';
+import piano45_inverted from '../assets/img/instruments/icon_instrument_piano45_inverted.svg';
+import saxophone45_inverted from '../assets/img/instruments/icon_instrument_saxophone45_inverted.svg';
+import trombone45_inverted from '../assets/img/instruments/icon_instrument_trombone45_inverted.svg';
+import trumpet45_inverted from '../assets/img/instruments/icon_instrument_trumpet45_inverted.svg';
+import tuba45_inverted from '../assets/img/instruments/icon_instrument_tuba45_inverted.svg';
+import ukulele45_inverted from '../assets/img/instruments/icon_instrument_ukelele45_inverted.svg';
+import upright_bass45_inverted from '../assets/img/instruments/icon_instrument_upright_bass45_inverted.svg';
+import double_bass45_inverted from '../assets/img/instruments/icon_instrument_double_bass45_inverted.svg';
+import viola45_inverted from '../assets/img/instruments/icon_instrument_viola45_inverted.svg';
+import violin45_inverted from '../assets/img/instruments/icon_instrument_violin45_inverted.svg';
+import voice45_inverted from '../assets/img/instruments/icon_instrument_voice45_inverted.svg';
+
import accordion256 from '../assets/img/instruments/icon_instrument_accordion256.png';
import acoustic_guitar256 from '../assets/img/instruments/icon_instrument_acoustic_guitar256.png';
import banjo256 from '../assets/img/instruments/icon_instrument_banjo256.png';
@@ -95,6 +125,9 @@ import violin256 from '../assets/img/instruments/icon_instrument_violin256.png';
import voice256 from '../assets/img/instruments/icon_instrument_voice256.png';
+
+
+
export const isIterableArray = array => Array.isArray(array) && !!array.length;
//===============================
@@ -737,6 +770,39 @@ const instrumentIconMap45 = {
"voice": { asset: voice45, name: "voice" }
};
+const instrumentIconMap45_inverted = {
+ "accordion": { asset: accordion45_inverted, name: "accordion" },
+ "acoustic guitar": { asset: acoustic_guitar45_inverted, name: "acoustic guitar" },
+ "banjo": { asset: banjo45_inverted, name: "banjo" },
+ "bass guitar": { asset: bass_guitar45_inverted, name: "bass guitar" },
+ "cello": { asset: cello45_inverted, name: "cello" },
+ "clarinet": { asset: clarinet45_inverted, name: "clarinet" },
+ "computer": { asset: computer45_inverted, name: "computer" },
+ "_default": { asset: default45_inverted, name: "_default" },
+ "drums": { asset: drums45_inverted, name: "drums" },
+ "percussion": { asset: drums45_inverted, name: "percussion" },
+ "electric guitar": { asset: electric_guitar45_inverted, name: "electric guitar" },
+ "euphonium": { asset: euphonium45_inverted, name: "euphonium" },
+ "flute": { asset: flute45_inverted, name: "flute" },
+ "french horn": { asset: french_horn45_inverted, name: "french horn" },
+ "harmonica": { asset: harmonica45_inverted, name: "harmonica" },
+ "keyboard": { asset: keyboard45_inverted, name: "keyboard" },
+ "mandolin": { asset: mandolin45_inverted, name: "mandolin" },
+ "oboe": { asset: oboe45_inverted, name: "oboe" },
+ "other": { asset: other45_inverted, name: "other" },
+ "piano": { asset: piano45_inverted, name: "piano" },
+ "saxophone": { asset: saxophone45_inverted, name: "saxophone" },
+ "trombone": { asset: trombone45_inverted, name: "trombone" },
+ "trumpet": { asset: trumpet45_inverted, name: "trumpet" },
+ "tuba": { asset: tuba45_inverted, name: "tuba" },
+ "ukulele": { asset: ukulele45_inverted, name: "ukulele" },
+ "upright bass": { asset: upright_bass45_inverted, name: "upright bass" },
+ "double bass": { asset: double_bass45_inverted, name: "double bass" },
+ "viola": { asset: viola45_inverted, name: "viola" },
+ "violin": { asset: violin45_inverted, name: "violin" },
+ "voice": { asset: voice45_inverted, name: "voice" }
+};
+
const instrumentIconMap256 = {
"accordion": { asset: accordion256, name: "accordion" },
"acoustic guitar": { asset: acoustic_guitar256, name: "acoustic guitar" },
@@ -780,6 +846,10 @@ export const getInstrumentIconMap45 = () => {
return instrumentIconMap45;
};
+export const getInstrumentIconMap45_inverted = () => {
+ return instrumentIconMap45_inverted;
+};
+
export const getInstrumentIconMap256 = () => {
return instrumentIconMap256;
};
@@ -798,6 +868,13 @@ export const getInstrumentIcon45 = (instrument) => {
return instrumentIconMap45["_default"].asset;
};
+export const getInstrumentIcon45_inverted = (instrument) => {
+ if (instrument in instrumentIconMap45_inverted) {
+ return instrumentIconMap45_inverted[instrument].asset;
+ }
+ return instrumentIconMap45_inverted["_default"].asset;
+};
+
export const getInstrumentName = (instrument) => {
if (instrument in instrumentIconMap45) {
return instrumentIconMap45[instrument].name;
diff --git a/jam-ui/src/hooks/useVuHelpers.js b/jam-ui/src/hooks/useVuHelpers.js
index 8c2445973..a021bba47 100644
--- a/jam-ui/src/hooks/useVuHelpers.js
+++ b/jam-ui/src/hooks/useVuHelpers.js
@@ -140,18 +140,18 @@ export default function useVuHelpers() {
const lightThreshold = (lightCount - i) / lightCount;
const isOn = level >= lightThreshold;
- let bgClass = 'bg-secondary'; // Default off state
+ let bgClass = 'vu-bg-secondary'; // Default off state
if (isOn) {
if (clipping) {
- bgClass = 'bg-danger'; // Red for clipping
+ bgClass = 'vu-bg-danger'; // Red for clipping
} else {
const positionFromBottom = lightCount - 1 - i;
if (positionFromBottom >= Math.floor(lightCount * 0.75)) { // Red zone (top 25%)
- bgClass = 'bg-danger';
+ bgClass = 'vu-bg-danger';
} else if (positionFromBottom >= Math.floor(lightCount * 0.5)) { // Yellow zone (middle 25%)
- bgClass = 'bg-warning';
+ bgClass = 'vu-bg-warning';
} else { // Green zone (bottom 50%)
- bgClass = 'bg-success';
+ bgClass = 'vu-bg-success';
}
}
}
@@ -162,9 +162,10 @@ export default function useVuHelpers() {
className={bgClass}
style={{
height: `${lightHeight}px`,
- width: `${lightWidth}px`,
+ width: `25px`,
marginTop: '1px',
- borderRadius: '2px'
+ borderRadius: '2px',
+ border: '1px solid #eee'
}}
/>
);
diff --git a/web/app/views/api_music_sessions/show.rabl b/web/app/views/api_music_sessions/show.rabl
index 9f779394c..54dd04b74 100644
--- a/web/app/views/api_music_sessions/show.rabl
+++ b/web/app/views/api_music_sessions/show.rabl
@@ -63,7 +63,7 @@ else
attributes :ip_address, :client_id, :joined_session_at, :audio_latency, :id, :metronome_open, :is_jamblaster, :client_role, :parent_client_id, :client_id_int
node :user do |connection|
- { :id => connection.user.id, :photo_url => connection.user.photo_url, :name => connection.user.name, :is_friend => connection.user.friends?(current_user), :connection_state => connection.aasm_state, :subscription => connection.user.subscription_plan_code }
+ { :id => connection.user.id, :photo_url => connection.user.photo_url, :v2_photo_url => connection.user.v2_photo_url, :name => connection.user.name, :is_friend => connection.user.friends?(current_user), :connection_state => connection.aasm_state, :subscription => connection.user.subscription_plan_code }
end
child(:tracks => :tracks) {