#!/usr/bin/env python
# This is a reworked version gstreamer example 1 from Jono Bacon's Python and
# Gstreamer primer:
# http://www.jonobacon.org/2006/08/28/getting-started-with-gstreamer-with-python
#
# It uses Gstreamer 1.0, and replaces alsa with pulse for audio output, and
# drops the use of the GTK main loop, since we're not bothered with a GUI
# Info on porting python scripts to Gstreamer 1.0 can be found here:
# https://wiki.ubuntu.com/Novacut/GStreamer1.0

import gi, time, signal
gi.require_version('Gst', '1.0')
from gi.repository import Gst

class Main:
  def __init__(self):
    # Initiate the pipeline
    Gst.init(None)
    self.pipeline = Gst.Pipeline()

    # Add an audiotestsrc element to the pipeline
    self.audiotestsrc = Gst.ElementFactory.make("audiotestsrc", "audio")
    self.pipeline.add(self.audiotestsrc)

    # Add a pulsesink element to the pipeline
    self.pulsesink = Gst.ElementFactory.make("pulsesink", "sink")
    self.pipeline.add(self.pulsesink)

    # Link the two elements together
    self.audiotestsrc.link(self.pulsesink)

    # Set the pipeline to the playing state
    self.pipeline.set_state(Gst.State.PLAYING)

  # We want a graceful shutdown on CTRL+C
  def quit(self, *args):
    print("stopping")
    exit(0)

  # Trap SIGINT
  signal.signal(signal.SIGINT, quit)

# Create the pipeline and enter main loop, quit with ctrl+c

Main()
while True:
    time.sleep(0.001)
