Reprodução de MP3 usando remoto e unidades de áudio no iPhone ... possível?
-
13-09-2019 - |
Pergunta
Eu quero reproduzir um MP3 em vez de um arquivo descompactado usando RemoteIO / AudioUnit. Usando arquivos descompactados, obviamente, usa espaço em disco longe demais (30MB vs 3MB para mp3).
Este é mesmo possível? Se assim for, você pode fornecer um pouco headstart código?
Graças um milhão.
Solução
Sim, é possível. Mas isso requer o uso da API de áudio múltiplas e vários segmentos.
Devido às restrições de tempo real da Unidade de áudio fio tampão de retorno de chamada, você terá que fazer a conversão de arquivos compactados para amostras PCM matérias fora do callback Unidade de áudio. Você poderia usar estendidas Serviços arquivo de áudio ou AVAssetReader para fazer a conversão para amostras não comprimidas fora do callback Unidade de áudio. No entanto, você não precisa para descompactar o arquivo inteiro de uma vez. Um buffer descompactado curto de uma fração de segundo, provavelmente, fazer, desde que você mantenha preenchê-lo muito à frente da Unidade de áudio de chamada de retorno tampão taxa de consumo. Isto pode ser feito de um fio impulsionado temporizador separado que monitores tampão consumo, e descomprime áudio apenas o suficiente em conformidade, talvez em um tampão de anel ou circular FIFO.
O que você vai acabar com será semelhante a uma reescrita da camada API de fila de áudio, mas com mais personalização.
Outras dicas
Como de baixo nível que você quer ir? Você pode usar a API AudioHardware:
err = AudioDeviceAddIOProc(deviceID, ioProc, self);
e em sua IOProc preencher os buffers mesmo, escutar alterações de hardware, e lidar com segmentação em tempo real e um monte de outras coisas de baixo nível.
Eu estou supondo que você já está decodificar os dados de mp3 com AudioConverter e saber como fazer isso.