예제 #1
0
    def __init__(self,izena,parse_api_class,textu_fitxategia,audio_fitxategia,gpio_pin,karpeta_tenp_izena,begien_pinak,esaldien_jsona):
        
        #    izena: panpinaren izena: Instantziaren izena adib: 'Olentzero'
        #    parse_api_class: Parseko apiaren url-a adib: '/1/classes/Olentzero'
        #    textu_fitxategia: panpin honi dagokion textu fitxagegiaren izena adib: 'olentzero.txt'
        #    audio_fitxategia: panpin honi dagokion audio fitxategiaren izena adib: 'olentzero.wav'
        #    gpio_pin: panpin honen ahoari dagokion gpio pina adib: 17
        self.interneten = False
        self.esaldien_jsona = esaldien_jsona
        self.izena = izena
        self.parse_api_class = parse_api_class
        self.textu_fitxategia = textu_fitxategia
        self.audio_fitxategia = audio_fitxategia
        self.karpeta_temp_izena = karpeta_tenp_izena
        self.gpio_pin = gpio_pin

        if begien_pinak:
            self.begiak = Begiak(begien_pinak)
        else:
            self.begiak = False

        GPIO.setup(gpio_pin, GPIO.OUT)
        GPIO.output(gpio_pin, False)
        Panpin.__gpio_pinak.append(gpio_pin)

        # Esaldiak hartu json lokal batetik
        with open(self.esaldien_jsona) as json_file:
            json_data = json.load(json_file)

        obj = json.loads(json_data)

        random.shuffle(obj)
        self.esaldiak = obj
        self.esaldien_luzeera = len(obj)
        self.ind = 0
예제 #2
0
class Panpin:
    # panpin guztien ahoen gpio pinak gordetzen ditu
    __gpio_pinak = []
    def __init__(self,izena,parse_api_class,textu_fitxategia,audio_fitxategia,gpio_pin,karpeta_tenp_izena,begien_pinak,esaldien_jsona):
        
        #    izena: panpinaren izena: Instantziaren izena adib: 'Olentzero'
        #    parse_api_class: Parseko apiaren url-a adib: '/1/classes/Olentzero'
        #    textu_fitxategia: panpin honi dagokion textu fitxagegiaren izena adib: 'olentzero.txt'
        #    audio_fitxategia: panpin honi dagokion audio fitxategiaren izena adib: 'olentzero.wav'
        #    gpio_pin: panpin honen ahoari dagokion gpio pina adib: 17
        self.interneten = False
        self.esaldien_jsona = esaldien_jsona
        self.izena = izena
        self.parse_api_class = parse_api_class
        self.textu_fitxategia = textu_fitxategia
        self.audio_fitxategia = audio_fitxategia
        self.karpeta_temp_izena = karpeta_tenp_izena
        self.gpio_pin = gpio_pin

        if begien_pinak:
            self.begiak = Begiak(begien_pinak)
        else:
            self.begiak = False

        GPIO.setup(gpio_pin, GPIO.OUT)
        GPIO.output(gpio_pin, False)
        Panpin.__gpio_pinak.append(gpio_pin)

        # Esaldiak hartu json lokal batetik
        with open(self.esaldien_jsona) as json_file:
            json_data = json.load(json_file)

        obj = json.loads(json_data)

        random.shuffle(obj)
        self.esaldiak = obj
        self.esaldien_luzeera = len(obj)
        self.ind = 0
        #self.esaldi_berriak()

    def hitzegin(self):
        #    panpinak bere audio fitxategia
        #    irakurri eta dagokion led-a pizten du
        #    hitz egiten duen bitartean

        for pin in Panpin.__gpio_pinak:
            GPIO.output(pin, False)

        pygame.mixer.init(17000)
        pygame.mixer.music.set_volume(1.0)
        pygame.mixer.music.load(self.audio_fitxategia)
        if self.begiak:
            self.begiak.mugitu_begiak_hasieran()
        pygame.mixer.music.play()
        GPIO.output(self.gpio_pin, True)
        while pygame.mixer.music.get_busy() == True:
            continue

        GPIO.output(self.gpio_pin, False)
        if self.begiak:
            self.begiak.mugitu_begiak_bukaeran()
        return

    def pinak(self):
        # panpin guztien pinak itzultzen ditu
        return Panpin.__gpio_pinak

    def esaldi_berriak(self):
        # panaren esaldiak eguneratzen ditu
        try:
            connection = httplib.HTTPSConnection('api.parse.com', 443)
            params = urllib.urlencode({"where":json.dumps({"noizarte": {"$gt": {"__type": "Date", "iso": datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ') }}},{"noiztik": {"$lt": {"__type": "Date", "iso": datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ') }}})})
            connection.connect()
            connection.request('GET', self.parse_api_class+'?%s' % params, '', {
                   "X-Parse-Application-Id": PARSE_APP_ID,
                   "X-Parse-REST-API-Key": PARSE_API_KEY
                 })
            emaitza = connection.getresponse()

            if emaitza.status == 200:
                result = json.loads(emaitza.read())
                data = result["results"]
            else:
                data = self.esaldiak
        except:
            data = self.esaldiak
        
        # data = random.shuffle(data)
        self.esaldiak = data
        self.esaldien_luzeera = len(data)
        self.ind = 0
        return data

    def get_esaldia(self):
        # esaldi bat jasotzen du esaldien zerrendatik
        nire_esaldia = self.esaldiak[self.ind]
        if self.ind < self.esaldien_luzeera-1:
            self.ind = self.ind+1
        else:
            if self.interneten:
                self.esaldi_berriak()
            else:
                random.shuffle(self.esaldiak)
                self.ind = 0

        return nire_esaldia

    def moztu_esaldia(self):
        # textu prozesadoreak arazoak sortzen ditu esaldi laburrekin.
        # funtzio honek interesatzen zaigun zatia hartzen du
        fitx = AudioSegment.from_wav(self.audio_fitxategia)
        denbora = len(fitx) - TXAPAREN_IRAUPENA
        azken_esaldia = fitx[-denbora:]
        azken_esaldia.export(self.audio_fitxategia,format="wav")
        return

    def idatzi(self,esaldia):
        # textu fitxategian esaldi bat idazten du
        text_file = open(self.textu_fitxategia, "w")
        text_file.write(TXAPA + esaldia)
        text_file.close()
        return

    def ezabatu_karpetaren_edukia(self):
        # sintetizadorearen liburutegiak fitxategi tenporalak 
        # gordetzen dituen direktorioaren edukia ezabatzen du
        shutil.rmtree(self.karpeta_temp_izena)