diff --git a/CHANGES.rst b/CHANGES.rst
index 80530fbcda..644e475819 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -17,6 +17,8 @@ New Features
Cubeviz
^^^^^^^
+- Enhancements for the cube sonification plugin. [#3387]
+
Imviz
^^^^^
diff --git a/jdaviz/configs/cubeviz/plugins/sonify_data/sonify_data.py b/jdaviz/configs/cubeviz/plugins/sonify_data/sonify_data.py
index 2c14c1479b..c212b1d25f 100644
--- a/jdaviz/configs/cubeviz/plugins/sonify_data/sonify_data.py
+++ b/jdaviz/configs/cubeviz/plugins/sonify_data/sonify_data.py
@@ -66,10 +66,8 @@ def __init__(self, *args, **kwargs):
' works on devices with valid sound output.')
else:
- devices, indexes = self.build_device_lists()
- self.sound_device_indexes = dict(zip(devices, indexes))
- self.sound_devices_items = devices
- self.sound_devices_selected = dict(zip(indexes, devices))[sd.default.device[1]]
+ self.sound_device_indexes = None
+ self.refresh_device_list()
# TODO: Remove hardcoded range and flux viewer
self.spec_viewer = self.app.get_viewer('spectrum-viewer')
@@ -118,6 +116,15 @@ def update_sound_device(self, event):
didx = dict(zip(*self.build_device_lists()))[event['new']]
self.flux_viewer.update_sound_device(didx)
+ def refresh_device_list(self):
+ devices, indexes = self.build_device_lists()
+ self.sound_device_indexes = dict(zip(devices, indexes))
+ self.sound_devices_items = devices
+ self.sound_devices_selected = dict(zip(indexes, devices))[sd.default.device[1]]
+
+ def vue_refresh_device_list_in_dropdown(self, *args):
+ self.refresh_device_list()
+
def build_device_lists(self):
# dedicated function to build the current *output*
# device and index lists
diff --git a/jdaviz/configs/cubeviz/plugins/sonify_data/sonify_data.vue b/jdaviz/configs/cubeviz/plugins/sonify_data/sonify_data.vue
index 6443eedde0..7e08733c3e 100644
--- a/jdaviz/configs/cubeviz/plugins/sonify_data/sonify_data.vue
+++ b/jdaviz/configs/cubeviz/plugins/sonify_data/sonify_data.vue
@@ -132,6 +132,11 @@
>
Stop stream
+
+ Refresh Device List
+