Esempio n. 1
0
class Server():
  def __init__(self, master):
    self.netToAudio = NetToAudio()
    self.speaker = Speaker()
    self.master = master

  def listenTo(self, theSocket):
    self.speaker.init()
    self.recvFrom(theSocket)
    self.speaker.destroy()

  def listen(self):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    host = "0.0.0.0"
    s.bind((host, Config.port))
    self.listenTo(s)

  def recvFrom(self, socket):
    print "Listening on ".format(socket.getsockname())
    while True:
      chunk = self.readChunk(socket)
      audio = self.netToAudio.convert(chunk)
      self.speaker.play(audio)

  def readChunk(self, socket):
    data, addr = socket.recvfrom(Config.net_chunksize)
    self.master.callOn(addr)
    return data
Esempio n. 2
0
    def film_status(self):
        self._get_player_status()
        if not self.playing:
            Speaker.talk(_("speak.movie.nothing_played"))
        else:
            try:
                movie_name = self.get_movie_name()
                movie_time = self.get_movie_time()
                if self.same_language:
                    s =_("speak.movie.watching %s ") % movie_name + _("speak.movie.end_time %s") % movie_time
                    Speaker.talk(s)
                else:
                    Speaker.add_text(_("speak.movie.watching %s ") % "", self.tts_language)
                    Speaker.add_text(movie_name, self.library_language)
                    Speaker.add_text( _("speak.movie.end_time %s") % movie_time, self.tts_language)
                    Speaker.make_out_file()
                    Speaker.play()

            except KodiException:
                Speaker.talk(_("speak.kodi.error"))
Esempio n. 3
0
from speaker import Speaker
import time
import RPi.GPIO as GPIO


speaker = Speaker(GPIO.BCM, 23)

speaker.set_bpm(160)

#intro for speed
speaker.play('C1', 1/8)
speaker.pause(1/8)
speaker.play('C1', 1/8)
speaker.pause(1/8)
speaker.play('C1', 1/8)
speaker.pause(1/8)
speaker.play('C1', 1/8)
speaker.pause(1/8)


#1-4
speaker.pause(4)

#5
speaker.play('D1', 1/8)
speaker.play('E1', 1/8)
speaker.play('E1', 1/8)
speaker.play('D1', 1/8)
speaker.play('E1', 1/4)
speaker.play('E1', 1/8)
speaker.play('D1', 1/8)
Esempio n. 4
0
from speaker import Speaker
import time
import RPi.GPIO as GPIO

speaker = Speaker(GPIO.BCM, 23)

speaker.set_bpm(400)
speaker.set_notepause(0.01)

speaker.pause(1)

#1
speaker.play('C2', 1 / 16)
speaker.play('C2X', 1 / 16)
speaker.play('D2', 1 / 8)
speaker.pause(3 / 4)

#2
speaker.play('B1', 1 / 4)
speaker.play('F2', 1 / 4)
speaker.pause(1 / 4)
speaker.play('F2', 1 / 4)

#3
speaker.play('F2', 1 / 3)
speaker.play('E2', 1 / 3)
speaker.play('D2', 1 / 3)

#4
speaker.play('C2', 1 / 4)
speaker.play('E1', 1 / 4)
Esempio n. 5
0
class App():
	def __init__(self):
		self.mic     = Mic()
		self.speaker = Speaker()
		self.client  = Client()
		self.modem   = Modem()

		self.selectedMod = 'AM'

		self.modulations = {
			'AM': self.modem.modAm,
			'AMSC': self.modem.modAmsc,
			'FM': self.modem.modFm
		}

		self.demodulations = {
			'AM': self.modem.demodAm,
			'AMSC': self.modem.demodAmsc,
			'FM': self.modem.demodFm
		}

		self.fig, self.axes = plt.subplots(4, 1, figsize=[6,8])
		plt.subplots_adjust(top=0.7)
		for i in range(4):
			self.axes[i].axes.xaxis.set_visible(False)
			self.axes[i].axes.yaxis.set_visible(False)

		self.input_ip       = TextBox(plt.axes([0.1,  0.05, 0.4, 0.05]), '', initial='192.168.0.20')
		self.btn_connect    =  Button(plt.axes([0.5,  0.05, 0.2, 0.05]), 'Connect')
		self.btn_disconnect =  Button(plt.axes([0.7,  0.05, 0.2, 0.05]), 'Disconnect')

		self.btn_am   =  Button(plt.axes([0.1,  0.94, 0.2, 0.05]), 'AM')
		self.btn_amsc =  Button(plt.axes([0.3,  0.94, 0.2, 0.05]), 'AMSC')
		self.btn_fm   =  Button(plt.axes([0.5,  0.94, 0.2, 0.05]), 'FM')

		self.sld_cutoff     = Slider(plt.axes([0.1,  0.91, 0.7, 0.02]), 'Cutoff',  1.,    2000.,  valinit=1000,   valstep=1.)
		self.sld_order      = Slider(plt.axes([0.1,  0.87, 0.7, 0.02]), 'Order',   2,     50,     valinit=5,      valstep=1)
		self.sld_fm_carrier = Slider(plt.axes([0.1,  0.83, 0.7, 0.02]), 'FM Freq', 3000., 20000., valinit=10000., valstep=100.)
		self.sld_fm_devsiat = Slider(plt.axes([0.1,  0.79, 0.7, 0.02]), 'FM Desv', 300.,  4000.,  valinit=1000.,  valstep=10.)
		self.sld_am_carrier = Slider(plt.axes([0.1,  0.75, 0.7, 0.02]), 'AM Freq', 3000., 20000., valinit=3000.,  valstep=100.)

		self.btn_am.on_clicked(self.selectAM)
		self.btn_amsc.on_clicked(self.selectAMSC)
		self.btn_fm.on_clicked(self.selectFM)

		self.btn_connect.on_clicked(self.connect)
		self.btn_disconnect.on_clicked(self.disconnect)

		self.sld_cutoff.on_changed(self.changeCutoff)
		self.sld_order.on_changed(self.changeOrder)
		self.sld_fm_carrier.on_changed(self.changeFmCarrier)
		self.sld_fm_devsiat.on_changed(self.changeFmDevsiat)
		self.sld_am_carrier.on_changed(self.changeAmCarrier)

		plt.show()

	def selectAM(self, evt):
		self.selectedMod = 'AM'

	def selectAMSC(self, evt):
		self.selectedMod = 'AMSC'

	def selectFM(self, evt):
		self.selectedMod = 'FM'

	def changeCutoff(self, val):
		self.modem.cutoff = val
		self.modem.normal_cutoff = self.modem.cutoff / self.modem.nyq

	def changeOrder(self, val):
		self.modem.order = val

	def changeFmCarrier(self, val):
		self.modem.fm_carrier_freq = val

	def changeFmDevsiat(self, val):
		self.modem.fm_desviation = val

	def changeAmCarrier(self, val):
		self.modem.am_carrier_freq = val


	def connect(self, event):
		self.client = Client()
		self.client.connect(self.input_ip.text)
		Thread(target=self.sendData).start()
		Thread(target=self.playSound).start()
		Thread(target=self.updatePlot).start()

	def disconnect(self, event):
		self.client.disconnect()

	def sendData(self):
		time.sleep(0.01)
		while self.client.isConnected():
			time.sleep(0.01)
			entrada = self.mic.read()
			mod = self.modulations[self.selectedMod](entrada)
			self.client.send(mod)

	def playSound(self):
		time.sleep(0.01)
		while self.client.isConnected():
			time.sleep(0.01)
			data = self.client.getBuffer().get_data().flatten()
			if not len(data): continue
			mod = data[-2205:]
			demod = self.demodulations[self.selectedMod](mod)
			self.speaker.play(demod)


	def updatePlot(self):
		time.sleep(0.01)
		while self.client.isConnected():
			time.sleep(0.01)
			frame = self.client.getBuffer().get_data().flatten()
			data = np.fromstring(frame, dtype=np.int16)
			if not len(data): continue

			self.axes[0].cla()
			self.axes[0].plot(data, color="black")

			self.axes[1].cla()
			self.axes[1].specgram(data, Fs=44100)

			data = self.demodulations[self.selectedMod](frame)
			data = np.fromstring(data, dtype=np.int16)

			self.axes[2].cla()
			self.axes[2].plot(data, color="black")

			self.axes[3].cla()
			self.axes[3].specgram(data, Fs=44100)

			plt.draw()
Esempio n. 6
0
class PahoSpeaker(PahoAwsIot, object):

	def __init__(self, config, **kargs):
		super(PahoSpeaker, self).__init__(
			topic_sub = config['Paho']['MQTT_TOPIC_SUB'],
			ca = config['Paho']['CA_ROOT_CERT_FILE'],
			cert = config['Paho']['THING_CERT_FILE'],
			key = config['Paho']['THING_PRIVATE_KEY'],
			host = config['Paho']['MQTT_HOST'],
			port = config['Paho']['MQTT_PORT'],
			keepalive = config['Paho']['MQTT_KEEPALIVE_INTERVAL'],
			logging = kargs['logging']
		)
		self.speaker = Speaker(
			key = config['Aws']['ACCESS_KEY'],
			secret = config['Aws']['SECRET_KEY'],
			logging = kargs['logging'],
			on_speak = self._on_speak
		)

		self.topic_pub = config['Paho']['MQTT_TOPIC_PUB']

	def _on_message(self, mosq, obj, msg):
		"""
		:param dict msg: dictionary converted from json
		 str  topic : raspberrypi/request/{action}
		 int  qos :
		 json payload : {"param1": "...", "param2": "..."}

		  action :
		   speak -- payload : {"text": "...", "voice": "..."}
			:str text: 再生するテキスト
			:str voice: "Takumi" or "Mizuki"
		"""
		try:
			self.logger.info("Topic: " + str(msg.topic))
			self.logger.info("QoS: " + str(msg.qos))
			self.logger.info("Payload: " + str(msg.payload))

			ack = {}

			# topic 確認
			# Level1:既定文字列のチェック
			levels_pub = msg.topic.split('/', 2)
			levels_sub = self.topic_sub.split('/')
			if levels_pub[0] != levels_sub[0]:
				raise ParamError("invalid topic.")

			# Level2:typeのチェック
			if levels_pub[1] != levels_sub[1]:
				raise ParamError("invalid type.")

			# Level3:actionのチェックと取得
			if len(levels_pub) < 3 :
				raise ParamError("can't find action.")
			action = levels_pub[2]

			# レスポンス
			ack['action'] = action

			"""
			# 一応下位を取得している
			subtopics = None
			if len(topics_pub) > 2 :
				subtopics = topics_pub[2].split('/')
			"""

			# パラメータをjsonデコード
			param = json.loads(msg.payload)

			# リクエストIDをチェック、ACKに設定
			if not param['request_id']:
				raise ParamError("can't find request_id.")
			ack['request_id'] = param['request_id']

			# action毎の処理
			if action == 'speak':
				self.speaker.play(param)
				ack['result'] = '指定されたテキストを読み上げました。'
			else:
				raise ParamError("can't find action.")

			# 処理終了
			self.logger.info('success')

		except ParamError as e:
			# 他のメッセージを処理しない
			self.logger.info(e.description)
			return

		except Error as e:
			self.logger.error(e.description)
			ack['error'] = e.error
			ack['error_description'] = e.description

		except Exception as e:
			self.logger.critical(e)
			self.logger.critical(util.trace())

			ack['error'] = 'internal_error'
			ack['error_description'] = str(e)

		# ACK返却
		self.publish(self.topic_pub, **ack)
		self.logger.info('on message complete.')

	def _on_speak(self):
		"""
		音声再生のコールバック
		再生終了を処理
		"""

		# 録音を起動
		self.publish(
			'raspberrypi/request/listen',
			request_id = str(uuid.uuid4()),
		)
		self.logger.info('publish: raspberrypi/request/listen')
Esempio n. 7
0
from speaker import Speaker
import time
import RPi.GPIO as GPIO

speaker = Speaker(GPIO.BCM, 23)

speaker.set_bpm(260)

speaker.pause(2)

#1
speaker.play('A1', 1 / 4)
speaker.play('D2', 1 / 4)
speaker.play('A1', 1 / 4)
speaker.play('D2', 1 / 4)

#2
speaker.play('A1', 1 / 8)
speaker.play('D2', 1 / 4)
speaker.play('A1', 1 / 8)
speaker.pause(1 / 8)
speaker.play('G1X', 1 / 8)
speaker.play('A1', 1 / 4)

#3
speaker.play('A1', 1 / 8)
speaker.play('G1X', 1 / 8)
speaker.play('A1', 1 / 8)
speaker.play('G1', 1 / 8)
speaker.pause(1 / 8)
speaker.play('F1X', 1 / 8)
Esempio n. 8
0
from speaker import Speaker
import time
import RPi.GPIO as GPIO

speaker = Speaker(GPIO.BCM, 23)

speaker.set_bpm(140)

speaker.pause(2)

#0
speaker.play('A1', 1 / 8)
speaker.play('B1', 1 / 8)
speaker.play('A1', 1 / 8)
speaker.play('G1', 1 / 8)

#1-2
speaker.play('D1', 1 / 8)
speaker.play('E1', 1 / 8)
speaker.play('G1', 3 / 8)
speaker.play('E1', 1 / 4)
speaker.play('B1', 5 / 8)
speaker.play('A1', 1 / 8)
speaker.play('B1', 1 / 8)
speaker.play('A1', 1 / 8)
speaker.play('G1', 1 / 8)

#3
speaker.play('D1', 1 / 8)
speaker.play('E1', 1 / 8)
speaker.play('G1', 3 / 8)
Esempio n. 9
0
from mic import Mic
from speaker import Speaker
from modem import Modem

mic = Mic()
speaker = Speaker()
modem = Modem()

while True:
    entrada = mic.read()

    # modulado   =  modem.modAm(entrada)
    # demodulado = modem.demodAm(modulado)

    modulado = modem.modAmsc(entrada)
    demodulado = modem.demodAmsc(modulado)

    # modulado   = modem.modFm(entrada)
    # demodulado = modem.demodFm(modulado)

    speaker.play(demodulado)