Skip to content

Commit ba867e8

Browse files
authored
split bus TTS readouts (#979)
1 parent b0bcf9e commit ba867e8

File tree

4 files changed

+56
-37
lines changed

4 files changed

+56
-37
lines changed

lib/content/audio.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ defprotocol Content.Audio do
1515

1616
@type language :: :english | :spanish
1717
@type value :: canned_message() | ad_hoc_message() | nil
18+
@type audio_item :: String.t() | {:spanish, String.t()} | {:url, String.t()}
1819
@type tts_value ::
19-
{audio :: String.t() | {:spanish, String.t()} | {:url, String.t()},
20-
visual :: Content.Message.pages() | nil}
20+
{audio :: audio_item() | [audio_item()], visual :: Content.Message.pages() | nil}
2121

2222
@doc "Converts an audio struct to the mid/vars params for the PA system"
2323
@spec to_params(Content.Audio.t()) :: value()

lib/pa_ess/updater.ex

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@ defmodule PaEss.Updater do
8585
{:spanish, text} ->
8686
[audio: inspect(text)]
8787

88+
list when is_list(list) ->
89+
[audio: Enum.join(list, " ") |> inspect()]
90+
8891
text ->
8992
[audio: inspect(text)]
9093
end ++
@@ -99,21 +102,24 @@ defmodule PaEss.Updater do
99102

100103
if scu_migrated? do
101104
Task.Supervisor.start_child(PaEss.TaskSupervisor, fn ->
102-
files =
103-
Enum.map(tts_audios, fn {tts_audio, _} ->
104-
Task.async(fn -> fetch_audio_file(tts_audio) end)
105+
async_map = fn list, fun ->
106+
Task.async_stream(list, fun) |> Enum.map(fn {:ok, value} -> value end)
107+
end
108+
109+
file_lists =
110+
async_map.(tts_audios, fn {tts_audio, _} ->
111+
List.wrap(tts_audio) |> async_map.(&fetch_audio_file/1)
105112
end)
106-
|> Task.await_many()
107113

108-
Enum.zip([files, tts_audios, tags, log_metas])
109-
|> Enum.each(fn {file, {_, pages}, tag, log_meta} ->
114+
Enum.zip([file_lists, tts_audios, tags, log_metas])
115+
|> Enum.each(fn {file_list, {_, pages}, tag, log_meta} ->
110116
PaEss.ScuQueue.enqueue_message(
111117
scu_id,
112118
{:message, scu_id,
113119
%{
114120
zones: Enum.map(audio_zones, &"#{pa_ess_loc}-#{&1}"),
115121
visual_data: format_pages(pages),
116-
audio_data: [Base.encode64(file)],
122+
audio_data: Enum.map(file_list, &Base.encode64(&1)),
117123
expiration: 30,
118124
priority: priority,
119125
tag: tag

lib/signs/bus.ex

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -430,10 +430,7 @@ defmodule Signs.Bus do
430430
[long_message_tts_audio(single, current_time)]
431431

432432
list ->
433-
Enum.map(list, &message_tts_audio(&1, current_time))
434-
|> Enum.join(" ")
435-
|> add_tts_preamble()
436-
|> List.wrap()
433+
[Enum.map(list, &message_tts_audio(&1, current_time)) |> add_tts_preamble()]
437434
end
438435
|> Enum.map(&{&1, nil})
439436
|> Enum.concat(bridge_tts_audio(bridge_status, bridge_enabled?, current_time, state))
@@ -523,12 +520,8 @@ defmodule Signs.Bus do
523520
[] ->
524521
[]
525522

526-
content ->
527-
content
528-
|> Enum.map(&message_tts_audio(&1, current_time))
529-
|> Enum.join(" ")
530-
|> add_tts_preamble()
531-
|> List.wrap()
523+
list ->
524+
[Enum.map(list, &message_tts_audio(&1, current_time)) |> add_tts_preamble()]
532525
end
533526
|> Enum.map(&{&1, nil})
534527
|> Enum.concat(bridge_tts_audio(bridge_status, bridge_enabled?, current_time, state))
@@ -986,7 +979,8 @@ defmodule Signs.Bus do
986979
defp add_preamble([]), do: []
987980
defp add_preamble(items), do: [[:upcoming_departures] | items]
988981

989-
defp add_tts_preamble(str), do: "Upcoming departures: " <> str
982+
defp add_tts_preamble([]), do: []
983+
defp add_tts_preamble(items), do: ["Upcoming departures:" | items]
990984

991985
# Returns a list of audio tokens describing the given message.
992986
defp message_audio({:predictions, [prediction | _]}, current_time) do
@@ -1159,7 +1153,6 @@ defmodule Signs.Bus do
11591153

11601154
"The #{next_or_following} #{route}bus to #{prediction.headsign} #{time}."
11611155
end)
1162-
|> Enum.join(" ")
11631156
end
11641157

11651158
defp long_message_tts_audio({:alert, config}, _) do
@@ -1210,7 +1203,7 @@ defmodule Signs.Bus do
12101203
end
12111204

12121205
# Fix for signs not accepting `-` as a value
1213-
# For Silver Line headways on short signs, we will show
1206+
# For Silver Line headways on short signs, we will show
12141207
# `Outbound Every`, `Outbound 10 to 12m`
12151208
def headway_message(
12161209
%Message.Headway{destination: :silver_line, range: range, route: "Silver"},

test/signs/bus_test.exs

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,10 @@ defmodule Signs.BusTest do
175175
], :audio}}
176176
],
177177
[
178-
{"The next route 14 bus to Wakefield Ave arrives in 2 minutes. The following route 14 bus to Wakefield Ave arrives in 11 minutes.",
179-
nil}
178+
{[
179+
"The next route 14 bus to Wakefield Ave arrives in 2 minutes.",
180+
"The following route 14 bus to Wakefield Ave arrives in 11 minutes."
181+
], nil}
180182
]
181183
)
182184

@@ -217,8 +219,12 @@ defmodule Signs.BusTest do
217219
], :audio}}
218220
],
219221
[
220-
{"Upcoming departures: Route 14, Wakefield Ave, 2 minutes. Chelsea, 4 minutes. Route 34, Clarendon Hill, 7 minutes.",
221-
nil}
222+
{[
223+
"Upcoming departures:",
224+
"Route 14, Wakefield Ave, 2 minutes.",
225+
"Chelsea, 4 minutes.",
226+
"Route 34, Clarendon Hill, 7 minutes."
227+
], nil}
222228
]
223229
)
224230

@@ -245,8 +251,11 @@ defmodule Signs.BusTest do
245251
:audio}}
246252
],
247253
[
248-
{"Upcoming departures: Route SL5, Nubian, 8 minutes. Route 14, Wakefield Ave, 2 minutes.",
249-
nil}
254+
{[
255+
"Upcoming departures:",
256+
"Route SL5, Nubian, 8 minutes.",
257+
"Route 14, Wakefield Ave, 2 minutes."
258+
], nil}
250259
]
251260
)
252261

@@ -324,7 +333,7 @@ defmodule Signs.BusTest do
324333
{"112", ["548", "21012", "931", "33004", "932", "666", "5011", "511", "5013", "505"],
325334
:audio}
326335
],
327-
[{"Upcoming departures: Silver Line Outbound buses every 11 to 13 minutes.", nil}]
336+
[{["Upcoming departures:", "Silver Line Outbound buses every 11 to 13 minutes."], nil}]
328337
)
329338

330339
state =
@@ -377,8 +386,11 @@ defmodule Signs.BusTest do
377386
], :audio}
378387
],
379388
[
380-
{"Upcoming departures: Chelsea buses every 11 to 13 minutes. Route 14, Wakefield Ave, 2 minutes.",
381-
nil}
389+
{[
390+
"Upcoming departures:",
391+
"Chelsea buses every 11 to 13 minutes.",
392+
"Route 14, Wakefield Ave, 2 minutes."
393+
], nil}
382394
]
383395
)
384396

@@ -426,8 +438,11 @@ defmodule Signs.BusTest do
426438
], :audio}
427439
],
428440
[
429-
{"Upcoming departures: South Station, 5 minutes. Silver Line Outbound buses every 11 to 13 minutes.",
430-
nil}
441+
{[
442+
"Upcoming departures:",
443+
"South Station, 5 minutes.",
444+
"Silver Line Outbound buses every 11 to 13 minutes."
445+
], nil}
431446
]
432447
)
433448

@@ -490,8 +505,10 @@ defmodule Signs.BusTest do
490505
{:canned, {"152", ["37004"], :audio_visual}}
491506
],
492507
[
493-
{"The next route 14 bus to Wakefield Ave arrives in 2 minutes. The following route 14 bus to Wakefield Ave arrives in 11 minutes.",
494-
nil},
508+
{[
509+
"The next route 14 bus to Wakefield Ave arrives in 2 minutes.",
510+
"The following route 14 bus to Wakefield Ave arrives in 11 minutes."
511+
], nil},
495512
{"The Chelsea Street bridge is raised. We expect this to last for at least 4 more minutes. SL3 buses may be delayed, detoured, or turned back.",
496513
[
497514
{"The Chelsea Street", "bridge is raised. We", 3},
@@ -587,8 +604,11 @@ defmodule Signs.BusTest do
587604
:audio}}
588605
],
589606
[
590-
{"Upcoming departures: Route 14, Wakefield Ave, 2 minutes. Route 51, Reservoir Station, no service.",
591-
nil}
607+
{[
608+
"Upcoming departures:",
609+
"Route 14, Wakefield Ave, 2 minutes.",
610+
"Route 51, Reservoir Station, no service."
611+
], nil}
592612
]
593613
)
594614

0 commit comments

Comments
 (0)