Je suis sur le point de commencer à travailler sur un projet qui implique un traitement audio en temps réel pour une application d'effets audio. L'application est censée acquérir et traiter l'audio de 8 canaux d'entrée audio individuels à une fréquence d'échantillonnage de 48 kHz. L'algorithme de traitement audio génère de l'audio pour 8 canaux de sortie audio individuels. Le format d'échantillon audio est un LPCM signé 16 bits. Puisqu'il s'agit d'une application d'effets audio en temps réel, la latence est également importante. Si l'audio est mis en boucle de l'entrée à la sortie sans aucun traitement, la latence aller-retour ne doit pas dépasser 12 ms.
L'application doit recevoir 256 * 8 échantillons d'entrée toutes les 5,33 ms (via un rappel audio), traiter ces échantillons et transmettre 256 * 8 échantillons de sortie (également via le rappel). Les 256 * 8 échantillons sont reçus / envoyés dans une sorte de format "entrelacé".
Je recherche actuellement différentes plates-formes matérielles et je me demandais si le Raspberry PI 2 B pourrait être un choix approprié. La carte elle-même semble avoir beaucoup de puissance (processeur ARM Quad Core 900 MHz), mais elle n'a qu'une entrée audio. Mes questions sont donc:
- Le Raspberry PI 2 B est-il adapté au traitement audio en temps réel?
- Si la réponse à 1 est oui, je voudrais savoir s'il existe des cartes audio supplémentaires pour le Raspberry PI 2 B sur le marché avec 8 canaux d'entrée et 8 canaux de sortie? La carte doit prendre en charge un taux d'échantillonnage de 48 kHz.
- Si la réponse à 1 ou [2] est non, quelle plate-forme matérielle recommanderiez-vous?
La raison pour laquelle je regarde le Raspberry PI 2 B est le prix attractif, mais il pourrait y avoir d'autres types de planches sur le marché qui conviennent mieux à ce type d'application.
Réponses:
La réponse courte est oui, non et dépend, la réponse longue est probablement non, mais peut être oui selon votre approche. En tant que matériel, le Pi est assez rapide et peut probablement gérer le transfert de données d'entrée à la sortie assez rapidement. Cependant, la configuration par défaut de raspian linux n'est pas une plate-forme en temps réel. De plus, vous n'avez pas spécifié quel DSP vous voulez faire. À l'époque où j'étais à l'université, à l'époque des 386 et de Windows 3.1, si vous vouliez faire du traitement sonore sérieux, vous aviez besoin d'une puce DSP externe pour pouvoir tout faire fonctionner.
Si cela devait fonctionner sur le Pi, vous avez quelques options. La première option, probablement la meilleure façon de le faire, serait le matériel, en utilisant des interruptions et un module DSP séparé. Je ne suis pas sûr de ce qui existe, mais cela vaut la peine de considérer que la plupart des interfaces Pi avec USB et qui ont des limitations de bande passante, de sorte que vous pourriez avoir de la chance de toute façon. Deuxièmement, essayez de le coder en tant que module du noyau et voyez quel type de débit / puissance de traitement vous pouvez obtenir du Pi, le mode utilisateur Linux n'est pas en temps réel, et même si ce sera une preuve de concept utile (le faire en mode utilisateur avec un priorité élevée du processus), vous devrez peut-être aller dans le noyau pour en tirer plus de vitesse. Enfin, le noyau Linux, même dans sa version pi réduite, fait beaucoup de choses, vous n'avez pas besoin d'un simple périphérique DSP. Je pense avoir vu un noyau quelque part qui transformerait votre PC en routeur réseau. Quelque chose d'aussi basique est tout ce dont vous avez besoin, mais vous devrez vous salir avec un piratage du noyau C.
Si vous voulez faire les sommes et essayer de tout résoudre, vous devez écrire l'assembleur pour tout ce que votre processeur va faire avec les données et déterminer combien d'instructions de processus seront nécessaires pour charger les données, les changer et l'écrire, et voir si cela multiplié par le 48k * 2 va dépasser 900M, et sinon, par quelle marge (tout le reste de l'appareil fait, doit fonctionner dans cette marge, donc je vous suggère de minimiser cela en perdant le noyau normal). Je pense qu'il est très probable que cela ne fonctionnera pas, mais cela dépend vraiment du traitement que vous souhaitez effectuer. Vous pourriez être en mesure de compiler votre propre noyau sans rien, sauf votre propre module de noyau, et avoir juste assez d'espace. Vous devrez l'essayer et voir.
la source