Join Kooper in the Sydney Penthouse as he spins the very best classic and neo lounge along with the most interesting characters of swank join him for a chat on this weekend podcast.During the week Koop posts his music only Cocktail Nation Evenings at the Penthouse show where you can enjoy cocktail jazz at the end of your day.
The Make Believe Ballroom carries on the traditions of past hosts Martin Block, Al Jarvis, William B Williams, and Steve Allen by bringing you the greatest hits of the 1930s and 1940s. With the exception of brief periods, the program has been broadcast almost continuously since then. Now, Jeff Bressler is the current host of The Make Believe Ballroom and is on Racketeer Radio KFQX each Wednesday evening beginning at 4PM PST. No cover, no minimum, just sit back and enjoy.
Deforest:Hello, Welcome to Racketeer Radio KFQX, Im Deforest. I got your backstage pass to all things punk rock rhythm and blues. Ask me about upcoming shows of your favorite artists or your city.
}
// --- NEW: Audio Player Logic ---
let currentAudio = null;
function playAudioFromBase64(base64String) {
if (currentAudio) {
currentAudio.pause();
}
const audioData = `data:audio/mpeg;base64,${base64String}`;
currentAudio = new Audio(audioData);
currentAudio.play().catch(e => console.error("Audio play failed:", e));
}
function toggleRacketeerChat() {
const chatIsHidden = rrChatPopup.style.display === 'none';
rrChatPopup.style.display = chatIsHidden ? 'flex' : 'none';
if (!chatIsHidden && currentAudio) {
currentAudio.pause(); // Stop audio when closing chat
}
}
async function sendRacketeerMessage() {
const query = rrUserInput.value.trim();
if (!query) return;
addRacketeerMessage('You', query);
rrUserInput.value = '';
try {
const response = await fetch(RR_API_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ query: query, sessionId: userSessionId }),
});
if (!response.ok) throw new Error('Network error');
const data = await response.json();
// Add the text to the screen
addRacketeerMessage('Deforest', data.response);
// If we received audio data, play it
if (data.audioBase64) {
playAudioFromBase64(data.audioBase64);
}
} catch (error) {
console.error('Error:', error);
addRacketeerMessage('Deforest', 'Sorry, I seem to be having trouble connecting.');
}
}
function addRacketeerMessage(sender, text) {
const messageElement = document.createElement('p');
messageElement.innerHTML = `${sender}: `;
messageElement.appendChild(document.createTextNode(text));
rrChatWindow.appendChild(messageElement);
rrChatWindow.scrollTop = rrChatWindow.scrollHeight;
}
// Voice input logic is the same, but we remove the old speakText function
// ... (add the SpeechRecognition code here, but delete the old speakText function) ...