Estoy a punto de comenzar a trabajar en un proyecto que implica procesamiento de audio en tiempo real para una aplicación de efectos de audio. Se supone que la aplicación adquiere y procesa audio de 8 canales de entrada de audio individuales a una frecuencia de muestreo de 48 kHz. El algoritmo de procesamiento de audio genera audio para 8 canales de salida de audio individuales. El formato de muestra de audio es LPCM firmado de 16 bits. Dado que es para una aplicación de efectos de audio en tiempo real, la latencia también es importante. Si el audio se repite de entrada a salida sin ningún procesamiento, la latencia de ida y vuelta no debe exceder los 12 ms.
La aplicación debe recibir 256 * 8 muestras de entrada cada 5,33 ms (a través de una devolución de llamada de audio), procesar esas muestras y transmitir 256 * 8 muestras de salida (también a través de la devolución de llamada). Las 256 * 8 muestras se reciben / envían en algún tipo de formato "intercalado".
Actualmente estoy investigando diferentes plataformas de hardware y me preguntaba si el Raspberry PI 2 B podría ser una opción adecuada. La placa en sí misma parece tener mucha potencia (CPU Quad Core ARM de 900MHz), pero solo tiene entrada de audio. Entonces mis preguntas son:
- ¿La Raspberry PI 2 B es adecuada para el procesamiento de audio en tiempo real?
- Si la respuesta a 1 es sí, entonces me gustaría saber si hay tarjetas de audio adicionales para el Raspberry PI 2 B en el mercado con 8 canales de entrada y 8 canales de salida. La placa debe admitir una frecuencia de muestreo de 48 kHz.
- Si la respuesta a 1 o [2] es no, ¿qué plataforma HW recomendaría?
La razón por la que estoy viendo la Raspberry PI 2 B es el precio atractivo, pero puede haber otros tipos de placas en el mercado que son más adecuadas para este tipo de aplicación.
Respuestas:
La respuesta corta es sí, no y depende, la respuesta larga es probablemente no, pero podría ser sí dependiendo de su enfoque. Como una pieza de hardware, el Pi es bastante rápido y probablemente puede manejar el cambio de datos de entrada a salida razonablemente rápido. Sin embargo, la configuración predeterminada, de raspian linux, no es una plataforma en tiempo real. Además, no ha especificado qué DSP desea hacer. Cuando estaba en la universidad, en los días de 386s y Windows 3.1, si quería hacer un procesamiento de sonido serio, necesitaba un chip DSP externo para que todo funcione.
Si esto fuera a funcionar en el Pi, tienes algunas opciones. La primera opción, probablemente la mejor manera de hacerlo, sería en hardware, usando interrupciones y un módulo DSP separado. No estoy seguro de qué hay ahí fuera, pero vale la pena considerar que la mayoría de las interfaces de Pi con USB tienen limitaciones de ancho de banda, por lo que es posible que no tenga suerte. En segundo lugar, intente codificarlo como un módulo de kernel y vea qué tipo de rendimiento / potencia de procesamiento puede obtener de Pi, el modo de usuario linux no es en tiempo real, y aunque será una prueba de concepto útil (hacerlo en modo de usuario con un alta prioridad del proceso) es posible que deba ingresar al kernel para obtener más velocidad. Finalmente, el kernel de Linux, incluso en su versión cortada pi, hace muchas cosas, no necesita un dispositivo DSP simple. Creo que vi un kernel en algún lugar que convertiría su PC en un enrutador de red. Algo tan básico es todo lo que necesitas, pero tendrás que ensuciarte con algún hackeo del kernel C.
Si desea hacer las sumas y tratar de resolverlo todo, debe escribir el ensamblador de lo que su procesador va a hacer con los datos, y calcular cuántas instrucciones de proceso se necesitarán para cargar los datos, cambiarlos. y escríbalo, y vea si eso multiplicado por los 48k * 2 excederá los 900M, y si no, por qué margen (todo lo demás que hace el dispositivo, tiene que funcionar en ese margen, por lo tanto, sugiero que minimice eso al perder las cosas normales del kernel). Creo que es muy probable que no funcione, pero realmente depende del procesamiento que desee hacer. Es posible que pueda compilar su propio kernel sin nada, excepto su propio módulo de kernel, y tener suficiente espacio. Tendrás que probarlo y ver.
fuente