2017-10-17 2 views
0

La fonction opus_encode nécessite une taille de trame en tant que paramètre. dans api doc, il est dit que la taille du tampon est le nombre d'échantillons par canal. Mais comment déterminer quelle taille dois-je utiliser? J'utilise opus dans android. taux d'échantillonnage 16k, taille de la mémoire tampon 1280. lorsque je définis la taille de trame à 640 en codage et décodage, la longueur du fichier décodé est la moitié de pcm brut. quand je mets à 960, le fichier décodé est 2/3 de pcm brut. mais réglé sur 1280, encoder retournera -1 comme erreur d'argument.Comment confirmer la taille du tampon d'encodage d'opus?

Lorsque j'utilise cool edit pour jouer décodé, il est plus rapide que pcm brut.

Il doit y avoir quelque chose à propos de mes paramètres. Est-ce que quelqu'un qui utilise un opus peut m'aider? Merci beaucoup.

Répondre

1

Opus encode Définition:

opus_int32 opus_encode (OpusEncoder *   st, 
          const opus_int16 * pcm, 
          int     frame_size, 
          unsigned char *  data, 
          opus_int32   max_data_bytes) 

Lorsque vous spécifiez frame_size vous devez le mettre au nombre d'échantillons par un canal disponible dans pcm tampon.

Le codec OPUS prend en charge les signaux stéréo et mono et la configuration correspondante du codeur est le paramètre channels que vous spécifiez lorsque vous appelez la fonction opus_encoder_create.

Vous avez également besoin de connaître les tailles d'images prises en charge par le codec OPUS. Il supporte les trames avec: 2,5, 5, 10, 20, 40 ou 60 ms de données audio.

Une milliseconde d'audio avec 16 kHz est de 16 échantillons (16000/1000). Donc, pour mono Vous pouvez spécifier frame_size fixé à:

  • 16 * 2,5 = 40 (très rare)
  • 16 * 5 = 80 (rare)
  • 16 * 10 = 160
  • 16 * 20 = 320
  • 16 * 40 = 640
  • 16 * 60 = 960

codec OPUS ne sera pas accepter une autre taille. La meilleure façon de traiter la taille de la mémoire tampon de 1280 échantillons est de diviser en quatre paquets de 20ms ou deux paquets de 40ms.

Vous codez donc deux ou quatre paquets à partir d'un tampon reçu du tampon.