1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta name="description" content="Internet DJ Console (IDJC) is a Shoutcast/Icecast internet radio client incorporating features for live radio show production." />
<meta name="keywords" xml:lang="en" content="idjc dj shoutcast icecast radio linux gtk live recorded voip irc" />
<link rel="shortcut icon" href="favicon.png" type="application/png" />
<link rel="stylesheet" href="style.css" type="text/css" />
<!--[if lte IE 7]><link rel="stylesheet" href="style_ie.css" type="text/css" /><![endif]-->
<title>Internet DJ Console Homepage</title>
<script type="text/javascript">
// Change the title text and highlight a navigation bar option.
function ui(title, menu) {
document.getElementById('title').innerHTML = title;
s = document.getElementById(menu).style;
s.color = "#F70";
s.fontWeight = "bold";
s.textDecoration = "underline";
}
</script>
</head>
<body>
<!-- Hidden h1 title for search engine seeding -->
<h1 class="unshown">Internet DJ Console Homepage IDJC</h1>
<table id="main-table">
<tr><td>
<table>
<tr id="logo-holder">
<td>
<img src="site-logo.png" width="148" height="212" alt="website logo" title="Internet DJ Console homepage"/>
</td>
</tr>
<tr>
<td id="left-sidebar">
<h3>Contents</h3>
<ul id="sidebar-menu">
<li><a href="index.html" id="front-page-nav">Front page</a></li>
<li><a href="tour.html" id="tour-nav">Tour</a></li>
<li>
<ul>
<li><a href="tour_main.html" id="tour-main-nav">Main window</a></li>
<li><a href="tour_miniplayers.html" id="tour-miniplayers-nav">Mini Players</a></li>
<li><a href="tour_output.html" id="tour-output-nav">Output</a></li>
<li><a href="tour_preferences.html" id="tour-preferences-nav">Preferences</a></li>
</ul>
</li>
<li><a href="install.html" id="install-nav">Installation</a></li>
<li>
<ul>
<li><a href="install_standard.html" id="install-standard-nav">Standard</a></li>
<li><a href="install_build.html" id="install-build-nav">Building</a></li>
<li><a href="install_first_run.html" id="install-first-run-nav">First run</a></li>
</ul>
</li>
<li><a href="tutorials.html" id="tutorials-nav">Tutorials</a></li>
<li>
<ul>
<li><a href="tutorials_icecast.html" id="tutorials-icecast-nav">Icecast</a></li>
<li><a href="tutorials_shoutcast.html" id="tutorials-shoutcast-nav">Shoutcast</a></li>
<li><a href="tutorials_voip.html" id="tutorials-voip-nav">VoIP</a></li>
<li><a href="tutorials_jack_ports_demystified.html" id="tutorials-jackportsdemyst-nav">JACK Ports</a></li>
<li><a href="tutorials_secrets.html" id="tutorials-secrets-nav">Secrets</a></li>
</ul>
</li>
<li><a href="code.html" id="code-nav">Extra code</a></li>
<li>
<ul>
<li><a href="code_idjcmon.html" id="code-idjcmon-nav">idjcmon.py</a></li>
</ul>
</li>
<li><a href="contact.html" id="contact-nav">Contact</a></li>
</ul>
</td>
</tr>
</table>
</td>
<td>
<table id="right-table">
<tr>
<td id="top-titlebar">
<h2 id="title"></h2>
</td>
</tr>
<tr>
<td>
<script type="text/javascript">
ui('Extra code: An IDJC monitoring class', 'code-idjcmon-nav')
</script>
<p>With a little work this could be made to interface with your station's web page or with cloud services.</p>
<pre>#! /usr/bin/env python3
"""idjcmon.py demo code
This could be extended to add features to IDJC without modifying the
main source code.
Takes the profile you wish to monitor as the command line parameter.
"""
import sys
import gi
gi.require_version("GLib", "2.0")
from gi.repository import GLib
import idjcmonitor
def launch_handler(monitor, profile, pid):
print(f"Hello to IDJC {profile} with process ID {pid}.")
def quit_handler(monitor, profile, pid):
print(f"Goodbye to IDJC {profile} with process ID {pid}.")
def streamstate_handler(monitor, which, state, where):
print(f"Stream {which} is {('down', 'up')[state]} "
f"on connection {where}.")
def metadata_handler(monitor, artist, title, album, songname, filename):
print(f"Metadata is: {artist=}, {title=}, {album=}, {filename=}")
def frozen_handler(monitor, profile, pid, frozen):
print(f"IDJC {profile} with process ID {pid} is "
f"{('running', 'stopped or frozen ')[frozen]}")
def effect_started_handler(monitor, title, pathname, player):
print(f"Effect player {player} is playing {title}")
def effect_stopped_handler(monitor, player):
print(f"Effect player {player} has stopped")
def focus_changed_handler(monitor, window_name, has_focus):
print(f"Window '{window_name}' {('lost', 'gained')[has_focus]} keyboard focus")
entry_mode_handler(monitor, monitor.get_property("entry-mode"))
def entry_mode_handler(monitor, entry_mode):
hotkey_window = monitor.get_property("focus-window") is not None
hotkeys_available = hotkey_window and not entry_mode
print(f"{entry_mode=}")
print(f"{hotkeys_available=}")
def stream_silence_handler(monitor, stream_silence):
print(f"{stream_silence=}")
try:
profile = sys.argv[1]
except IndexError:
profile = "default"
monitor = idjcmonitor.IDJCMonitor(profile)
monitor.connect("launch", launch_handler)
monitor.connect("quit", quit_handler)
monitor.connect("streamstate-changed", streamstate_handler)
monitor.connect("metadata-changed", metadata_handler)
monitor.connect("frozen", frozen_handler)
monitor.connect("effect-started", effect_started_handler)
monitor.connect("effect-stopped", effect_stopped_handler)
monitor.connect("focus-changed", focus_changed_handler)
monitor.connect("entry-mode-changed", entry_mode_handler)
monitor.connect("stream-silence-changed", stream_silence_handler)
try:
GLib.MainLoop().run()
except KeyboardInterrupt:
print("Goodbye from idjcmon")
</pre>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
|