1
0
Fork 0

Compare commits

...

10 Commits

Author SHA1 Message Date
Icedream 63fb9cbe0e
Document physical inputs and outputs for NDI+Live Mix. 2025-05-01 15:06:55 +02:00
Icedream 9646583400
Change to local AOO server. 2025-05-01 15:06:55 +02:00
Icedream bc125e805a
Change SonoBus output.
The new layout is all stereo, 3x Main, the rest are Voice.
2025-05-01 15:06:55 +02:00
Icedream 9c81a411a6
Remove send-out of mixed audio via SonoBus.
This gets rid of the Ambiguous lighting and the extra CPU load along with the
failing latency calculation.
2025-05-01 15:06:54 +02:00
Icedream 5f76d88113
Remove direct connections from SonoBos to Mix 1. 2025-05-01 15:06:54 +02:00
Icedream fec5a1c022
Add base NDI + Live Mix Ardour project file. 2025-05-01 15:06:54 +02:00
Icedream 7b4908eb15
Enable 96k mp3 output by default.
For some reason, just having the FLAC endpoint enabled causes the audio
to get into an endless stutter loop on the second metadata change (that
is the initial metadata was set already and a second change was
requested via the metadata API). Enabling an MP3 output works around
this.
2025-04-28 18:19:51 +02:00
Icedream acab30fedc
Remove workaround for savonet/liquidsoap#2996.
This issue is no longer present in liquidsoap 2.3.x and the workaround
may actually introduce more issues with metadata mapping.
2025-04-28 18:07:08 +02:00
Icedream 8c462278b0
Fix types on stream API response. 2025-04-28 14:56:04 +02:00
Icedream 0cc13cc0e3
Disable automatic streaming to SI. 2025-04-28 14:56:03 +02:00
5 changed files with 45318 additions and 13 deletions

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,19 @@
# NDI + Live Mix Ardour project
- Audio interface: Steinberg UR-44
## Physical connections
### Inputs
- Input Front 1: *unused*
- Input Front 2: RODE NT-USB *via 3.5mm* - goes to **Local Mic**
- Input Front 3: RODE NT1 5th gen *via XLR, +48V* - goes to **Local Mic**
- Input Front 4: *unused*
- Input Back 1: Denon Prime 4 L - goes to **DJ Mix**
- Input Back 2: Denon Prime 4 R - goes to **DJ Mix**
### Outputs
- Output Front Headphones 1: **Mix 1** - for previewing processed output
- Output Front Headphones 2: **Mix 2** - for previewing unprocessed output

View File

@ -5,9 +5,6 @@
metadata_api_hostname = environment.get(default="icedream-bitwave", "METADATA_API_HOSTNAME") metadata_api_hostname = environment.get(default="icedream-bitwave", "METADATA_API_HOSTNAME")
def setup_harbor_metadata_api(~metadata_api_port=21338, ~id="", s) = def setup_harbor_metadata_api(~metadata_api_port=21338, ~id="", s) =
# HACK - work around https://github.com/savonet/liquidsoap/issues/2996
id = if id != "" then id else s.id() end
s = drop_metadata(s) # stream metadata wipes out own data s = drop_metadata(s) # stream metadata wipes out own data
s = insert_metadata(s) s = insert_metadata(s)

View File

@ -101,7 +101,7 @@ setup_harbor_stream_api(internal_icecast(
setup_harbor_stream_api(internal_icecast( setup_harbor_stream_api(internal_icecast(
id="out_a_int_mp3_96", id="out_a_int_mp3_96",
mount="/outa/mp3_96", mount="/outa/mp3_96",
start=false, start=true,
format="audio/mpeg", format="audio/mpeg",
encoding="ISO-8859-1", encoding="ISO-8859-1",
%ffmpeg( %ffmpeg(
@ -192,7 +192,7 @@ if null.defined(streaminginternet_username) and null.defined(streaminginternet_p
name=null.get(stream_name), name=null.get(stream_name),
description=null.get(stream_description), description=null.get(stream_description),
password=null.get(streaminginternet_password), password=null.get(streaminginternet_password),
start=true, start=false,
%ogg(%flac), %ogg(%flac),
a, a,
)) ))

View File

@ -30,15 +30,27 @@ def setup_harbor_stream_api(s) =
], data=json.stringify([])) ], data=json.stringify([]))
end end
def normalize_float(f) =
if float.is_infinite(f) or float.is_nan(f) then
0.
else
f
end
end
def on_info(_) = def on_info(_) =
data = [ data = {
("id", s.id()), duration = normalize_float(s.duration()),
("last_metadata", json.stringify(s.last_metadata())), elapsed = normalize_float(s.elapsed()),
("is_up", json.stringify(s.is_up())), id = s.id(),
("is_started", json.stringify(s.is_started())), is_active = s.is_active(),
("is_ready", json.stringify(s.is_ready())), is_ready = s.is_ready(),
("is_active", json.stringify(s.is_active())), is_started = s.is_started(),
] is_up = s.is_up(),
last_metadata = s.last_metadata(),
remaining = normalize_float(s.remaining()),
time = normalize_float(s.time()),
}
http.response(status_code=200, headers=[ http.response(status_code=200, headers=[
("content-type","application/json"), ("content-type","application/json"),
], data=json.stringify(data)) ], data=json.stringify(data))