# Share Audio Clips Between Gateway and Clients

**URL:** <https://forum.inductiveautomation.com/t/share-audio-clips-between-gateway-and-clients/95286>\
**Category:** Ignition\
**Tags:** ignition81, vision, scripting\
**Created:** [August 28, 2024, 5:14pm UTC](https://forum.inductiveautomation.com/t/share-audio-clips-between-gateway-and-clients/95286 "2024-08-28T17:14:45Z")\
**Posts on this page:** 1\
**Showing post:** 37

<div class="post-metadata">

**Author:** ![JordanCClark](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jordancclark/32/83362_2.png) [@JordanCClark](https://forum.inductiveautomation.com/u/JordanCClark)\
**Post date:** [August 29, 2024, 10:08pm UTC](https://forum.inductiveautomation.com/t/share-audio-clips-between-gateway-and-clients/95286/37 "2024-08-29T22:08:21Z")

</div>

A proof of concept here.

- Use case in this example is one sound for an andon call (need components, call team leader, etc) and one as an alarm when a barcode doesn't match.

- Two examples given for loading wav data from URLs or from file locations. Both load into the globals as a dictionary with keys 'call' and 'scan'

- Starting a sound will use `start('call')` or `start('scan')`

- Stopping a sound will use `stop('call')` or `stop('scan')`. Using `stop()` with no parameter will stop all clips.

```python
from java.io import ByteArrayInputStream
from java.net import URL
from javax.sound.sampled import AudioSystem
from javax.sound.sampled import AudioInputStream
from javax.sound.sampled import Clip

def loadUrls():
	''' Load a set of wav urls to the global dictionary '''
	
	urlDict = {'call': 'http://192.168.140.35/music/tv/GalaxyQuest.wav',
	           'scan': 'http://192.168.140.35/music/tv/scan_alert_short.wav'
	          }
	audioDict = {}
	for key, value in urlDict.items():
		AudioClip = AudioSystem.getClip()
		audioStream = AudioSystem.getAudioInputStream(URL(value))
		AudioClip.open(audioStream)
		audioDict[key] = AudioClip
	system.util.globals['audio'] = audioDict
	
def loadFiles():
	''' Load a set of wav files to the global dictionary '''
	
	fileDict = {'call': '/mnt/d/music/Andon music/GalaxyQuest.wav',
	            'scan': '/mnt/d/music/Andon music/scan_alert_short.wav'
	           }	
	audioDict = {}
	for key, value in fileDict.items():
		AudioClip = AudioSystem.getClip()
		inputStream = ByteArrayInputStream(system.file.readFileAsBytes(value))
		audioStream = AudioSystem.getAudioInputStream(inputStream)
		AudioClip.open(audioStream)
		audioDict[key] = AudioClip
	system.util.globals['audio'] = audioDict

def start(sound):
	system.util.globals['audio'][sound].setMicrosecondPosition(0)
	system.util.globals['audio'][sound].loop(Clip.LOOP_CONTINUOUSLY)
	
def stop(sound = None):
	if sound is not None:
		system.util.globals['audio'][sound].stop()
	else:
		for key in system.util.globals['audio'].keys():
			system.util.globals['audio'][key].stop()

```

---

_[View the full topic](https://forum.inductiveautomation.com/t/share-audio-clips-between-gateway-and-clients/95286)._
