De áudio (MP3) codecs para aplicação embarcada
Pergunta
Eu estou procurando uma biblioteca de codec de software baseado para ser usado em aplicativos integrado (C / C ++). Estou interessado em ambas as bibliotecas de codec comerciais e gratuitos. Qualquer sugestão será bem-vindo.
Além disso, se você tem alguma experiência com OpenSL ES e saber quais soluções de software / hardware são compatíveis, eu ficaria feliz em ouvir sobre isso.
Eu preciso apoiar codecs populares. MP3 é uma obrigação. Estou implementando uma referência media player para uma aplicação integrada e não pode simplesmente dizer ao usuário: "Ei converter toda a sua biblioteca de música para Vorbis, é muito melhor." O suporte para o codec MP3 obrigatório, mas eu ficaria feliz em encontrar uma biblioteca mais avançado manipulação mais codecs (codecs de áudio mais, codecs de vídeo, etc.)
Solução
Disclaimer, divulgação cheia, etc:. Eu atualmente trabalho lá como um empreiteiro
Por um lado, você está interessado em descodificadores apenas ou codecs completos (descodificadores + encoders)?
Eu acho que a resposta depende de sua situação exata. Se você está procurando um jogador completo para a sua plataforma embarcada, NXP Software poderia ser uma solução. Eles fornecem outras aplicações também, como um gravador.
Outras dicas
Dê uma olhada libvorbis , um codec de áudio open source BSD que é muito bom. Há também um descodificador de referência para vorbis chamado Tremor que utiliza apenas inteiro aritmética, e, assim, pode ser utilizado em arquitecturas sem ponto flutuante.
O codec Vorbis é open source e é uma boa alternativa para MP3.
Depois de tomar um rápido olhar para a API OpenSL ES, parece já existem alguns codecs definidos:
#define SL_AUDIOCODEC_PCM ((SLuint32) 0x00000001)
#define SL_AUDIOCODEC_MP3 ((SLuint32) 0x00000002)
#define SL_AUDIOCODEC_AMR ((SLuint32) 0x00000003)
#define SL_AUDIOCODEC_AMRWB ((SLuint32) 0x00000004)
#define SL_AUDIOCODEC_AMRWBPLUS ((SLuint32) 0x00000005)
#define SL_AUDIOCODEC_AAC ((SLuint32) 0x00000006)
#define SL_AUDIOCODEC_WMA ((SLuint32) 0x00000007)
#define SL_AUDIOCODEC_REAL ((SLuint32) 0x00000008)
Você provavelmente deve descobrir se você está limitado àqueles.
codificação ou decodificação?
LAME (mp3) e FFmpeg (quase tudo o resto, áudio e vídeo) deve fazer o truque, embora eu acredito que o codificador Vorbis com FFmpeg é de má qualidade, e você deve usar um separado sempre que possível. (Eu não sei se este conselho ainda é atual.)
Disclaimer:. Estive lendo um pouco sobre codecs recentemente, mas eu ainda não fiz nada com eles, então eu realmente não sei o que eu estou falando ainda