O Audio Share pode compartilhar o áudio do computador Windows/Linux com o telefone Android pela rede, para que seu telefone se torne o alto-falante do computador. (Você não precisa comprar um novo alto-falante?.)
Um PC com Windows ou Linux como servidor.
Windows 10+ x86_64 com Microsoft Visual C++ 2015-2022 Redistribuível (x64) (vc_redist.x64.exe).
Linux com PipeWire.
O reprodutor de áudio no PC pode funcionar normalmente. Isso quer dizer que você deve ter uma placa de som e o terminal de áudio estar disponível. Caso contrário, você precisará de algumas configurações extras.
Android 6.0 (API 23)+.
Baixe o arquivo APK e AudioShareServer.exe da versão mais recente.
Abra o AudioShareServer.exe no seu computador. Os argumentos padrão podem funcionar bem. Mas talvez você ainda precise verificar a parte "Host". Normalmente é o endereço da LAN, como 192.168.xxx.xxx
. Certifique-se de que seu telefone possa conectar seu computador por meio deste endereço IP. Em seguida, clique no botão "Iniciar servidor".
Instale o APK no seu telefone e abra-o. Modifique a parte "Host" para garantir que seja igual ao valor da etapa anterior, como 192.168.xxx.xxx
. Clique no botão "▶" e aproveite o áudio?.
Cuidado
Este aplicativo não oferece suporte ao recurso de reconexão automática no momento. Assim que o aplicativo for encerrado ou desconectado pela economia de energia do Android, a reprodução do áudio será interrompida. Recomenda-se adicionar o aplicativo à lista de permissões de economia de energia. Para fazer isso, você pode pressionar "Solicitar Ignorar Otimizações de Bateria" nas configurações do aplicativo.
Baixe o audio-share-server-cmd-windows.zip
para Windows, o audio-share-server-cmd-linux.tar.gz
para Linux.
Descompacte o arquivo compactado.
Basta executar as-cmd -b
para iniciar o servidor. Ele usará o primeiro endereço LAN como host com a porta 65530
e selecionará um terminal de áudio padrão. Na maioria das vezes, funciona bem. Caso contrário, use as-cmd -h
para ver a ajuda e defina os argumentos apropriados.
O Windows solicitará que você adicione regras de firewall automaticamente, enquanto o Linux não. Portanto, se a sua distribuição Linux permite firewall, você precisa configurar o firewall manualmente.
Instale o APK no seu telefone e abra-o. Modifique a parte "Host" para garantir que seja igual ao valor da etapa anterior, como 192.168.xxx.xxx
. Clique no botão "▶" e aproveite o áudio?.
endereço=192.168.3.2 # altere.port=65530 # altere.sudo firewall-cmd --add-rich-rule="rule family=ipv4 destination address=$address port port=$port protocol=tcp accept"sudo firewall -cmd --add-rich-rule = "família de regras = endereço de destino ipv4 = $ endereço porta porta = $ protocolo de porta = udp aceitar" sudo firewall-cmd --runtime-to-permanente
sudo firewall-cmd --list-rich-rules
Saída:
regra família = "ipv4" endereço de destino = "192.168.3.2" porta porta = "65530" protocolo = "tcp" aceitar regra família = "ipv4" endereço de destino = "192.168.3.2" porta porta = "65530" protocolo = "udp" aceitar
endereço=192.168.3.2 # altere.port=65530 # altere.sudo firewall-cmd --remove-rich-rule="rule family=ipv4 destination address=$address port port=$port protocol=tcp accept"sudo firewall -cmd --remove-rich-rule = "família de regras = endereço de destino ipv4 = $ endereço porta porta = $ protocolo de porta = udp aceitar" sudo firewall-cmd --runtime-to-permanente
Existem dois tipos de formato de áudio:
Capturar formato de áudio
Transferir formato de áudio
O formato de transferência de áudio são dados PCM não compactados e permanecem iguais ao formato de captura de áudio.
Você pode abrir server.log
para ver o formato de áudio de transferência.
[2024-10-26 14:52:48.967] [info] AudioFormat: encoding: ENCODING_PCM_16BIT channels: 2 sample_rate: 44100
Conforme mostrado acima, a codificação é 16 bit integer PCM
, a contagem de canais é 2
e a taxa de amostragem é 44.1kHz
.
No Android, a API AudioTrack suporta apenas os formatos de áudio PCM listados abaixo:
ENCODING_PCM_FLOAT ENCODING_PCM_8BIT ENCODING_PCM_16BIT ENCODING_PCM_24BIT_PACKED ENCODING_PCM_32BIT
https://developer.android.com/reference/android/media/AudioFormat#encoding
O Audio Share suporta esses 5 tipos de formato PCM, mas a disponibilidade de um formato específico depende do ponto final do áudio.
No Windows, o formato de áudio de captura padrão depende do formato padrão do terminal de áudio. Você pode alterá-lo configurando Sound Panel ( mmsys.cpl
). Na guia Playback
do Painel de Som, clique com o botão direito em um endpoint disponível, abra o Painel de Propriedades, selecione a guia Advanced
, altere Default Format
e clique em Apply
. Isso também pode ser feito no Realtek Audio Console
, se você usar uma placa de áudio Realtek. O formato de captura de áudio deve ter os mesmos canais e taxa de amostragem do ponto final de áudio. Portanto, se quiser alterá-los, você só pode abrir o Painel de Som e definir o formato padrão. Para ser compatível com Linux, o as-cmd
ainda pode definir --channels
ou --sample-rate
no Windows. No entanto, ele retornará ao formato de áudio adequado, pois não suporta o esperado na maioria dos casos.
https://learn.microsoft.com/en-us/windows/win32/coreaudio/device-formats
No Linux, o formato de captura de áudio padrão poderia ter sido fornecido completamente pelo PipeWire. No entanto, a codificação de áudio padrão pode ser plana, como SPA_AUDIO_FORMAT_F32P
. O AudioTrack do Android não consegue reproduzi-lo. Portanto, a codificação de áudio padrão é forçada para SPA_AUDIO_FORMAT_F32_LE
(PCM flutuante de 32 bits com little endian). Os canais padrão e a taxa de amostragem permanecem intactos e são fornecidos pelo PipeWire.
Observe que diminuir a codificação bit a bit ou a taxa de amostragem pode diminuir a largura de banda da rede, mas também pode aumentar o ruído em branco, também conhecido como perda de áudio.
O volume final que você ouve é afetado pelo seguinte volume:
Volume do sistema do PC.
Volume do reprodutor de áudio no PC.
Volume de mídia do sistema Android.
"Volume de áudio" no aplicativo Android.
"Loudness Enhancer" no aplicativo Android.
Eles são todos independentes. Se você aumentar o volume do seu PC e do reprodutor de áudio e ainda achar que não é suficiente, mas não quiser alterar o volume do sistema Android, você pode aumentar o "Loudness Enhancer" nas configurações do aplicativo. Isso não afetará o volume do sistema. O "Volume de áudio" no aplicativo pode diminuir o volume que você ouve sem alterar o volume do sistema.
Muito barulho vai machucar seu ouvido!!! "Loudness Enhancer" tem um limite de 3000mB
. É o suficiente para a maioria dos casos. Se você ainda precisar de mais volume, basta alterar diretamente o volume do sistema Android.
A placa de som Realtek pode disponibilizar o endpoint de áudio quando o alto-falante não estiver conectado. Basta abrir o Realtek Audio Console, selecionar a guia "Configurações avançadas do dispositivo" e ativar a opção "Desativar caixa de diálogo pop-up do painel frontal". Então o endpoint de áudio aparecerá. Outras placas de som podem ter opções semelhantes. Se você não conseguir encontrar, vá para o Método 2.
No momento, não encontrei uma maneira de criar um terminal de áudio virtual. A única maneira de conseguir isso é escrever um driver de dispositivo de áudio virtual. Mas é necessário um certificado de assinatura de código EV para assiná-lo. Caso contrário, o usuário não poderá instalá-lo. Eu não quero pagar por isso. E existem muitos drivers de dispositivos de áudio virtuais de terceiros. Você pode encontrar ou postar um que você conhece em Virtual Audio Device Driver no Windows. Geralmente, um driver possui um arquivo INF. Clique com o botão direito e clique em “Instalar” para instalá-lo.
Graças ao PipeWire, é muito fácil para o Linux criar um endpoint de áudio virtual, mesmo sem privilégio de root. Basta copiar a configuração abaixo para ~/.config/pipewire/pipewire.conf.d/audio-share-sink.conf
context.objects = [ { factory = adapter args = { factory.name = support.null-audio-sink node.name = "Audio Share Sink" media.class = Audio/Sink object.linger = true audio.position = [ FL FR ] priority.session = 1009 priority.driver = 1009 monitor.channel-volumes = true monitor.passthrough = true } } ]
Em seguida, execute systemctl --user restart pipewire
para reiniciar o serviço PipeWire.
Finalmente, você pode ver o endpoint adicionado “Audio Share Sink”.
[abc@localhost ~]$ as-cmd -l [2024-03-17 22:46:14.563] [informações] pipewire header_version: 0.3.48, biblioteca_versão: 0.3.67 endpoint_list: * id: 30 nome: coletor de compartilhamento de áudio total: 1
Aplicativo Android
O Android Studio importará todas as dependências automaticamente.
Servidor MFC
vcpkg é necessário para instalar dependências.
Execute vcpkg install asio protobuf spdlog[wchar] wil nlohmann-json
para instalar deps. O trio vcpkg é x64-windows-static-md
.
Visual Studio 2022 com carga de trabalho "Desenvolvimento de desktop com C++" e opção "C++ MFC para ferramentas de build v143 mais recentes (x86 e x64)" é necessário para compilação.
CMD do servidor
CMake e um compilador com suporte C++20 são necessários. O Linux também precisa libpipewire-dev
ou pipewire-devel
.
Instale o vcpkg e defina o env VPCKG_ROOT
. Este ambiente é exigido por CMakePresets.json
.
Execute vcpkg install asio protobuf cxxopts
para instalar deps. O trio vcpkg é x64-windows-static-md
para Windows, x64-linux
para Linux. Além disso, o Windows precisa executar vcpkg install spdlog[wchar] wil
e o Linux precisa executar vcpkg install spdlog
.
Execute cmake --preset linux-Release
para configurar.
Execute cmake --build --preset linux-Release
para compilar. O as-cmd
está localizado em out/install/linux-Release/bin/as-cmd
.
Para Windows, substitua linux
por windows
nas duas etapas anteriores.
Este projeto está licenciado sob a licença Apache-2.0.
Copyright 2022-2024 mkckr0 <https://github.com/mkckr0> Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
nlohmann/json licenciado sob a licença MIT
WIL licenciado sob a licença MIT
Asio licenciado sob a licença BSL-1.0.
Buffers de protocolo licenciados sob a LICENÇA.
spdlog licenciado sob a licença MIT.
{fmt} licenciado sob a LICENÇA.
cxxopts licenciados sob a licença MIT
Netty licenciado sob a licença Apache-2.0.
Componentes materiais para Android licenciados sob a licença Apache-2.0.
Plugin Protobuf para Gradle licenciado sob a LICENÇA.
PipeWire licenciado sob a LICENÇA.
Moscou
YuHuanTin