EASGen

A Python library to generate EAS SAME Audio using Raw Data


Keywords
audio, sound, eas, alerting, emergency-alert-system
License
ODbL-1.0
Install
pip install EASGen==0.1.7

Documentation

EASGen

PyPI GitHub Workflow Status PyPI - Downloads GitHub language count GitHub

A Fast Python EAS Generation Library

Features

  • EAS Generation
  • Individual Header, Attention Tone, and EOM Generation
  • Fast
  • PyDub AudioSegment Output for Easy Integration
  • Audio File Input for Audio Injection

Installation

This package should be installable through Pip.

On a Debian Based Linux OS:

sudo apt update
sudo apt install python3 python3-pip
pip3 install EASGen

On Windows:

Install Python

In CMD:

python -m pip install EASGen

Usage

To generate a simple SAME Required Weekly Test:

from EASGen import EASGen
from pydub.playback import play

header = "ZCZC-EAS-RWT-005007+0015-0010000-WACNTECH-" ## EAS Header to send
Alert = EASGen.genEAS(header=header, attentionTone=False, endOfMessage=True) ## Generate an EAS SAME message with no ATTN signal, and with EOMs.
play(Alert) ## Play the EAS Message

To Insert Audio into an alert:

from EASGen import EASGen
from pydub.playback import play
from pydub import AudioSegment

header = "ZCZC-CIV-DMO-033000+0100-0010000-WACNTECH-" ## EAS Header to send
audio = AudioSegment.from_wav("NewHampshireDMO.wav") ## Alert Audio import
Alert = EASGen.genEAS(header=header, attentionTone=True, audio=audio, endOfMessage=True) ## Generate an EAS SAME message with an ATTN signal, the imported WAV file as the audio, and with EOMs.
play(Alert) ## Play the EAS Message
## The New Hampshire State Police has activated the New Hampshire Emergency Alert System in order to conduct a practice demo. This concludes this test of the New Hampshire Emergency Alert System.

Spamming New Hampshire Demos have never been easier!

For a custom SampleRate:

from EASGen import EASGen
from pydub.playback import play
from pydub import AudioSegment

header = "ZCZC-EAS-DMO-055079+0100-0010000-WACNTECH-" ## EAS Header to send
Alert = EASGen.genEAS(header=header, attentionTone=True, endOfMessage=True, SampleRate=48000) ## Generate an EAS SAME message with an ATTN signal, the imported WAV file as the audio, with EOMs, at a samplerate of 48KHz.
play(Alert) ## Play the EAS Message

To export an alert instead of playing it back:

from EASGen import EASGen
from pydub import AudioSegment

header = "ZCZC-EAS-RWT-055079+0100-0010000-WACNTECH-" ## EAS Header to send
Alert = EASGen.genEAS(header=header, attentionTone=True, endOfMessage=True, SampleRate=48000) ## Generate an EAS SAME message with an ATTN signal, the imported WAV file as the audio, and with EOMs.
EASGen.export_wav("Alert.wav", Alert)

To resample an alert after generation (If SampleRate is making the audio weird):

from EASGen import EASGen
from pydub.playback import play
from pydub import AudioSegment

header = "ZCZC-EAS-DMO-055079+0100-0010000-WACNTECH-" ## EAS Header to send
Alert = EASGen.genEAS(header=header, attentionTone=True, endOfMessage=True) ## Generate an EAS SAME message with an ATTN signal, the imported WAV file as the audio, and with EOMs.
Alert = Alert.set_frame_rate(8000) ## Resample the alert to 8KHz for no reason lol.
play(Alert) ## Play the EAS Message

To simulate an ENDEC type:

from EASGen import EASGen
from pydub.playback import play
from pydub import AudioSegment

header = "ZCZC-CIV-DMO-033000+0100-0010000-WACNTECH-" ## EAS Header to send
audio = AudioSegment.from_wav("NewHampshireDMO.wav") ## Alert Audio import
Alert = EASGen.genEAS(header=header, attentionTone=True, audio=audio, mode="DIGITAL", endOfMessage=True) ## Generate an EAS SAME message with an ATTN signal, the imported WAV file as the audio, with EOMs, and with a SAGE DIGITAL ENDEC style.
play(Alert) ## Play the EAS Message
## The New Hampshire State Police has activated the New Hampshire Emergency Alert System in order to conduct a practice demo. This concludes this test of the New Hampshire Emergency Alert System.

Now you can make all the Mocks you want!

Supported ENDECS:

  • None
  • TFT (Resample to 8KHZ using ".set_frame_rate(8000)" on the generated alert)
  • EASyCAP (Basically the same as None)
  • DASDEC (Crank up the Samplerate to 48000 for this one)
  • SAGE EAS ENDEC (Mode = "SAGE")
  • SAGE DIGITAL ENDEC (Mode = "DIGITAL")
  • Trilithic EASyPLUS/CAST/IPTV (Mode = "TRILITHIC")
  • NWS (Mode = "NWS", Resample to 11KHZ using ".set_frame_rate(11025)" on the generated alert)

Unsupported ENDECS:

  • HollyAnne Units (Can't sample down to 5KHz... This is a good thing.)
  • Gorman-Reidlich Units (Don't listen to them enough to simulate. I think they're like TFT, but donno.)
  • Cadco Twister Units (No Data)
  • MTS Units (No Data)

To hear all the ENDEC styles, Do this:

from EASGen import EASGen
from pydub.playback import play
from pydub import AudioSegment

print("Normal / EASyCAP")
play(EASGen.genEAS("ZCZC-EAS-DMO-055079+0100-0391810-WACN    -", True, True, AudioSegment.empty(), "", 24000))
print("DAS")
play(EASGen.genEAS("ZCZC-EAS-DMO-055079+0100-0391810-WACN    -", True, True, AudioSegment.empty(), "", 48000))
print("TFT")
play(EASGen.genEAS("ZCZC-EAS-DMO-055079+0100-0391810-WACN    -", True, True, AudioSegment.empty(), "", 24000).set_frame_rate(8000))
print("NWS")
play(EASGen.genEAS("ZCZC-EAS-DMO-055079+0100-0391810-WACN    -", True, True, AudioSegment.empty(), "NWS", 24000).set_frame_rate(11025))
print("SAGE")
play(EASGen.genEAS("ZCZC-EAS-DMO-055079+0100-0391810-WACN    -", True, True, AudioSegment.empty(), "SAGE", 24000))
print("DIGITAL")
play(EASGen.genEAS("ZCZC-EAS-DMO-055079+0100-0391810-WACN    -", True, True, AudioSegment.empty(), "DIGITAL", 24000))
print("EASyPLUS/CAST/IPTV")
play(EASGen.genEAS("ZCZC-EAS-DMO-055079+0100-0391810-WACN    -", True, True, AudioSegment.empty(), "TRILITHIC", 24000))

NEW:

Added WEA and NPAS Modes:

For NPAS:

from EASGen import EASGen
from pydub.playback import play
from pydub import AudioSegment

Alert = EASGen.genEAS(mode="NPAS") ## Generate an NPAS (AlertReady) Tone
play(Alert) ## Play the NPAS Tones

For WEA:

from EASGen import EASGen
from pydub.playback import play
from pydub import AudioSegment

Alert = EASGen.genEAS(mode="WEA") ## Generate WEA Tones
play(Alert) ## Play the WEA Tones

Hope you enjoy!