O processamento de sinal em tempo real é possível no Windows?

8

Esta questão está relacionada a Como decidir em qual plataforma é melhor implementar o processamento de áudio em tempo real? , mas com foco no Windows.

Gostaria de poder receber informações de uma placa de aquisição de dados e processá-las (por meio do Matlab ou de um programa personalizado) e usar o resultado desse programa para conduzir um dispositivo externo conectado via USB. Eu sei que obter respostas difíceis em tempo real com o Windows é quase impossível (pois existe uma "manobra" (termo técnico) de 3 a 15 ms).

Qual é a maneira mais eficaz de diminuir esse tempo de manobra? Isso é possível? Devo procurar uma solução incorporada imediatamente?

jonsca
fonte

Respostas:

4

O Windows não é um sistema operacional em tempo real; portanto, você não possui recursos de processamento em tempo real no Windows.

Com o Windows Vista, a Microsoft ofereceu uma nova API que, entre outras coisas, visava desempenho estrito, onde os Streams de modo exclusivo prometiam desempenho próximo ao tempo real. Isso é conseguido com algumas coisas poderosas trabalhando juntas, incluindo o caminho curto e exclusivo para o hardware de áudio dos componentes do modo de usuário, programação multimídia específica. Deixe-me citar a Wiki sobre isso:

Para profissionais de áudio, foi introduzido um novo driver de porta WaveRT que se esforça para obter desempenho em tempo real usando o agendador de classes multimídia e suporta aplicativos de áudio que reduzem a latência dos fluxos de áudio. Como resultado, os aplicativos no modo usuário podem controlar completamente os fluxos de áudio sem nenhuma execução de código no kernel durante o tempo de execução. O WaveRT permite que o aplicativo em modo de usuário acesse diretamente os buffers internos de hardware de áudio e os contadores de posição de amostra (dados na memória que são mapeados para o mecanismo DMA do hardware de áudio). Ele permite que os aplicativos pesquisem a posição atual na janela de memória DMA que o hardware está acessando. O WaveRT também suporta a noção de um evento de notificação de relógio gerado por hardware, semelhante à API ASIO, para que os aplicativos não precisem pesquisar a posição atual, se não quiserem. No entanto, o WaveRT funciona apenas com dispositivos de áudio PCI, PCI Express ou onboard; Ele não funciona com interfaces USB ou FireWire, que são mais difundidas no setor de áudio profissional.

Esse novo modo de operação abriu oportunidades interessantes para o processamento de áudio de baixa latência, como relatado por usuários satisfeitos :

Eu obtenho um áudio estável sólido perfeito com buffers de 2ms + latência de 0,5ms, em comparação com áudio semi-estável em buffers de 4ms (latência de saída de + 5ms), com ASIO.

Dependendo se essa aproximação em tempo real é boa para você, o Windows ainda pode ser um bom ambiente para a tarefa mencionada.

Roman R.
fonte
9

se você precisar manter o jitter (assumindo que é isso que você quer dizer com "mexer") até <1ms, eu diria para esquecer o Windows. A latência absoluta da entrada para a saída importa ou é apenas a instabilidade?

Você pode gerenciá-lo algumas vezes, mas garantir que é improvável. Qual é a penalidade por não cumprir o prazo? Vai explodir alto-falantes? Dirigir com força o braço de um robô contra uma parada final? Ou algo mais benigno?

O fato de sua saída ser USB também provavelmente não ajudará nos riscos de jitter, pois há muita interação extra do SO, e a topologia do barramento também impedirá sua latência em potencial - se sua saída estiver no final de uma série de alguns hubs, por exemplo.

Martin Thompson
fonte
Sim, jitter era o termo que eu estava procurando, obrigado.
jonsca
5

Se isso é possível ou não, depende de seus requisitos de latência, ou seja, o atraso total entre entrada e saída. Um bom ponto de partida pode ser a criação de uma estação de trabalho de áudio digital usando software de gravação como ProTools, Sonar, Ableton, Cubase etc. Eles funcionam com hardware de E / S de baixo custo (tipo de) e vêm com drivers otimizados de baixa latência. Alguns deles têm interfaces "plug-in" que permitem fazer loop no seu próprio processamento de sinal. Um formato popular é o VST da Steinberg, suportado por muitos hosts. Costumava ser aberto e gratuito, mas pode exigir uma licença agora.

Este http://www.kvraudio.com/wiki/ é um bom recurso para esse tipo de coisa.

Se você deseja processar no Matlab, pode ser necessário escrever seus próprios drivers. Eu já vi isso com DLLs e também com interfaces JAVA nativas. Você também pode hackear algo junto com audioplayer () e audiorecorder (), mas isso pode exigir latência razoavelmente alta para lidar com interrupções do Windows e fazer outras coisas. Em essência, você configura um controle da GUI com um retorno de chamada acionado por um tempo. Na chamada de retorno, você lê todas as entradas disponíveis, processa-as, coloca-as na saída e espera o melhor.

Em geral, ajuda a manter a caixa do Windows o mais "limpa" possível, ou seja, sem conexão de rede (enquanto você processa áudio), sem software antivírus e executa apenas o mínimo absoluto de itens, software e serviços de inicialização.

Hilmar
fonte