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
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"))
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)
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)
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()
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')
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)
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)
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)