No puedo, los ficheros los genera Asterisk y no voy a estar tocando el código para eso.
He probado añadiendo un delay de 250ms al inicio de la lectura, para darle tiempo a que haga un flush a disco, pero tampoco me vá. En realidad lo que me mosquea, es que un ejemplo que tengo en Node.js y que hace exactamente lo mismo, funciona perfectamente, pero el código de python se me queda en el for response in responses: ... osea, no llega nunca a recibir respuesta de GCS o el generador del read_in_chunks no está resolviendo o algo raro. Ahora lo estoy intentando con ARI, porque llevo días intentandolo con un script en python que ejecutaba desde el EAGI y tampoco había forma, o escuchaba el stream de audio y lo interpretaba o reproducía una locución del IVR, pero no ambas cosas al mismo tiempo y hacerlo vía threads, se me complicaba la cosa, hacerlo vía multiprocess y pipes, tenía el problema de que tenía que estar leyendo desde el proceso hijo el FD 3 del proceso padre, un coñazo. Si ha alguien se le ocurre como resolver esto ... estoy abierto a ideas. > De: "Daπid" <davidmen...@gmail.com> > Para: "python-es" <python-es@python.org> > Enviados: Jueves, 4 de Julio 2019 11:57:11 > Asunto: Re: [Python-es] Leer fichero al mismo tiempo que se está escribiendo > por > otro proceso. > Creo que has encontrado la solución, pero la has puesto en el lugar > equivocado. > #audio_file = io.open(stream_file+'.sln16','rb',buffering=0) > El proceso que está escribiendo al archivo está probablemente usando un > buffer, > lo que quiere decir que sólo escribe al disco duro de vez en cuando, cuando > haya acumulado una cierta cantidad de datos. Si tienes acceso al programa que > escribe el archivo, tienes que o bien desactivar el buffer (¡cuidado con el > rendimiento!), usar uno más pequeño, o vaciarlo explícitamente con un flush() > más a menudo. > On Thu, 4 Jul 2019 at 12:28, Raúl Alexis Betancor Santana < [ > mailto:r...@dimension-virtual.com | r...@dimension-virtual.com ] > wrote: >> Buenas, estoy intentando hechar a andar el Google Cloud Speech, he intento >> leer >> en stream de un fichero que está siendo escrito por otro proceso, que >> contiene >> la grabación del audio, para enviarla al GCS, pero sin éxito. >> ¿Alguien me puede comentar que estoy haciendo mal?, con el ejemplo que da GCS >> para hacer lo mismo con un fichero directamente, que lo que hace es leerlo >> completo en memoria y enviarlo, no me da problemas y transcribe bien el >> texto. >> Basandome en el código de ejemplo de GCS para streaming >> def read_in_chunks(file_object,chunk_size): >> """Lazy function (generator) to read a file piece by piece. >> while True: >> chunk = file_object.read(chunk_size) >> if not chunk: >> return >> data = [chunk] >> yield b''.join(data) >> def transcribe_streaming(stream_file,language,timeout): >> """Streams transcription of the given audio file.""" >> from google.cloud import speech >> from google.cloud.speech import enums >> from google.cloud.speech import types >> import io >> client = speech.SpeechClient() >> #audio_file = io.open(stream_file+'.sln16','rb',buffering=0) >> audio_file = io.open(stream_file+'.sln16','rb') >> # In practice, stream should be a generator yielding chunks of audio data. >> requests = (types.StreamingRecognizeRequest(audio_content=chunk) >> for chunk in read_in_chunks(audio_file,3200)) >> config = types.RecognitionConfig( >> encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16, >> sample_rate_hertz=16000, >> language_code=language) >> #streaming_config = >> types.StreamingRecognitionConfig(config=config,single_utterance=True) >> streaming_config = types.StreamingRecognitionConfig(config=config) >> # streaming_recognize returns a generator. >> responses = client.streaming_recognize(streaming_config, requests) >> for response in responses: >> # Once the transcription has settled, the first result will contain the >> # is_final result. The other results will be for subsequent portions of >> # the audio. >> for result in response.results: >> if result.is_final: >> print('Finished: {}'.format(result.is_final)) >> print('Stability: {}'.format(result.stability)) >> alternatives = result.alternatives >> ### The alternatives are ordered from most likely to least. >> for alternative in alternatives: >> print('Confidence: {}'.format(alternative.confidence)) >> print(u'Transcript: {}'.format(alternative.transcript)) >> (null) >> _______________________________________________ >> Python-es mailing list >> [ mailto:Python-es@python.org | Python-es@python.org ] >> [ https://mail.python.org/mailman/listinfo/python-es | >> https://mail.python.org/mailman/listinfo/python-es ] > _______________________________________________ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es