Skip to content

Estado de Audio Marker y resultados de actividad

Desde Android 5.0.10, iOS 5.0.9 y Flutter 0.3.5 para Android/iOS, el SDK gestiona el estado actual de Audio Marker y su asociación con las actividades reconocidas. Active el reconocimiento de Audio Marker si su aplicación de SORI Console lo utiliza; sigue desactivado de forma predeterminada.

Instalar o actualizar

Mostrar el marcador actual

Muestre el estado que entrega el SDK. Distingue entre reconocimiento inactivo, escucha, marcador detectado con identidad pendiente, marcador identificado y estado borrado. Solo el estado identificado incluye el ID y el nombre de Audio Marker resueltos por SORI Console. Una detección sin identificar no debe reutilizar el nombre del marcador anterior.

El SDK puede conservar evidencia válida del marcador hasta cuatro segundos sin una nueva detección, pero esto no garantiza que se muestre durante cuatro segundos. Las detecciones fallidas consecutivas, el nivel de entrada bajo (low RMS), el silencio, otro marcador sin identificar o la detención o el reinicio del reconocimiento pueden borrar o invalidar el estado. Lea la instantánea (snapshot) actual o vuelva a suscribirse al reconectar la interfaz. Leer una instantánea o recibir una respuesta tardía no reinicia el periodo de conservación. La aplicación no necesita su propio temporizador de caducidad.

Actualizar la actividad correspondiente

Mientras la evidencia del marcador siga siendo válida, el SDK enriquece las solicitudes posteriores de reconocimiento de material mediante el atributo del marcador (trait.marker). Si primero se reconoce el material y después se identifica su marcador, el SDK puede actualizar esa misma actividad sin otra coincidencia de material. El SDK gestiona la asociación y la actualización del servidor; la aplicación no necesita construir atributos de marcador ni enviar sus propias solicitudes de actualización.

  • Inserte o actualice un resultado con el ID exacto de actividad que proporciona el SDK, incluso cuando llegue una actualización tardía de un resultado anterior. No asigne el marcador del encabezado actual al resultado más reciente.
  • Conserve la hora de reconocimiento original, la posición y el orden de las filas al aplicar el enriquecimiento.
  • Borrar el marcador actual no elimina un marcador ya aceptado para una actividad histórica. Un resultado tardío tampoco vuelve a convertir ese marcador en el actual.
  • Un resultado de actividad puede no incluir una campaña. Muestre los campos de identidad y marcador disponibles sin asumir que existe una campaña.

Android

Referencia de la API pública de Android 5.0.12

Extienda SORIListener y use onAudioMarkerStateChanged y onActivityResult. La instantánea actual está disponible en sori.audioMarkerState (getAudioMarkerState() en Java). Si implementa ISORIListener directamente, implemente también las interfaces opcionales ISORIAudioMarkerStateListener e ISORIActivityResultListener para recibir estos callbacks.

kotlin
import android.util.Log
import com.iplateia.sorisdk.SORIAudioMarkerState
import com.iplateia.sorisdk.SORIActivityResult
import com.iplateia.sorisdk.SORIListener
import com.iplateia.sorisdk.SORIConfig

sori.setConfig(SORIConfig(audiomarker = true))
sori.setListener(this, object : SORIListener() {
    override fun onAudioMarkerStateChanged(state: SORIAudioMarkerState) {
        // Render the current state; marker is null until identified.
        Log.d("SORI", "${state.status}: ${state.marker?.name}")
    }

    override fun onActivityResult(result: SORIActivityResult) {
        // Insert or update the row identified by result.activityId.
        Log.d("SORI", "${result.activityId}: ${result.audioMarker?.name}")
    }
})
val current = sori.audioMarkerState

iOS

Después de configurar el reconocedor, asigne audioMarkerStateHandler y activityResultHandler. Lea currentAudioMarkerState cuando necesite una instantánea. Use referencias débiles si los handlers hacen referencia al controlador de vista.

swift
recognizer.audiomarker = true
recognizer.audioMarkerStateHandler = { snapshot in
    // Render the current state; audioMarker is nil until identified.
    print(snapshot.state, snapshot.audioMarker?.name ?? "")
}
recognizer.activityResultHandler = { result in
    // Insert or update the row identified by result.activityID.
    print(result.activityID, result.audioMarker?.name ?? "")
}
let current = recognizer.currentAudioMarkerState

Flutter

En Android e iOS, use audioMarkerStateChanged, activityResult y getCurrentAudioMarkerState(). SORIRecognitionState aplica los eventos del SDK y conserva los resultados por ID de actividad; la aplicación puede mostrar currentAudioMarker y activities.

dart
await recognizer.configure(
  config: const SORIRecognitionConfig(audiomarker: true),
);

final markerView = SORIRecognitionState();
final markerSubscription = recognizer.events.listen((event) {
  if (markerView.accept(event)) {
    // Rebuild your UI from markerView.currentAudioMarker and
    // markerView.activities. Each result keeps its own activityId.
  }
});

final current = await recognizer.getCurrentAudioMarkerState();
if (current != null && markerView.acceptAudioMarkerState(current)) {
  // Rebuild the current-marker UI from markerView.currentAudioMarker.
}

Cancele markerSubscription al liberar su interfaz. Conserve el listener de campañas existente como alternativa para servidores antiguos que omitan los ID de actividad.

Compatibilidad

Los flujos existentes de inicio y detención y los callbacks de campaña y descubrimiento siguen disponibles. Para una nueva interfaz del marcador actual, use la API de estado anterior: un callback de descubrimiento no es una notificación de caducidad. Los servidores antiguos que omiten el ID de actividad siguen admitiendo los callbacks de campaña existentes, pero no pueden proporcionar el nuevo resultado de actividad con ID exacto.

Flutter Web conserva su comportamiento de reconocimiento y eventos. El nuevo estado actual nativo, la caducidad y la actualización independiente de marcadores tardíos se aplican a Android/iOS. getCurrentAudioMarkerState() devuelve null en Web; no lo interprete como prueba de que no se ha detectado un marcador.