Conceitos Fundamentais de Mistura de Áudio
A mistura de áudio envolve combinar sinais de diferentes fontes (como microfones externos, trilhas musicais ou efeitos sonoros) em um único fluxo de áudio. No HaishinKit.swift, esse processo é gerenciado por componentes baseados no protocolo AudioMixer, que permite configurações flexíveis para mixagem mono ou estéreo, com controle granular por canal.
Componentes Principais
AudioMixer: Define o contrato para todos os tipos de misturadores de áudio.AudioMixerBySingleTrack: Ideal para cenários simples com apenas uma fonte de entrada.AudioMixerByMultiTrack: Permite adicionar múltiplas fontes de áudio com ajustes individuais de volume, ganho e prioridade.AudioMixerSettings: Estrutura central que define parâmetros como taxa de amostragem, número de canais e estado de silêncio.
Configuração de Parâmetros de Mistura
O objeto AudioMixerSettings controla a saída final do áudio misturado. Ele pode ser personalizado conforme necessário para garantir compatibilidade com dispositivos e servidores de streaming.
| Parâmetro | Valor Padrão | Descrição |
|---|---|---|
sampleRate |
0 (auto) | Define a frequência de amostragem em Hz (máx. 48000). |
channels |
0 (auto) | Número de canais (1 = mono, 2 = estéreo). |
isMuted |
false | Ativa ou desativa a saída de áudio. |
mainTrack |
0 | Indica qual faixa será considerada principal. |
tracks |
[] | Mapa de configurações por ID de faixa. |
Exemplo de Configuração
let mixerConfig = AudioMixerSettings(
sampleRate: 44100,
channels: 2,
isMuted: false,
mainTrack: 0,
tracks: [
0: AudioMixerTrackSettings(volume: 1.0),
1: AudioMixerTrackSettings(volume: 0.7)
]
)
Passos para Tratar Entradas Múltiplas de Microfone
-
Criar o misturador: Use
AudioMixerByMultiTrackpara suporte a múltiplas fontes. ``` let audioMixer = AudioMixerByMultiTrack() audioMixer.delegate = self -
Aplicar configurações: Defina as propriedades do áudio final. ``` audioMixer.settings = AudioMixerSettings(sampleRate: 44100, channels: 2, mainTrack: 0)
-
Adicionar faixas de entrada: Cada microfone deve ter sua própria faixa associada. ``` let micOne = AudioMixerTrack(id: 0, outputFormat: .init()) micOne.delegate = audioMixer audioMixer.addTrack(micOne)
let micTwo = AudioMixerTrack(id: 1, outputFormat: .init()) micTwo.delegate = audioMixer audioMixer.addTrack(micTwo)
-
Manipular dados de áudio: Implemente os métodos do delegado para receber entradas e saídas. ``` func audioMixer(_ mixer: some AudioMixer, track: UInt8, didInput buffer: AVAudioPCMBuffer, when: AVAudioTime) { // Processar áudio de entrada individual }
func audioMixer(_ mixer: some AudioMixer, didOutput buffer: AVAudioPCMBuffer, when: AVAudioTime) { // Enviar fluxo misturado para servidor RTMP/SRT }
-
Ajustar volumes por faixa: Altere dinamicamente o nível de cada microfone. ``` var trackConfig = audioMixer.settings.tracks trackConfig[0] = AudioMixerTrackSettings(volume: 0.9) trackConfig[1] = AudioMixerTrackSettings(volume: 0.5) audioMixer.settings.tracks = trackConfig
Aplicação Prática
Em projetos de exemplo, como o arquivo PublishViewModel.swift no diretório iOS, é possível atualizar as configurações em tempo real via método assíncrono:
try await audioMixer.setAudioMixerSettings(newSettings)
Solução de Problemas Comuns
- Desincronização de áudio: Verifique se todas as fontes têm a mesma taxa de amostragem (ex: 44100 Hz).
- Controle preciso de volume: Utilize
AudioMixerTrackSettings.volumepara equilibrar contribuições entre microfones.
Com o HaishinKit.swift, é possível construir soluções avançadas de streaming com múltiplos microfones, ideal para podcasts ao vivo, conferências ou transmissões multicanal. A flexibilidade do sistema de mistura permite adaptação a cenários complexos com mínima sobrecarga de desenvolvimento.