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

Responder a