Cómo escribir un controlador y programa de control de efectos de sonido para Android
Requisitos de software (entorno Windows):
Sistema operativo Windows, última versión de Cygwin, Android NDK r8 o superior, Eclipse, última versión de Android SDK
Requisitos técnicos profesionales:
Dominar la sintaxis básica de C/C++, la sintaxis básica de Java, el diseño básico de la interfaz de usuario de Android, los principios y algoritmos matemáticos de punto fijo y la tecnología básica de procesamiento de audio.
Opcional Requisitos técnicos avanzados:
Filtro IIR/FIR, FFT, ensamblaje Thumb/ARM, conjunto de instrucciones NEON
1. ¿Qué es el controlador de sonido en Android y cuál es su arquitectura?
A partir de la versión 2.3 de Android, se ha agregado una capa SoundFX al marco multimedia del sistema. Esta capa es el "proceso de procesamiento de efectos de sonido". Cuando se está ejecutando un sistema multimedia, el marco permite cargar una biblioteca SoundFX "estándar" en el mezclador correspondiente al flujo multimedia. La biblioteca SoundFX debe seguir la arquitectura OpenSLES. El llamado estándar es implementar una biblioteca .so basada en la arquitectura OpenSLES.
SoundFX se puede cargar en cualquier transmisión de audio, y cada transmisión de audio utiliza una ID de sesión como identificador. Nota: 0 representa el ID de sesión de transmisión de audio de la salida total del sistema. En circunstancias normales, el controlador de efectos de sonido debe cargarse en esta transmisión antes de que pueda procesar todos los sonidos del sistema (incluidos reproductores de audio y video, juegos, tonos de llamada, etc.).
Del mismo modo, cada SoundFX tiene muchos parámetros de configuración prioritarios y derechos de control cuando/después de la carga. Se requiere un programa de control para completar la carga de SoundFX. El programa de control generalmente se implementa en Eclipse mediante lenguaje Java. En términos sencillos, el programa de control es un programa apk de Android. SoundFX puede entenderse como el mezclador subyacente en el sistema Windows, y el programa de control puede entenderse como el panel de control de Windows, que controla la carga y el inicio de SoundFX, la configuración de varios parámetros, etc. Cuando se inicia un programa de control, lo primero que tiene que hacer es notificar al sistema que cargue un SoundFX en un flujo de medios de acuerdo con el marco OpenSLES, luego habilitar/deshabilitar el SoundFX a través de la interacción de la interfaz de usuario y controlar los parámetros de SoundFX de acuerdo con a la interfaz de usuario Al salir, también debe notificar al sistema que desinstale SoundFX.
2. ¿Por dónde empezar?
Debido a que Android estipula que SoundFX debe estar basado en OpenSLES, lo primero que debemos hacer es elegir un tipo de efecto. ¿Por qué es esto? ¿Qué significa? OpenSLES estipula que un efector debe tener dos condiciones necesarias, una es el tipo de efector y la otra es el código de identificación único del efector. Estas dos cosas se almacenan de acuerdo con la estructura GUID en el lenguaje C/C++ (¿Qué es GUID? Encuentre Du Niang).
El tipo de GUID está determinado por OpenSLES, volumen (SL_IID_VOLUME), control de frecuencia de muestreo (SL_IID_PLAYBACKRATE), ecualizador (SL_IID_EQUALIZER), reverberación preestablecida (SL_IID_PRESETREVERB), reverberación ambiental (SL_IID_ENVIRONMENTALREVERB), posicionamiento 3D (SL_IID_3DLOCATION) , efecto Doppler (SL_IID_3DDOPPLER), mejora de graves (SL_IID_BASSBOOST), subida y bajada (SL_IID_PITCH), virtualización (SL_IID_VIRTUALIZER). ¿Nada aquí lo que quieres? ¿Quieres personalizar? ¿Qué, vas a hacer un aumento de agudos? No importa lo que hagas, aquí tienes que elegir uno. Para hacerlo más sencillo, elija virtualización. La virtualización tiene solo un parámetro fijo. (¿No entiendes esto? Entonces lee el tutorial completo. Creo que lo entenderás al final)
El siguiente paso es generar un GUID único para nombrar tu SoundFX. Hay muchas formas de generarlo, incluido software y páginas web ya preparados.
Lo que generé aquí es {42C6510E-1811-4857-8CA5-C204A8A3B0D4}.
Para obtener los detalles y las instrucciones de programación mencionadas anteriormente, lea Android NDK\platforms\android-14\arch-arm\usr\include\SLES\OpenSLES.h. (Android 4.0 corresponde a android