1 votos

¿Cómo hace la función de texto a voz del grabador de voz de Samsung para almacenar el texto y sincronizarlo con el audio?

Estoy usando Samsung Galaxy S7 y recientemente, utilicé la función de texto a voz en la aplicación Grabadora de Voz predeterminada. Cuando reproduzco uno de los archivos de audio que fue grabado con esa función, la aplicación es capaz de mostrar el texto sincronizado con el audio. Vi que el texto estaba almacenado en otro archivo de texto junto con el archivo de audio, pero era solo el texto en bruto. Estoy tratando de averiguar cómo funciona esto.

¿Esta información para sincronizar el texto y el audio está almacenada en el archivo de audio? En este caso, todas las grabaciones son solo en archivos M4A. Por lo tanto, intenté buscar qué tipo de información pueden almacenar los archivos M4A, como si pueden almacenar subtítulos porque parecería que podrían ser subtítulos los que permiten esta sincronización. Sin embargo, no puedo encontrar ninguna información al respecto. O también podría ser que la aplicación simplemente tenga esta información almacenada en algún tipo de almacenamiento o caché, lo que significaría que si trasladara los archivos a mi computadora, no habría ningún texto sincronizado con el audio.

2voto

Moses373 Puntos 31

Supongo que he encontrado la respuesta después de buscar dentro de los archivos M4A mismos. El texto y los timestamps, si no me equivoco, están almacenados en los archivos M4A.

Revisé los datos binarios del archivo usando un editor hexadecimal y simplemente la aplicación Notepad normal en Windows y encontré todo el texto dentro de una ubicación y parece que se usó Java. Supongo que esta es solo una función diseñada particularmente para la aplicación Samsung Voice Recorder.

Se muestra un ejemplo aquí (con algunas partes y la mayoría de los caracteres extraños eliminados):

;com.sec.android.app.voicenote.common.util.VoiceRecorderData 
mCategoryNamet Ljava/lang/String;L  mEffectNameq ~  java.util.ArrayListx sizexp 2com.sec.android.app.voicenote.common.util.TextData ConfidenceScoreI dataTypeJ durationJ  elapsedTimeJ   timeStamp[ mTextt [Ljava/lang/String; [Ljava.lang.String;{
t The pppppppppsq ~ 
t 
recording pppppppppsq ~ 
t to pppppppppsq ~

0voto

stefan judis Puntos 101

Aquí hay una función de Python que extrae el texto de un camino de archivo .m4a dado:

from codecs import decode

def extract_text_from_audio_data(audio_path):
    with open(audio_path, 'rb') as f:
        binary_data = f.read()
        utf8_data = decode(binary_data, 'utf-8', errors='ignore')
    index_start = utf8_data.index('Ljava.lang.String')
    index_end = utf8_data.index('com.android.version')
    substring = utf8_data[index_start:index_end]
    lines = substring.split('q\x00~')
    pattern_end = ' pppppp'
    pttrn_start = '\n'
    tokens = [l[:(l.index(pattern_end))] for l in lines if pattern_end in l]
    words = [t[t.index(pttrn_start)+4:] for t in tokens]
    phrase = ' '.join(words) + '.'
    return phrase

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X