Está en la página 1de 22

Programación II – INFO

1123

Nombre: Luis Ferreira

Sección ¿

Nombre Profesor: Gabriel Venegas

Fecha entrega: 14 Noviembre 2017


Índice
Partes del Informe Numero de pagina
A. Introducción 3 – 4 pág.
B. Desarrollo 5-10 pág.
C. Conclusión 11 pág.
D. Anexos 12-28 pág.

2
Introducción

En este trabajo se deben realizar 4 scripts , en las cuales deberán ser creados con librerías
de json , requests , entre otras , estas librerías ayudando en la creación de los scripts .
En el primer scripts se pide que se realice una clase en Python , en la cual pueda interactuar
con una librería llamada sqlite , en la cual deberá haber una clase principal llamada
contactos , en la cual esta clase tendrá las funciones de añadir ,ver , actualizar y modificar
datos de un archivo que será de formato db , en la cual en este archivo se creara una base de
datos con su respectiva tabla . En donde esta clase servirá para interactuar con la base de
datos.
En el segundo script se debe realizar un reporte del tiempo de ciertas ciudades de chile, en
la cual se deberá sacar los siguientes datos:

En este script se deberá ocupar la api de una página llamada “current weather data” , en la
cual esta api devolverá un json con los datos de cada ciudad , una vez sacados estos datos
se debe realizar un gráfico de barras con los datos de las temperaturas , utilizando la librería
MatPlotLib .
En el Tercer Script se debe realizar web scraping de una página que contiene imágenes, en
la cual se deberán bajar las primeras 20 imágenes, en donde se utilizara la librería
BeatifulSoup o requests.get(.). , todas las imágenes deben ser sacadas de la librería, una vez
descargadas las imágenes deben ser convertidas con pil , para que tengan un filtro gray .

En el Cuarto script se debe utilizar la librería wave , para crear un archivo de extencion .wav , en el
cual contenga la escala musical , de tal manera que el canal izquierdo grabe la escala al revés , y el
canal derecho la grabe de manera normal , en la cual debe tener una tasa de sampleo de 44.100

3
Una vez creado ese archivo , también se deberá realizar lo siguiente , en la cual se pide la
separación de los canales por arreglos , lo otro que se pide es separar el audio del canal izquierdo y
guardarlo en un archivo llamado mono_izq.wav , en el cual contendrá la escala musical al revés ,
también se debe hacer lo mismo para el otro canal , en la cual se guardara como mono_der.wav.
Lo ultimo que se debe realizar en este ejercicio es guardar otro archivo , con los canales pero
separando las notas por lapsos de segundo sin sonido , para ambos canales .
Para reproducir el sonido se debe utilizar Audacity

4
Desarrollo

Primer Ejercicio
Desarrollado por: Luis Ferreira
Comenzando este ejercicio se importa el modulo sqlite3 , luego de esto se crea la clase llamada
contact , en la cual contiene las función init , en la que se le da como parámetro self , nombre de la
base de datos y el nombre de la tabla , dentro de esta función init , se encuentras las funciones que
serán llamadas mas adelante , la primera función que se crea es la de crear_tabla en la cual se le
pasa el parámetro self , dentro de esto se toma la variable cadena , en la cual contendrá el nombre de
la tabla , luego de eso se ejecuta una query en la cual crea la tabla con la variable anterior , que
contiene el nombre , dando las columnas de id , nombre , apellido . etc
Luego se encuentra otra función llamada ingresa datos , que se le da como parámetro self, dentro de
esta se ingresan los datos de la tabla , con la función execute , para pedir los datos se utiliza un for
en el cual dependiendo de cual haya sido la cantidad de veces que quiere añadir datos se haya
ingresado este pedirá los datos añadir en la tabla .
Luego de estas función se encuentra una llamada ver_Datos , en la cual esta función se dedicara a
mostrar todos los datos que estén guardados en la tabla “x” , en la cual se mostraran estos datos con
un select * from “x” , en la cual con un for ayudara a mostrar todos los datos .
Luego de eso se Crea una función llamada borra datos , en la cual se le pasa el parámetro self ,
teniendo como función borrar datos de una fila entera , dependiendo del nombre de la persona ,
mostrando todos los datos de la tabla , y dando la opción de ingresar el nombre de la persona que se
desea borrar de la tabla .
La ultima función que se encuentra en esta clase es la de actualizar tabla , en la cual se puede
actualizar el nombre de una persona , ingresando el antiguo y a su vez también ingresando el nuevo
, luego de eso se ejecuta la consulta que en este caso seria update .
Una vez salido de esa clase , se Pide que se ingrese el nombre de la base de datos y el nombre de la
tabla , se crea el archivo de la base de datos con formato .db .
Para elegir que función llamar , se creo como un sistema visual de elección , en el cual se debe
elegir 5 opciones , para llamar las funciones que se crearon anteriormente.

5
Segundo Ejercicio
Desarrollado por: Luis Ferreira
Comenzando este script se importan las librería requests , json y matplotlib, luego de esto se crea un
arreglo en el cual contendrá las ciudades en la cual se buscara su reporte del clima , y luego se crea
un diccionario vacio llamado ciudad .
Luego de esto se entra a un for con el largo del arreglo que contiene las ciudades , una vez dentro
de este for se crea una variable llamada r en la cual esta contendrá los datos de la pagina en donde
se sacaran la información del clima , luego se crea una variable llamada data , en la cual esta
variable carga los datos de la pagina y los convierte a formato json .
Luego de esto se imprime los datos del tiempo , para imprimir los datos del tiempo se utilizo la
variable anterior llamada data , en la cual utilizando el formato de json se llaman los datos ejemplos
si se desea ver las cordenandas se llaman data[‘coord’] , en donde muestraria la latitud y la longitud
.
Cuando se llega a la parte de extraer las temperaturas, estas se guardan en arreglos llamados
temperatura que esta sería la normal y/o actual, temperatura_min que seria la minima y la
temperatura_max que sería la máxima de cada ciudad.
Luego de esto se llena estos arreglos, tienen el mismo orden de las ciudades que el arreglo que se
creó en un comienzo para las ciudades,
Terminada esa parte se crean los 3 graficos de barra, en el cual uno será para la temperatura normal
otro para la minima y otro para la máxima, para llenar con datos estos graficos se utlizo los arreglos
de las temperaturas y de las ciudades.
Generando como resultado el siguiente gráfico:

6
Tercer Ejercicio
Desarrollado por: Luis Ferreira
Se comienza con la importación de la librería request , pil , urllib , bs4 , httplib y pil, una vez
cargadas las librerías se carga los datos de la pagina , con la función request.get en donde
se le proporciona la url de la pagina , luego de esto se guarda en otra variable llamada soup
, que esta servirá para buscar las imágenes , luego de esto se crean variables de tipo entero
, cadena y arreglo que servirán para el avance de este código .
Luego de esto se entra en un for en el cual se recorrerá todas las etiquetas de la pagina , en
la cual dentro de este for se buscan los links de cada pagina , para después guardarlos ,
pero también para guardar los links de las imágenes solo se saca un pedaso de los links
como por ejemplo , un link completo de una imagen de esa pagina seria
https://images.pexels.com/photos/34950/pexels-photo.jpg?h=350&auto=compress&cs=tinysrgb ,
pero se guarda solo esta parte del link /photos/34950/pexels-photo.jpg , que servirá para descargar
la imagen .
Terminada la búsqueda de los links entra a otro for que tiene el largo del arreglo de los links de las
imágenes , una vez dentro se crea una variable que tiene un link que es images.pexeles.com , luego
por método get se pasa lo que se guardó en le arreglo de los links de las imágenes ,luego de esto se
guarda las imágenes . y también después se abre otro for y procesa las imágenes para convertirlas a
grey .

Cuarto Ejercicio
Desarrollado por: Luis Ferreira
En este script se comienza con la importación de las librerías de struck ,math , wave y random ,
luego de esto se crea una variable llamada rate que este será la calidad de 16 bits , que será de
44100 , luego de est se crea la variable abre el archivo .wav en el que creara el archivo que
contendrá las notas , lo siguiente es darle los parámetros al archivo .wav , en el cual será estero y
contendrá dos canales , uno derecho y otro izquierdo .
Luego se crea la variable del volumen, en la cual contendrá un volumen de 10000 , luego de esto se
inicializan variables de tipo cadena , que estas contendrá los Hertz de las notas , luego de esto se
crea un for en donde se creara las notas , en donde dentro de este for se crearan las notas de la
escala natural de manera normal y al revés para sus distintos canales , luego de esto se llena el
archivo .wav con estos datos y se cierra .
Luego de eso se crea el archivo mono que se llamara izq_mono.wav en donde se realizara lo mismo
de antes solamente que se grabara la escala de manera al reves , y luego se realiza lo mismo para el
canal derecho pero solamente que se grabara la escala de manera normal .
Luego de eso se crean otros dos archivos mono , que uno creara una archivo con las notas
do,mi,sol,si y otro archivo con las re , fa ,la do

7
Conclusión

En este proyecto gracias a la realización de todos los ejercicios propuestos se logró obtener
mayor conocimiento sobre la programación con el lenguaje de programación de Python , ya
que en este proyecto se utilizaron nuevas librerías que nunca antes se habían utilizado ,
generando así un margen de búsqueda sobre para que sirve cada una de estas librerías y
cuál es su sintaxis correcta para comenzar a utilizar estas , las librerías que se tuvieron que
investigar fueron las de wave , request, urrlib , entre otras.
También en este proyecto se adquirió mayor conocimiento en las liberias que ya se habían
utilizado.
Lo nuevo que se aprendio en este proyecto está relacionado con el uso de webscraping y el
uso del nuevo modulo wave . en la cual el web scraping nos facilitó el proceso de creación
de estos scripts , ya que nos ayudó a recopilar las etiquetas de las paginas para sacar la
información que se pido , y/o sacar las imágenes . ya que se debe saber bien la sintaxis de
estas librerías para buscar etiquetas específicas y sus atributos .

El modulo wave este fue un módulo complejo al utilizar ya que se debe tener en cuenta
ciertas fórmulas matemáticas para realizar el ingreso de los sonidos al archivo .wav , en la
cual se generó un margen de búsqueda sobre este , también se debio buscar cuales eran los
hercios de las notas , en la escala natural , para asi aplicar el guardado de estas en los
archivos

8
Anexo

Primer Ejercicio

import sqlite3

#------------------------------------------------------------

#Crea El archivo .db

#------------------------------------------------------------

#------------------------------------------------------------

#Comienzo Script

#------------------------------------------------------------

class contac(object):

def __init__(self,Nombredb,NombreTabla):

self.Nombredb = Nombredb

self.NombreTabla = NombreTabla

def crea_tabla (self):

cadena = self.NombreTabla

cur.execute("CREATE TABLE"+" " +cadena +" " + "( id int not null ,nombre
varchar(25),apellido varchar(25),celular varchar(12) ,email varchar(50),skype
varchar(50),profesion varchar(40),PRIMARY KEY (id))")

def Ingresa_datos(self):

print "------------------------------------------"

cont = input ("Cuantos veces desea ingresar Datos (ingrese Numero y/o cantidad):")

9
for i in range (cont):

print "Datos Persona Numero ",i+1

nombre=raw_input ("ingrese Nombre:")

apellido=raw_input ("ingrese apellido:")

celular=raw_input ("ingrese Celular:")

if len(celular) >8:

print "Error De celular vuelva A intentar"

break

else:

cel_final = "+569"+celular

email = raw_input ("ingrese Email:")

skype = raw_input ("ingrese Skype : ")

profesion = raw_input ("ingrese Profesion :")

n_bd = self.NombreTabla

con.execute("INSERT INTO "+n_bd+"


values('"+str(i+1)+"','"+str(nombre)+"','"+str(apellido)+"','"+str(cel_final)+"','"+str(email)+
"','"+str(skype)+"','"+str(profesion)+"')")

def ver_datos(self):

print "Mostrando Todos Los Datos De La Tabla"

print "-----------------------------------------------------------"

for i in con.execute("SELECT * FROM "+" "+self.NombreTabla):

print i

def borrar_datos(self):

print "Datos De La tabla:"

10
for i in con.execute("SELECT * FROM "+" "+ self.NombreTabla):

print i

print "-----------------------------------------------------------"

el=raw_input("Elija El Nombre que desea borrar:")

con.execute("DELETE FROM"+" "+self.NombreTabla+" "+"WHERE


nombre="+"'"+el+"'")

print "Datos Borrados Exitosamente "

print "-----------------------------------------------------------"

def actualizar_tabla(self):

print "Datos De La tabla:"

for i in con.execute("SELECT * FROM "+" "+ self.NombreTabla):

print i

print "-----------------------------------------------------------"

el=raw_input("Ingrese Nombre antiguo de La tabla:")

al=raw_input("Ingrese Nombre Nuevo:")

con.execute("UPDATE "+" "+self.NombreTabla+" "+"SET nombre="+"'"+al+"'"


+"WHERE nombre="+"'"+el+"'")

print "Datos Actualizados Exitosamente "

print "-----------------------------------------------------------"

#------------------------------------------------------------

#Eleccion

#------------------------------------------------------------

nombre_db = raw_input('Ingrese El Nombre De La base de datos : ')

11
nombre_tb = raw_input('Ingrese El Nombre De Tabla : ')

# Crea Base de datos

f=open(nombre_db+".db","w")

f.close()

con = sqlite3.connect(nombre_db+".db")

cur = con.cursor()

x = contac(nombre_db,nombre_tb)

x.crea_tabla()

prendido=False

if nombre_db != " ":

prendido=True

while prendido==True:

print """

|---------------------------------|

| Bienvenido : |

| Que Desea Hacer : |

| 1- Ingresar Datos |

| 2- Ver Datos |

| 3- Borrar Datos |

12
| 4- Actualizar Datos |

| 5- Salir |

|---------------------------------|

"""

a= input("Ingrese Opcion :")

if a ==1:

x.Ingresa_datos()

if a ==2:

x.ver_datos()

if a ==3:

x.borrar_datos()

if a ==4:

x.actualizar_tabla()

if a ==5:

exit(1)

con.close()

Segundo Ejercicio

# -*- coding: cp1252 -*-


import requests
import json
import matplotlib.pyplot as plt

cui = ['temuco','arica','osorno','iquique','la serena','vina del mar',"Santiago", "Punta Arenas"]


ciudad ={}

13
for i in range (len(cui)):
r=
requests.get("http://api.openweathermap.org/data/2.5/weather?q="+cui[i]+"&appid=d86b5
13b7df8955972d264cb7690cefd")
data = r.json()
print "------------------------------------------------------------------------"
print "Informe de Clima de "+cui[i]+"\n"
print "Cordenadas : Latitud ->",data["coord"]['lat'], " Longitud ->",data["coord"]['lon']
print "Presión Atmoférica :",data['main']["pressure"]
print "Temperaturas :"
print " |Actual | Minima | Maxima |"
temp = int(data['main']["temp"])- 273.15
temp_max = int(data['main']["temp_max"]) -273.15
temp_min = int(data['main']["temp_min"])-273.15
ciudad[cui[i]]={'temp':int(temp),'temp_min':int(temp_min),'temp_max':int(temp_max)}
print " |"+str(temp)+"° |"+str(temp_max)+"° |"+str(temp_min)+" |"
print "Humedad Relativa del Aire: "+str(data['main']["humidity"])+"%"
temp = 0 ; temp_max =0 ; temp_min=0;
print "Velocidad viento ->",data['wind']["speed"],"m/s"
if cui[i] != 'osorno':
print "Direccion del viento ->",data['wind']["deg"],"grados"
print "------------------------------------------------------------------------"

temperatura=[];temperatura_min=[];temperatura_max=[]
for i in range (len (cui)):
temperatura.append(ciudad[cui[i]]['temp'])
temperatura_min.append(ciudad[cui[i]]['temp_min'])
temperatura_max.append(ciudad[cui[i]]['temp_max'])

14
fig = plt.figure()
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(122)
ax3 = fig.add_subplot(223)

xx = range(len(temperatura))
ax1.bar(xx,temperatura,width=0.6,color=(0,1,0))
ax1.set_xticks(xx)
ax1.set_xticklabels(cui,rotation=100)
ax1.set_ylabel('Temperatura Normal')

ax2.bar(xx,temperatura_min,width=0.6,color=(0,0,1))
ax2.set_xticks(xx)
ax2.set_xticklabels(cui,rotation=100)
ax2.set_ylabel('Temperatura Minima')

ax3.bar(xx,temperatura_max,width=0.5,color=(1,0,0))
ax3.set_xticks(xx)
ax3.set_xticklabels(cui,rotation=100)
ax3.set_ylabel('Temperatura Maxima')
plt.show()
Tercer Ejercicio

# -*- coding: cp1252 -*-


import requests as req
import PIL
import urllib
from bs4 import BeautifulSoup

15
import httplib
from PIL import Image, ImageChops, ImageEnhance, ImageOps ,ImageFile
cont=0
r= req.get("https://www.pexels.com/search/nature/")
soup = BeautifulSoup(r.text,"xml")
divs =soup.find('div',{'class':'photos'}).find_all('img')
url_img=[]
cont_img=0
img_a=""
for a in divs:
cont_img +=1
if cont_img <= 20:
img=a['src']
for letras in img:
if letras == "/":
cont +=1
if cont >2:
img_a = img_a +letras
if letras == '?':
url_img.append(img_a)
cont =0 ; img_a=""
break

for i in range (len(url_img)):


conn = httplib.HTTPConnection("images.pexels.com")
conn.request('GET',url_img[i])
r=conn.getresponse()
f = file ('imagen'+str(i+1)+'.png',"wb")

16
f.write(r.read())
f.close
print "Imagen Numero",i+1,"Descargada"
print "----------------------------------------------------"
for y in range(len(url_img)):
image = Image.open('imagen'+str(y+1)+'.png')
gris = ImageOps.grayscale(image)
gris.save('imagen'+str(y+1)+'_gris.png')
print "Imagen Numero",y+1,"Convertida"

Cuarto Ejercicio

from struct import pack


from math import sin, pi
import wave
import random

RATE=44100

## GENERATE STERIO FILE ##


wv = wave.open('notas.wav', 'w')
wv.setparams((2, 2, RATE, 0, 'NONE', 'not compressed'))
maxVol=10000 #2**15-1.0 #maximum amplitude
wvData="";wvData2="";wvData3="";wvData4="";wvData5="";wvData6="";wvData7=""
for i in range(0, RATE*3):
#do
wvData+=pack('h', maxVol*sin(i*493.88/RATE))
wvData+=pack('h', maxVol*sin(i*261.63/RATE))

17
#re
wvData2+=pack('h', maxVol*sin(i*440.00/RATE))
wvData2+=pack('h', maxVol*sin(i*293.66/RATE))
#mi
wvData3+=pack('h', maxVol*sin(i*392.00/RATE))
wvData3+=pack('h', maxVol*sin(i*329.63/RATE))
#fa
wvData4+=pack('h', maxVol*sin(i*349.23/RATE))
wvData4+=pack('h', maxVol*sin(i*349.23/RATE))
#sol
wvData5+=pack('h', maxVol*sin(i*329.63/RATE))
wvData5+=pack('h', maxVol*sin(i*392.00/RATE))
#la
wvData6+=pack('h', maxVol*sin(i*293.66/RATE))
wvData6+=pack('h', maxVol*sin(i*440.00/RATE))
#si
wvData7+=pack('h', maxVol*sin(i*261.63/RATE))
wvData7+=pack('h', maxVol*sin(i*493.88/RATE))

wv.writeframes(wvData)
wv.writeframes(wvData2)
wv.writeframes(wvData3)
wv.writeframes(wvData4)
wv.writeframes(wvData5)
wv.writeframes(wvData6)
wv.writeframes(wvData7)
wv.close()
wvData="";wvData2="";wvData3="";wvData4="";wvData5="";wvData6="";wvData7=""

18
#### GENERATE MONO FILE ##
wv = wave.open('izq_mono.wav', 'w')
wv.setparams((1, 2, RATE, 0, 'NONE', 'not compressed'))
maxVol=10000 #maximum amplitude
wvData=""
for i in range(0, RATE*3):
wvData+=pack('h', maxVol*sin(i*493.88/RATE))
wvData2+=pack('h', maxVol*sin(i*440.00/RATE))
wvData3+=pack('h', maxVol*sin(i*392.00/RATE))
wvData4+=pack('h', maxVol*sin(i*349.23/RATE))
wvData5+=pack('h', maxVol*sin(i*329.63/RATE))
wvData6+=pack('h', maxVol*sin(i*293.66/RATE))
wvData7+=pack('h', maxVol*sin(i*261.63/RATE))
wv.writeframes(wvData)
wv.writeframes(wvData2)
wv.writeframes(wvData3)
wv.writeframes(wvData4)
wv.writeframes(wvData5)
wv.writeframes(wvData6)
wv.writeframes(wvData7)
wv.close()
wvData="";wvData2="";wvData3="";wvData4="";wvData5="";wvData6="";wvData7=""

#### GENERATE MONO FILE ##


wv = wave.open('der_mono.wav', 'w')
wv.setparams((1, 2, RATE, 0, 'NONE', 'not compressed'))
maxVol=10000 #maximum amplitude
wvData=""

19
for i in range(0, RATE*3):
wvData+=pack('h', maxVol*sin(i*261.63/RATE))
wvData2+=pack('h', maxVol*sin(i*293.66/RATE))
wvData3+=pack('h', maxVol*sin(i*329.63/RATE))
wvData4+=pack('h', maxVol*sin(i*349.23/RATE))
wvData5+=pack('h', maxVol*sin(i*392.00/RATE))
wvData6+=pack('h', maxVol*sin(i*440.00/RATE))
wvData7+=pack('h', maxVol*sin(i*493.88/RATE))
wv.writeframes(wvData)
wv.writeframes(wvData2)
wv.writeframes(wvData3)
wv.writeframes(wvData4)
wv.writeframes(wvData5)
wv.writeframes(wvData6)
wv.writeframes(wvData7)
wv.close()

wvData="";wvData2="";wvData3="";wvData4="";wvData5="";wvData6="";wvData7=""

#### GENERATE MONO FILE ##


wv = wave.open('izq2_mono.wav', 'w')
wv.setparams((1, 2, RATE, 0, 'NONE', 'not compressed'))
maxVol=10000 #maximum amplitude
wvData=""

for i in range(0, RATE*3):


wvData+=pack('h', maxVol*sin(i*493.88/RATE))

20
mute=pack('h', 0*sin(i*261.63/RATE))
wvData2+=pack('h', maxVol*sin(i*440.00/RATE))
wvData3+=pack('h', maxVol*sin(i*392.00/RATE))
wvData4+=pack('h', maxVol*sin(i*349.23/RATE))
wvData5+=pack('h', maxVol*sin(i*329.63/RATE))
wvData6+=pack('h', maxVol*sin(i*293.66/RATE))
wvData7+=pack('h', maxVol*sin(i*261.63/RATE))
wv.writeframes(wvData)
wv.writeframes(mute);wv.writeframes(mute);wv.writeframes(mute)
wv.writeframes(wvData2)
wv.writeframes(mute);wv.writeframes(mute);wv.writeframes(mute)
wv.writeframes(wvData3)
wv.writeframes(mute);wv.writeframes(mute);wv.writeframes(mute)
wv.writeframes(wvData4)
wv.writeframes(mute);wv.writeframes(mute);wv.writeframes(mute)
wv.writeframes(wvData5)
wv.writeframes(mute);wv.writeframes(mute);wv.writeframes(mute)
wv.writeframes(wvData6)
wv.writeframes(mute);wv.writeframes(mute);wv.writeframes(mute)
wv.writeframes(wvData7)

wv.close()
wvData="";wvData2="";wvData3="";wvData4="";wvData5="";wvData6="";wvData7=""

#### GENERATE MONO FILE ##


wv = wave.open('der2_mono.wav', 'w')
wv.setparams((1, 2, RATE, 0, 'NONE', 'not compressed'))

21
maxVol=10000 #maximum amplitude
wvData=""
for i in range(0, RATE*3):
mute=pack('h', 0*sin(i*261.63/RATE))
wvData+=pack('h', maxVol*sin(i*261.63/RATE))
wvData2+=pack('h', maxVol*sin(i*293.66/RATE))
wvData3+=pack('h', maxVol*sin(i*329.63/RATE))
wvData4+=pack('h', maxVol*sin(i*349.23/RATE))
wvData5+=pack('h', maxVol*sin(i*392.00/RATE))
wvData6+=pack('h', maxVol*sin(i*440.00/RATE))
wvData7+=pack('h', maxVol*sin(i*493.88/RATE))
wv.writeframes(wvData)
wv.writeframes(mute);wv.writeframes(mute);wv.writeframes(mute)
wv.writeframes(wvData2)
wv.writeframes(mute);wv.writeframes(mute);wv.writeframes(mute)
wv.writeframes(wvData3)
wv.writeframes(mute);wv.writeframes(mute);wv.writeframes(mute)
wv.writeframes(wvData4)
wv.writeframes(mute);wv.writeframes(mute);wv.writeframes(mute)
wv.writeframes(wvData5)
wv.writeframes(mute);wv.writeframes(mute);wv.writeframes(mute)
wv.writeframes(wvData6)
wv.writeframes(mute);wv.writeframes(mute);wv.writeframes(mute)
wv.writeframes(wvData7)
wv.writeframes(mute);wv.writeframes(mute);wv.writeframes(mute)
wv.close()

22

También podría gustarte