Я создаю чат-приложение Streamlit с возможностью записи звука с помощью audiorecorder. Я столкнулся с проблемой, из-за которой мой код обработки звука запускается при каждом изменении состояния или взаимодействии, даже если новый звук не записывается. Код:
from audiorecorder import audiorecorder
import streamlit as st
from langchain_core.messages import AIMessage, HumanMessage
from src.speech2text import speech2text
import os
# Initialize chat history
if "chat_history" not in st.session_state:
st.session_state.chat_history = [
AIMessage(content="Initial message"),
]
# User input methods
user_query = st.chat_input("Ask a question...")
audio = audiorecorder(start_prompt="", stop_prompt="", pause_prompt="", show_visualizer=False)
# Process user input
if user_query or len(audio) > 0:
if len(audio) > 0: # This condition triggers on every Streamlit rerun
audio.export("audio_query.wav", format="wav")
with st.chat_message("Human"):
transcribed_text = speech2text("audio_query.wav")
st.session_state.chat_history.append(HumanMessage(content=transcribed_text))
user_query = transcribed_text
os.remove("audio_query.wav")
elif user_query:
st.session_state.chat_history.append(HumanMessage(content=user_query))
else:
st.stop()
with st.chat_message("AI"):
response_container = st.empty()
response_text = ""
try:
with st.spinner("Generating response..."):
full_response, chunks, urls = rag(user_query, llm_choice, api_key)
with st.spinner("Generating audio..."):
audio_file = text2speech(remove_emojis(full_response),
filename="audio_response.mp3")
if audio_file:
autoplay_audio("audio_response.mp3")
Проблема:
Каждый раз, когда я взаимодействую с каким-либо элементом в своем приложении Streamlit ( нажатие кнопок, отправка отзыва и т. д.), проверка if len(audio) > 0 запускается снова
Это приводит к ненужной обработке звука и операциям с файлами
Обработка звука должна выполняться только при фактической записи нового звука.
Ожидаемое поведение:
Обработка звука должна запускаться только при появлении нового аудио. фактически записано.
Другие взаимодействия с приложением не должны запускать логику обработки звука.
Что я Пробовал:
Использование состояния сеанса для отслеживания статус аудио (но не уверен в правильности подхода)
Похоже, проблема связана с реактивным поведением повторного запуска Streamlit
< strong>Вопрос:
Как я могу изменить свой код, чтобы он обрабатывал звук только при фактической записи нового звука?
Как правильно обеспечить сохранение состояния звука в Streamlit?
Я создаю чат-приложение Streamlit с возможностью записи звука с помощью audiorecorder. Я столкнулся с проблемой, из-за которой мой код обработки звука запускается при каждом изменении состояния или взаимодействии, даже если новый звук не записывается. [b]Код:[/b] [code]from audiorecorder import audiorecorder import streamlit as st from langchain_core.messages import AIMessage, HumanMessage from src.speech2text import speech2text import os
# Initialize chat history if "chat_history" not in st.session_state: st.session_state.chat_history = [ AIMessage(content="Initial message"), ]
# User input methods user_query = st.chat_input("Ask a question...") audio = audiorecorder(start_prompt="", stop_prompt="", pause_prompt="", show_visualizer=False)
# Process user input if user_query or len(audio) > 0: if len(audio) > 0: # This condition triggers on every Streamlit rerun audio.export("audio_query.wav", format="wav") with st.chat_message("Human"): transcribed_text = speech2text("audio_query.wav") st.session_state.chat_history.append(HumanMessage(content=transcribed_text)) user_query = transcribed_text os.remove("audio_query.wav")
with st.spinner("Generating audio..."): audio_file = text2speech(remove_emojis(full_response), filename="audio_response.mp3") if audio_file: autoplay_audio("audio_response.mp3") [/code] [b]Проблема:[/b] [list] [*]Каждый раз, когда я взаимодействую с каким-либо элементом в своем приложении Streamlit ( нажатие кнопок, отправка отзыва и т. д.), проверка if len(audio) > 0 запускается снова [*]Это приводит к ненужной обработке звука и операциям с файлами [*]Обработка звука должна выполняться только при фактической записи нового звука. [/list] [b]Ожидаемое поведение:[/b] [list] [*]Обработка звука должна запускаться только при появлении нового аудио. фактически записано. [*]Другие взаимодействия с приложением не должны запускать логику обработки звука. [/list] [b]Что я Пробовал:[/b] [list] [*]Использование состояния сеанса для отслеживания статус аудио (но не уверен в правильности подхода) [*]Похоже, проблема связана с реактивным поведением повторного запуска Streamlit [/list] < strong>Вопрос: [list] [*]Как я могу изменить свой код, чтобы он обрабатывал звук только при фактической записи нового звука? [*]Как правильно обеспечить сохранение состояния звука в Streamlit? [/list] Будем благодарны за любую помощь!
const = useState(); const = useState(); константный обратный вызов = асинхронный () => { const res = ожидание api_call() set_a(res.data.a); // А set_b(res.data.b); // Б } Будет ли указанный выше компонент выполнять повторную отрисовку сразу после...
Я работаю над функциональностью, которую можно будет подключить к веб-видеоплееру, в данном случае JW Player, где пользователь выбирает язык, и звук будет обрабатываться с помощью моего специального API перевода 1.) Преобразование речи в текст и 2.)...
Мне нужно распознавание речи, поэтому API речи Java кажется довольно хорошим решением моей проблемы с поиском подходящего API. Я попробовал API Sphinx-4, но не смог найти никаких JAR-файлов в загруженном мной пакете PreAlpha.zip. Я смог найти только...