#!/usr/bin/env python
##################################################
# Gnuradio Python Flow Graph
# Title: Sonar
# Author: Kaklik
# Description: Sonar waform generator
# Generated: Sat Feb 14 20:14:10 2009
##################################################

from gnuradio import audio
from gnuradio import gr
from gnuradio.wxgui import scopesink2
from grc_gnuradio import wxgui as grc_wxgui
import wx

class Sonar(grc_wxgui.top_block_gui):

	def __init__(self):
		grc_wxgui.top_block_gui.__init__(
			self,
			title="GRC - Executing: Sonar",
			icon="/usr/local/share/icons/hicolor/32x32/apps/gnuradio-grc.png",
		)

		##################################################
		# Variables
		##################################################
		self.samp_rate = samp_rate = 96000
		self.ampl = ampl = .4

		##################################################
		# Controls
		##################################################
		_ampl_control = grc_wxgui.slider_horizontal_control(
			window=self.GetWin(),
			callback=self.set_ampl,
			label="Volume",
			value=ampl,
			min=0,
			max=.5,
			num_steps=100,
			slider_length=200,
		)
		self.GridAdd(_ampl_control, 0, 0, 1, 2)

		##################################################
		# Blocks
		##################################################
		self.audio_sink = audio.sink(96000, "hw:1,0", True)
		self.audio_source_0 = audio.source(96000, "hw:1,0", True)
		self.gr_sig_source_x = gr.sig_source_f(samp_rate, gr.GR_SIN_WAVE, 39000, ampl, 0)
		self.wxgui_scopesink2_0 = scopesink2.scope_sink_f(
			self.GetWin(),
			title="Scope Plot",
			sample_rate=250000,
			frame_decim=15,
			v_scale=None,
			t_scale=.0001,
			num_inputs=2,
		)
		self.wxgui_scopesink2_0.win.set_format_line()
		self.Add(self.wxgui_scopesink2_0.win)

		##################################################
		# Connections
		##################################################
		self.connect((self.audio_source_0, 0), (self.wxgui_scopesink2_0, 1))
		self.connect((self.gr_sig_source_x, 0), (self.audio_sink, 0))
		self.connect((self.gr_sig_source_x, 0), (self.wxgui_scopesink2_0, 0))

	def set_samp_rate(self, samp_rate):
		self.samp_rate = samp_rate
		self.wxgui_scopesink2_0.set_sample_rate(self.samp_rate)
		self.gr_sig_source_x.set_sampling_freq(self.samp_rate)

	def set_ampl(self, ampl):
		self.ampl = ampl
		self.gr_sig_source_x.set_amplitude(self.ampl)

if __name__ == '__main__':
	if gr.enable_realtime_scheduling() != gr.RT_OK:
		print "Error: failed to enable realtime scheduling."
	tb = Sonar()
	tb.Run()

