24 de fevereiro, após mais de um ano de desenvolvimento, foi lançada a versão 0.11.22 da biblioteca multiplataforma de captura e reprodução de áudio. miniaudio, escrito na linguagem C e distribuído como domínio público.
miniaudio funciona em todas as principais plataformas de desktop e móveis, incluindo Windows, macOS, Linux, BSD, iOS, Android e Web (via Emscripten), sem dependências externas.
A biblioteca possui uma API simples, flexível e modular com decodificadores integrados (WAV, MP3 e FLAC), mixagem avançada e processamento de efeitos (incluindo 3D), gerenciamento de recursos, filtros, conversão de dados e muito mais.
Principais mudanças:
- A partir da versão 0.12, miniaudio irá passar a ter pares de arquivos .c/.h separados, abandonando o único arquivo de cabeçalho. Para se preparar para isso, foi adicionado um arquivo miniaudio.c ao repositório. No momento, é apenas uma wrapper para miniaudio.h e MINIAUDIO_IMPLEMENTATION. Nothing in miniaudio.h changed, however, when version 0.12 is released, miniaudio.c will need to be used for compilation. It is recommended to start transitioning from using MINIAUDIO_IMPLEMENTATION to using miniaudio.c. If you want to continue compiling your project as a single compilation unit, you can do #include 'miniaudio.c'. This method will be supported in version 0.12 and beyond.
- Os arquivos miniaudio_libvorbis.h e miniaudio_libopus.h no diretório extras foram declarados obsoletos. Agora estão separados em arquivos .c e .h no diretório extras/decoders. Os arquivos antigos ainda existem para compatibilidade, mas você precisará migrar para as novas versões. A transição deve ser trivial.
- As opções MA_SOUND_FLAG_LOOPING e MA_RESOURCE_MANAGER_DATA_SOURCE_FLAG_LOOPING foram adicionadas. Elas podem ser usadas para inicializar sons e fontes de dados gerenciadas para looping por padrão. Este é o método recomendado para habilitar looping em streams. As opções de configuração isLooping em ma_sound_config e ma_resource_manager_data_source_config foram declaradas obsoletas. Se você as estiver usando, deve migrar para as novas opções, caso contrário, ao atualizar para uma versão futura, você encontrará erros de compilação.
- ma_rb_commit_read(), ma_rb_commit_write(), ma_pcm_rb_commit_read() e ma_pcm_rb_commit_write() não retornam mais MA_AT_END. O motivo para essa alteração é que não existe o conceito de 'fim' em um buffer circular, o que tornava o código de resultado ambíguo. Além disso, essas funções podem retornar algo diferente de MA_SUCCESS, mesmo que a operação tenha sido concluída com sucesso, o que adicionava confusão adicional. A maneira correta de verificar se ainda há espaço no buffer circular é observar o contador de quadros retornado pelas funções rb_acquire_read/write().
- A implementação da fonte de dados ma_pcm_rb foi alterada para que a saída seja preenchida com silêncio se não houver dados suficientes no buffer circular para atender ao pedido. Isso significa que ma_data_source_read_pcm_frames() para ma_pcm_rb não deve mais retornar um número de quadros menor do que o solicitado e, portanto, nunca retornará MA_AT_END, o que não faz sentido para um buffer circular, uma vez que ele não tem o conceito de fim. Essa alteração deve simplificar significativamente o uso do buffer circular como fonte de dados para ma_sound.
- Foi feita uma pequena alteração na função ma_calculate_buffer_size_in_milliseconds_from_frames(), fazendo com que ela retorne um valor arredondado para o número inteiro mais próximo.
- Agora, em caso de falha na inicialização do decodificador, o primeiro código de erro encontrado é retornado, em vez de MA_NO_BACKEND, independentemente do erro, como era anteriormente.
- Foi adicionada a função ma_device_id_equal() para comparar identificadores de dispositivos.
- Adicionada suporte a MA_NO_RUNTIME_LINKING no backend AAudio.
- Documentação atualizada.
- Erros detectados foram corrigidos.
Fonte: linux.org.ru
