Audio Share puede compartir el audio de una computadora Windows/Linux con un teléfono Android a través de la red, de modo que su teléfono se convierta en el altavoz de la computadora. (¿No es necesario comprar un altavoz nuevo?)
Una PC con Windows o Linux como servidor.
Windows 10+ x86_64 con Microsoft Visual C++ 2015-2022 Redistribuible (x64) (vc_redist.x64.exe).
Linux con PipeWire.
El reproductor de audio de la PC puede funcionar normalmente. Es decir, debe tener una tarjeta de sonido y el punto final de audio debe estar disponible. De lo contrario, necesitará algunas configuraciones adicionales.
Android 6.0(API 23)+.
Descargue el archivo APK y AudioShareServer.exe de la última versión.
Abra AudioShareServer.exe en su computadora. Los argumentos predeterminados pueden funcionar bien. Pero es posible que aún tengas que marcar la parte "Host". Normalmente es la dirección LAN, como 192.168.xxx.xxx
. Asegúrese de que su teléfono pueda conectarse a su computadora a través de esta dirección IP. Luego haga clic en el botón "Iniciar servidor".
Instala APK en tu teléfono y ábrelo. Modifique la parte "Host" para asegurarse de que sea el mismo que el valor del paso anterior, como 192.168.xxx.xxx
. Haga clic en el botón "▶" y disfrute del audio.
Precaución
Esta aplicación no admite la función de reconexión automática actualmente. Una vez que el ahorro de energía de Android cierre o desconecte la aplicación, se detendrá la reproducción de audio. Se recomienda agregar la aplicación a la lista blanca de ahorro de energía. Para hacer esto, puede presionar "Solicitar ignorar optimizaciones de batería" en la configuración de la aplicación.
Descargue audio-share-server-cmd-windows.zip
para Windows, audio-share-server-cmd-linux.tar.gz
para Linux.
Descomprima el archivo comprimido.
Simplemente ejecute as-cmd -b
para iniciar el servidor. Utilizará la primera dirección LAN como host con el puerto 65530
y seleccionará un punto final de audio predeterminado. La mayoría de las veces funciona bien. De lo contrario, utilice as-cmd -h
para ver la ayuda y establezca los argumentos adecuados.
Windows le pedirá que agregue reglas de firewall automáticamente, mientras que Linux no lo hará. Entonces, si su distribución de Linux habilita el firewall, deberá configurar el firewall manualmente.
Instala APK en tu teléfono y ábrelo. Modifique la parte "Host" para asegurarse de que sea el mismo que el valor del paso anterior, como 192.168.xxx.xxx
. Haga clic en el botón "▶" y disfrute del audio.
dirección=192.168.3.2 # cambiarlo.port=65530 # cambiarlo.sudo firewall-cmd --add-rich-rule="familia de reglas=dirección de destino ipv4=$dirección puerto puerto=$puerto protocolo=tcp aceptar"sudo firewall -cmd --add-rich-rule="familia de reglas=dirección de destino ipv4=$dirección puerto puerto=$puerto protocolo=udp aceptar"sudo firewall-cmd --tiempo de ejecución a permanente
sudo firewall-cmd --list-rich-rules
Producción:
familia de reglas="ipv4" dirección de destino="192.168.3.2" puerto puerto="65530" protocolo="tcp" aceptar familia de reglas="ipv4" dirección de destino="192.168.3.2" puerto puerto="65530" protocolo="udp" aceptar
dirección=192.168.3.2 # cambiarlo.port=65530 # cambiarlo.sudo firewall-cmd --remove-rich-rule="familia de reglas=dirección de destino ipv4=$dirección puerto puerto=$puerto protocolo=tcp aceptar"sudo firewall -cmd --remove-rich-rule="familia de reglas=dirección de destino ipv4=$dirección puerto puerto=$puerto protocolo=udp aceptar"sudo firewall-cmd --tiempo de ejecución a permanente
Hay dos tipos de formato de audio:
Capturar formato de audio
Transferir formato de audio
El formato de transferencia de audio son datos PCM sin comprimir y se mantienen iguales con el formato de captura de audio.
Puede abrir server.log
para ver el formato de transferencia de audio.
[2024-10-26 14:52:48.967] [info] AudioFormat: encoding: ENCODING_PCM_16BIT channels: 2 sample_rate: 44100
Como se muestra arriba, la codificación es 16 bit integer PCM
, el recuento de canales es 2
y la frecuencia de muestreo es 44.1kHz
.
En Android, AudioTrack API solo admite los formatos de audio PCM que se enumeran a continuación:
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
Audio Share admite estos 5 tipos de formato PCM, pero la disponibilidad de un formato específico depende del punto final de audio.
En Windows, el formato de captura de audio predeterminado depende del formato predeterminado del punto final de audio. Puede cambiarlo configurando el Panel de sonido ( mmsys.cpl
). En la pestaña Playback
del Panel de sonido, haga clic derecho en un punto final disponible, abra el Panel de propiedades, seleccione la pestaña Advanced
, cambie Default Format
y haga clic Apply
. Esto también se puede hacer en Realtek Audio Console
, si usa una tarjeta de audio Realtek. El formato de audio de captura debe tener los mismos canales y frecuencia de muestreo que el punto final de audio. Entonces, si desea cambiarlos, solo puede abrir el Panel de sonido y configurar el formato predeterminado. Para ser compatible con Linux, as-cmd
aún puede configurar --channels
o --sample-rate
en Windows. Sin embargo, recurrirá al formato de audio adecuado, porque en la mayoría de los casos no es compatible con lo esperado.
https://learn.microsoft.com/en-us/windows/win32/coreaudio/device-formats
En Linux, PipeWire podría haber proporcionado completamente el formato de captura de audio predeterminado. Sin embargo, la codificación de audio predeterminada puede ser plana, como SPA_AUDIO_FORMAT_F32P
. AudioTrack de Android no puede reproducirlo. Por lo tanto, la codificación de audio predeterminada se fuerza a SPA_AUDIO_FORMAT_F32_LE
(PCM flotante de 32 bits con little endian). Los canales predeterminados y la frecuencia de muestreo no se modifican y los proporciona PipeWire.
Tenga en cuenta que disminuir la codificación bit a bit o la frecuencia de muestreo puede disminuir el ancho de banda de la red, pero también puede aumentar el ruido en blanco, también conocido como pérdida de audio.
El volumen final que escucha se ve afectado por el siguiente volumen:
Volumen del sistema de PC.
Volumen del reproductor de audio en la PC.
Volumen de medios del sistema Android.
"Volumen de audio" en la aplicación de Android.
"Potenciador de sonoridad" en la aplicación de Android.
Todos son independientes. Si maximiza el volumen de su PC y reproductor de audio y todavía siente que no es suficiente, pero no desea cambiar el volumen del sistema Android, puede aumentar "Loudness Enhancer" en la configuración de la aplicación. No afectará el volumen del sistema. El "Volumen de audio" de la aplicación puede disminuir el volumen que escucha sin cambiar el volumen del sistema.
¡¡¡Demasiado volumen dañará tu oído!!! "Loudness Enhancer" tiene un límite de 3000mB
. Es suficiente para la mayoría de los casos. Si aún necesita más volumen, simplemente cambie directamente el volumen del sistema Android.
La tarjeta de sonido Realtek puede hacer que el punto final de audio esté disponible cuando el altavoz no está conectado. Simplemente abra Realtek Audio Console, seleccione la pestaña "Configuración avanzada del dispositivo" y active la opción "Desactivar el cuadro de diálogo emergente frontal del panel frontal". Luego aparecerá el punto final de audio. Otras tarjetas de sonido pueden tener opciones similares. Si no puede encontrarlo, pase al Método 2.
En la actualidad, no he encontrado una manera de crear un punto final de audio virtual. La única forma de lograrlo es escribir un controlador de dispositivo de audio virtual. Pero necesita un Certificado de firma de código EV para firmarlo. De lo contrario, el usuario no podrá instalarlo. No quiero pagar por ello. Y existen muchos controladores de dispositivos de audio virtuales de terceros. Puede encontrar uno o publicar uno que conozca en Controlador de dispositivo de audio virtual en Windows. Generalmente, un controlador tiene un archivo INF. Haga clic derecho y haga clic en "Instalar" para instalarlo.
Gracias a PipeWire, es muy fácil para Linux crear un punto final de audio virtual, incluso sin privilegios de root. Simplemente copie la siguiente configuración en ~/.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 } } ]
Luego ejecute systemctl --user restart pipewire
para reiniciar el servicio PipeWire.
Finalmente, puede ver el punto final agregado "Audio Share Sink".
[abc@localhost ~]$ como-cmd -l [2024-03-17 22:46:14.563] [información] pipewire header_version: 0.3.48, biblioteca_version: 0.3.67 endpoint_list: * id: 30 nombre: Audio Share Sink Total: 1
Aplicación de Android
Android Studio importará todas las dependencias automáticamente.
Servidor MFC
Se requiere vcpkg para instalar dependencias.
Ejecute vcpkg install asio protobuf spdlog[wchar] wil nlohmann-json
para instalar deps. El triplete vcpkg es x64-windows-static-md
.
Para la compilación se requiere Visual Studio 2022 con la carga de trabajo "Desarrollo de escritorio con C++" y la opción "C++ MFC para las últimas herramientas de compilación v143 (x86 y x64)".
CMD del servidor
Se requiere CMake y un compilador compatible con C++20. Linux también necesita libpipewire-dev
o pipewire-devel
.
Instale vcpkg y configure VPCKG_ROOT
env. Este entorno es requerido por CMakePresets.json
.
Ejecute vcpkg install asio protobuf cxxopts
para instalar deps. El triplete vcpkg es x64-windows-static-md
para Windows, x64-linux
para Linux. Además, Windows necesita ejecutar vcpkg install spdlog[wchar] wil
y Linux necesita ejecutar vcpkg install spdlog
.
Ejecute cmake --preset linux-Release
para configurar.
Ejecute cmake --build --preset linux-Release
para compilar. El as-cmd
se encuentra en out/install/linux-Release/bin/as-cmd
.
Para Windows, reemplace linux
por windows
en los dos pasos anteriores.
Este proyecto está bajo la licencia 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 bajo la licencia MIT
WIL con licencia bajo la licencia MIT
Asio tiene licencia BSL-1.0.
Buffers de protocolo licenciados bajo la LICENCIA.
spdlog con licencia MIT.
{fmt} autorizado bajo la LICENCIA.
cxxopts con licencia bajo la licencia MIT
Netty tiene licencia Apache-2.0.
Componentes de materiales para Android con licencia Apache-2.0.
Complemento Protobuf para Gradle con licencia bajo LICENCIA.
PipeWire tiene licencia bajo la LICENCIA.
Moscú
YuHuanTin