Código de Python - Selector/Reproductor de archivos de audio, por comandos de voz.

Imágen de perfil
Val: 712
Bronce
Ha aumentado 1 puesto en Python (en relación al último mes)
Gráfica de Python

Selector/Reproductor de archivos de audio, por comandos de voz.gráfica de visualizaciones


Python

Actualizado el 1 de Enero del 2021 por Antonio (59 códigos) (Publicado el 9 de Noviembre del 2020)
1.599 visualizaciones desde el 9 de Noviembre del 2020
El presente código, permite al usuario, reproducir un archivo de audio (en formato ".wav"), escogiéndolo de una lista. A su vez, el programa se comunicará al usuario tanto a través de mensajes de texto como por mensajes de voz.
El programa se inicia, pidiendo el ingreso de la ruta al directorio en el que se encuentran los audios. Tras ello el usuario usará los comandos de voz para realizar las siguientes acciones:
COMANDOS PRINCIPALES:
"lista": Muestra la lista, numerada de archivos de audio, presentes en la carpeta indicada. Para reproducir uno de los archivos el usuario dirá en voz alta el número correspondiente al audio deseado (Este procedimiento también se seguirá para cambiar de micrófono).
"para": Finaliza la reproducción en curso de un audio.
"cambia micrófono": Despliega un listado con los micrófonos disponibles, para su selección numérica.
"comandos": Muestra la lista de comandos principales.
"fin": Finaliza la ejecución del programa.


imam
mas2

Requerimientos

Lenguaje: Python
Librerías y recursos: glob, speech_recognition, sounddevice, soundfile, pyttsx3, os,pickle

1.2

Actualizado el 29 de Enero del 2021 (Publicado el 9 de Noviembre del 2020)gráfica de visualizaciones de la versión: 1.2
1.600 visualizaciones desde el 9 de Noviembre del 2020
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import glob
import speech_recognition as sr
import sounddevice as sd
import soundfile as sf
import os
import pyttsx3
import pickle
 
if not 'directorios' in os.listdir():
    fichero = open('directorios','wb')
    pickle.dump([],fichero)
    fichero.close()
 
lista_temas = []
direc = pickle.load(open('directorios','rb'))
nums = {'cero':0,'uno':1,'dos':2,'tres':3,'cuatro':4,'cinco':5,'seis':6,'siete':7,'ocho':8,'nueve':9,
        'diez':10,'once':11,'doce':12,'trece':13,'catorce':14,'quince':15}
 
def async_playback(filename):
    data, fs = sf.read(filename)
    sd.play(data,fs)
    return data, fs
 
def cambia_microfono():
    sd.stop()###################################################################################
    num_micros = len(sr.Microphone.list_microphone_names())
    while True:
        print("\n****************************MICROFONOS DISPONIBLES****************************")
        for i in enumerate(sr.Microphone.list_microphone_names()):
            print(i)
        print("******************************************************************************\n")
        speaker("DIGA EN ALTO EL NÚMERO CORRESPONDIENTE AL MICRÓFONO DESEADO.",1)
        opcionn = listening()
        if opcionn == 'salir':
            speaker("PROCESO DE SELECCIÓN CANCELADO.",1)
            break
        else:
            try:
                if opcionn in nums:
                    opcion = nums[opcionn]
                else:
                    opcion = int(opcionn)
                if opcion >= 0 and opcion <= num_micros-1:
                    sd.default.device=opcion
                    print("\nINDICE MICRÓFONO: ",opcion)
                    speaker("nuevo microfono establecido correctamente",0)
                    break
                else:
                    speaker("INDICE FUERA DE RANGO",1)
            except Exception as e:
                print(str(e))
 
 
def listening():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("Say something:")
        r.adjust_for_ambient_noise(source)
        r.energy_threshold=300#10050
 
        audio = r.listen(source)
        try:
            text = r.recognize_google(audio,language='es-ES')
            print("TEXTO: ",text)
            return text
        except:
            print("Sin entrada")
            pass
 
def select_audio():
    while True:
        opcionn = listening()
        if opcionn == "lista":
            while True:
                print("\n********************LISTA DE AUDIOS********************")
                for elem,tema in enumerate(lista_temas):
                    print(elem,tema)
                print("*******************************************************\n")
                texto = "DIGA EN VOZ ALTA EL NÚMERO CORRESPONDIENTE AL AUDIO DESEADO."
                speaker(texto,1)
 
                opcionn = listening()
 
                if opcionn != "salir" and opcionn != "finalizar":
                    if opcionn == "comandos":
                        comandos()
                    else:
                        if opcionn in nums:
                            eleccion = nums[opcionn]
                        else:
                            eleccion = opcionn
 
                        print(type(eleccion))
                        try:
                            tema = int(eleccion)
                            assert tema in range(len(lista_temas))
                            audio_selec = lista_temas[tema]
                            print("AUDIO SELECCIONADO: {}".format(audio_selec))
                            async_playback(audio_selec)
                            break
                        except Exception as e:
                            print(str(e))
                            list_inn = False
                            speaker("NO SE PUDO PROCESAR LA SOLICITUD.",1)
                else:
                    if opcionn == "salir":
                        speaker("PROCESO DE SELECCIÓN CANCELADO.",1)
                    break
 
        if opcionn == 'para':
            list_inn = False
            sd.stop()
            print('STOPPED')
            speaker("audio interrumpido",0)
        if opcionn == 'finalizar':
            sd.stop()
            speaker("programa finalizado, hasta pronto",0)
            break
        if opcionn == 'cambia micrófono':
            cambia_microfono()
        if opcionn == 'comandos':
            comandos()
        if opcionn == 'colecciones':
            change_dir()
 
def speaker(content,v):
    engine.say(content)
    if v == 1:
        print(content)
    engine.runAndWait()
    engine.stop()
 
def validate_num(value):
    if value in nums:
        return nums[value]
    else:
        return value
 
def change_dir():
    global lista_temas
    sd.stop()
    while True:
        print("\n****************************COLECCIONES****************************")
        for elem,di in enumerate(direc):
            print(elem,di)
        print("*******************************************************************\n")
 
        speaker("DIGA EN VOZ ALTA EL NÚMERO CORRESPONDIENTE AL DIRECTORIO DESEADO.",1)
        opcionn = listening()
        if opcionn != 'salir':
            try:
                num = validate_num(opcionn)
                os.chdir(direc[int(num)])
                lista_temas = []
                collect()
                speaker("DIRECTORIO ESTABLECIDO CORRECTAMENTE.",1)
                print("\nCARPETA: ",os.getcwd())
                break
            except:
                speaker("NO SE PUDO PROCESAR LA SOLICITUD.",1)
        else:
            speaker("PROCESO DE SELECCIÓN CANCELADO.",1)
            break
 
def comandos():
    print("\n********************COMANDOS DE VOZ********************")
    print("'lista'-------------------------MUESTRA LISTA DE AUDIOS")
    print("'para'------------------FINALIZA REPRODUCCIÓN DEL AUDIO")
    print("'finalizar'------------------------FINALIZA EL PROGRAMA")
    print("'cambia micrófono'--------------------CAMBIAR MICROFONO")
    print("'comandos'----------------------MUESTRA COMANDOS DE VOZ")
    print("'colecciones'-----------------CAMBIAR CARPETA DE AUDIOS")
    print("'salir'-------------------CANCELAR PROCESO DE SELECCIÓN")
    print("********************************************************\n")
 
def collect():
    for i in glob.glob("*.wav"):
        lista_temas.append(i)
    if len(lista_temas) == 0:
        print("CARPETA VACÍA\n")
        speaker("la carpeta seleccionada no contiene archivos válidos",0)
 
def enter_dir(changed):
    new_dir = input("INTRODUZCA DIRECTORIO: ")
    if not new_dir in direc:
        if os.path.isdir(new_dir):
            direc.append(new_dir)
            pickle.dump(direc,open("directorios","wb"))
            os.chdir(new_dir)
            collect()
            speaker("DIRECTORIO ESTABLECIDO CORRECTAMENTE.",1)
            print("\nCARPETA: ",os.getcwd())
            changed=True
        else:
            speaker("EL DIRECTORIO NO EXISTE.",1)
    else:
        speaker("EL DIRECTORIO YA SE ENCUENTRA GUARDADO.",1)
    return changed
 
 
 
#sd.default.device=9 #CAMBIAR DISPOSITIVO DE "ENTRADA/SALIDA"
 
engine = pyttsx3.init()
engine.setProperty('rate',160)
 
while True:
    #comandos()
 
    print("\n****************************COLECCIONES****************************")
    for elem,di in enumerate(direc):
        if os.path.isdir(di):
            print(elem,di)
    print("*******************************************************************\n")
 
    if len(direc)>0:
        speaker('''DIGA EN VOZ ALTA EL NÚMERO CORRESPONDIENTE AL DIRECTORIO DESEADO,
'NUEVO' PARA AÑADIR UNO NUEVO O 'ELIMINAR' PARA BORRARLO''',1)
        opcionn = listening()
 
        if opcionn == 'nuevo':
            speaker("introduzca nuevo directorio",0)
            chang = enter_dir(changed=False)
            if chang == True:
                break
 
        elif opcionn == 'eliminar':
            speaker("DIGA EN VOZ ALTA EL NÚMERO CORRESPONDIENTE A LA COLECCIÓN A ELIMINAR.",1)
            num = listening()
            numero = validate_num(num)
            if str(numero).isdigit():
                try:
                    direc.remove(direc[int(numero)])
                    print(direc)
                    pickle.dump(direc,open("directorios","wb"))
                    speaker("COLECCIÓN ELIMINADA SATISFACTORIAMENTE.",1)
                except Exception as e:
                    print(str(e))
                    speaker("no se pudo realizar la acción",0)
            else:
                speaker("NO SE PUDO PROCESAR LA SOLICITUD.",1)
 
        else:
            numero = validate_num(opcionn)
            if str(numero).isdigit() and len(direc)>0:
                try:
                    new_dir = direc[int(numero)]
                    os.chdir(new_dir)
                    collect()
                    speaker("DIRECTORIO ESTABLECIDO CORRECTAMENTE.",1)
                    print("\nCARPETA: ",os.getcwd())
                    break
                except Exception as e:
                    print(str(e))
                    speaker("NO SE PUDO PROCESAR LA SOLICITUD.",1)
    else:
        speaker("INTRODUZCA RUTA A LA COLECCIÓN.",1)
        chang = enter_dir(changed=False)
        if chang == True:
            break
 
comandos()
select_audio()



Comentarios sobre la versión: 1.2 (0)


No hay comentarios
 

Comentar la versión: 1.2

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s6715