В настоящее время я использую звездочку для записи звука в файл и использую этот файл для потоковой передачи звука в диалог для определения намерений. Я хочу изменить это на потоковое аудио напрямую, вместо того, чтобы сначала записать его. Я изменил свой сценарий на сценарий EAGI, чтобы аудио было доступно в файловом дескрипторе 3, однако у меня нет опыта работы с файловыми дескрипторами, поэтому я не уверен, как они работают или как я должен изменить свой код, чтобы он работал так, чтобы я мог использовать некоторую помощь Ниже приведен код, который у меня сейчас есть, который использует файл для потоковой передачи аудио в диалоговый поток (с жестко закодированным кодеком).
agi = AGI()
sesionId = agi.get_variable('caller')
channelId = agi.get_variable('channelId')
def detect_intent_audio():
project_id = "fake-219706"
session_id = sesionId
language_code = lang
filename = channelId + "" + sesionId + ".sln16"
audio_file_path = "/var/lib/asterisk/sounds/%(s)s"%{'s':filename}
import dialogflow_v2 as dialogflow
"""Returns the result of detect intent with streaming audio as input.
Using the same `session_id` between requests allows continuation
of the conversaion."""
session_client = dialogflow.SessionsClient()
# Note: hard coding audio_encoding and sample_rate_hertz for simplicity.
audio_encoding = dialogflow.enums.AudioEncoding.AUDIO_ENCODING_LINEAR_16
sample_rate_hertz = 16000
session_path = session_client.session_path(project_id, session_id)
def request_generator(audio_config, audio_file_path):
query_input = dialogflow.types.QueryInput(audio_config=audio_config)
# The first request contains the configuration.
yield dialogflow.types.StreamingDetectIntentRequest(
session=session_path, query_input=query_input)
# Here we are reading small chunks of audio data from a local
# audio file. In practice these chunks should come from
# an audio input device.
with open(audio_file_path, 'rb') as audio_file:
while True:
chunk = audio_file.read(4096)
if not chunk:
break
# The later requests contains audio data.
yield dialogflow.types.StreamingDetectIntentRequest(
input_audio=chunk)
audio_config = dialogflow.types.InputAudioConfig(
audio_encoding=audio_encoding, language_code=language_code,
sample_rate_hertz=sample_rate_hertz)
requests = request_generator(audio_config, audio_file_path)
responses = session_client.streaming_detect_intent(requests)
print('=' * 20)
for response in responses:
print('Intermediate transcript: "{}".'.format(
response.recognition_result.transcript))
agi.verbose("count")
# Note: The result from the last response is the final transcript along
# with the detected content.
query_result = response.query_result
print('=' * 20)
print('Query text: {}'.format(query_result.query_text))
print('Detected intent: {} (confidence: {})\n'.format(
query_result.intent.display_name,
query_result.intent_detection_confidence))
print('Fulfillment text: {}\n'.format(
query_result.fulfillment_text))
return response