Tous les produits
Search
Centre de documentation

Alibaba Cloud Model Studio:Lecture audio personnalisée

Dernière mise à jour :Sep 07, 2026

Le SDK client AOQ prend en charge la lecture audio personnalisée. Le mécanisme de callback de trames audio transmet les données PCM décodées à la couche applicative, vous permettant ainsi d'implémenter votre propre logique de rendu audio.

Présentation

Par défaut, le SDK client AOQ diffuse les données audio distantes reçues via le haut-parleur ou l'écouteur du système. Dans certains cas, le module de lecture audio intégré au SDK peut ne pas répondre à vos besoins. La lecture audio personnalisée s'avère utile lorsque vous devez :

  • Diriger les données audio reçues vers un périphérique de lecture spécifique ou un pipeline de traitement audio.
  • Post-traiter les données audio reçues, par exemple pour la reconnaissance vocale par IA ou l'application d'effets sonores.
  • Contourner des conflits liés aux périphériques de lecture audio.

Le SDK client AOQ offre une prise en charge flexible de la lecture personnalisée. Le mécanisme de callback de trames audio fournit les données PCM décodées à la couche applicative pour leur rendu et leur diffusion.

Exemple de code

Bientôt disponible.

Prérequis

  • Vous avez créé une instance de moteur en appelant createEngine.
  • La connexion au serveur est établie (le callback onConnectionStatusChange a signalé l'état AoqConnectionStatusConnected).

Mise en œuvre

1. Démarrer la lecture audio en mode externe

Lors de l'appel à startAudioPlayer, définissez isExternal=true pour désactiver le périphérique de rendu audio interne du SDK. La couche applicative assure alors la lecture audio.

AoqClientEngine.AoqAudioPlaybackConfig config = new AoqClientEngine.AoqAudioPlaybackConfig();
config.isExternal = true;  // Disable SDK internal playback; application layer renders audio
config.channel = 1;        // Number of channels
engine.startAudioPlayer(config);
Paramètres :

Paramètre

Type

Valeur par défaut

Description

isVoipMode

boolean

false

Active ou non le mode VoIP (AEC matériel). Valable sur mobile.

isDefaultSpeaker

boolean

true

Définit si le haut-parleur est utilisé par défaut. Valable sur mobile.

isExternal

boolean

false

Indique si le mode de lecture externe est activé. Si vrai, le SDK n'ouvre pas le périphérique de lecture.

channel

int

1

Nombre de canaux

2. Configurer l'écouteur de callback de trames audio

Appelez setAudioFrameObserver pour enregistrer l'écouteur de callback des données de trames audio. Implémentez la méthode de callback onPlaybackAudioFrame pour recevoir les données PCM de lecture.

engine.setAudioFrameObserver(new AoqClientListener.AoqAudioFrameListener() {
    @Override
    public void onPlaybackAudioFrame(@NonNull AoqClientEngine.AoqAudioFrameData frame) {
        // Process the received playback audio data here
        // frame.dataPtr: PCM data
        // frame.numOfSamples: number of samples
        // frame.numOfChannels: number of channels
        // frame.samplesPerSec: sample rate
        // frame.bytesPerSample: bytes per sample
        playPcmData(frame);
    }
});

3. Activer les callbacks de données de lecture

Appelez enableAudioFrameObserver pour activer les callbacks de trames audio au niveau de la position de lecture. Spécifiez AoqAudioSourcePlayback comme source de données.

AoqClientEngine.AoqAudioObserverConfig observerConfig = new AoqClientEngine.AoqAudioObserverConfig();
observerConfig.sampleRate = 48000;  // Callback audio sample rate
observerConfig.channels = 1;       // Callback audio channel count
observerConfig.mode = AoqClientEngine.AoqAudioObserverMode.AoqAudioObserverModeReadOnly; // Read-only mode

engine.enableAudioFrameObserver(
    true,  // Enable callbacks
    AoqClientEngine.AoqAudioSource.AoqAudioSourcePlayback,  // Playback data source
    observerConfig
);
Paramètres :

Paramètre

Type

Valeur par défaut

Description

sampleRate

int

48000

Taux d'échantillonnage audio du callback (Hz)

channels

int

1

Nombre de canaux audio du callback

mode

AoqAudioObserverMode

AoqAudioObserverModeReadOnly

Mode lecture/écriture

4. Implémenter le rendu audio personnalisé

Lorsque des données PCM arrivent dans le callback onPlaybackAudioFrame, la couche applicative gère le rendu et la lecture. Les approches courantes incluent :

  • Android AudioTrack : Écrire les données PCM sur le périphérique audio système via AudioTrack.
  • Reconnaissance vocale par IA : Transmettre les données PCM à un moteur ASR pour la reconnaissance vocale.
  • Effets audio : Appliquer des effets sonores aux données PCM avant leur diffusion.
  • Stockage sur fichier : Enregistrer les données audio reçues dans un fichier local.
// Example: Playback using Android AudioTrack
private AudioTrack mAudioTrack;
private volatile boolean mPlayRunning = false;

private void initAudioTrack(int sampleRate, int channels) {
    int channelConfig = (channels == 2)
        ? AudioFormat.CHANNEL_OUT_STEREO
        : AudioFormat.CHANNEL_OUT_MONO;
    int bufferSize = AudioTrack.getMinBufferSize(
        sampleRate, channelConfig, AudioFormat.ENCODING_PCM_16BIT);

    mAudioTrack = new AudioTrack(
        AudioManager.STREAM_VOICE_CALL,
        sampleRate,
        channelConfig,
        AudioFormat.ENCODING_PCM_16BIT,
        bufferSize,
        AudioTrack.MODE_STREAM);
    mAudioTrack.play();
    mPlayRunning = true;
}

private void playPcmData(AoqClientEngine.AoqAudioFrameData frame) {
    if (!mPlayRunning || mAudioTrack == null) {
        return;
    }
    if (frame.dataPtr != null && frame.dataSize > 0) {
        mAudioTrack.write(frame.dataPtr, 0, frame.dataSize);
    }
}
Remarques importantes :
  • Le callback onPlaybackAudioFrame s'exécute sur un thread interne du SDK. Le pointeur frame.dataPtr n'est valide que pendant la durée du callback. Pour une utilisation asynchrone des données, copiez-les d'abord.
  • L'opération AudioTrack.write est bloquante. L'écriture directe dans le callback est acceptable car le SDK délivre les callbacks à un rythme contrôlé.
  • Maintenez le drapeau mPlayRunning afin d'interrompre le traitement lors de l'arrêt du moteur ou de la lecture.

5. Arrêter la lecture personnalisée

Si la lecture personnalisée n'est plus nécessaire, désactivez d'abord le callback de trames audio, puis arrêtez le périphérique de lecture et libérez les ressources AudioTrack.

// 1. Disable audio frame callbacks at the playback position
AoqClientEngine.AoqAudioObserverConfig observerConfig = new AoqClientEngine.AoqAudioObserverConfig();
engine.enableAudioFrameObserver(
    false,  // Disable callbacks
    AoqClientEngine.AoqAudioSource.AoqAudioSourcePlayback,
    observerConfig
);

// 2. Remove the audio frame callback listener
engine.setAudioFrameObserver(null);

// 3. Stop SDK audio playback
engine.stopAudioPlayer();

// 4. Release AudioTrack resources
mPlayRunning = false;
if (mAudioTrack != null) {
    mAudioTrack.stop();
    mAudioTrack.release();
    mAudioTrack = null;
}