Audio Share peut partager l'audio d'un ordinateur Windows/Linux avec un téléphone Android via le réseau, afin que votre téléphone devienne le haut-parleur de l'ordinateur. (Vous n'avez pas besoin d'acheter un nouveau haut-parleur ?.)
Un PC avec Windows ou Linux comme serveur.
Windows 10+ x86_64 avec Microsoft Visual C++ 2015-2022 redistribuable (x64) (vc_redist.x64.exe).
Linux avec PipeWire.
Le lecteur audio sur PC peut fonctionner normalement. C'est-à-dire que vous devez disposer d'une carte son et que le point de terminaison audio est dans un état disponible. Sinon, vous avez besoin de configurations supplémentaires.
Android 6.0 (API 23)+.
Téléchargez le fichier APK et AudioShareServer.exe à partir de la dernière version.
Ouvrez AudioShareServer.exe sur votre ordinateur. Les arguments par défaut peuvent bien fonctionner. Mais vous devrez peut-être quand même vérifier la partie "Hôte". Il s'agit normalement de l'adresse LAN, par exemple 192.168.xxx.xxx
. Assurez-vous que votre téléphone peut connecter votre ordinateur via cette adresse IP. Cliquez ensuite sur le bouton "Démarrer le serveur".
Installez l'APK sur votre téléphone et ouvrez-le. Modifiez la partie "Hôte" pour vous assurer qu'elle est identique à la valeur de l'étape précédente, telle que 192.168.xxx.xxx
. Cliquez sur le bouton "▶" et profitez de l'audio ?.
Prudence
Cette application ne prend actuellement pas en charge la fonction de reconnexion automatique. Une fois l'application supprimée ou déconnectée par l'économiseur d'énergie Android, la lecture audio s'arrêtera. Il est recommandé d'ajouter l'application à la liste blanche des économiseurs d'énergie. Pour ce faire, vous pouvez appuyer sur « Demander à ignorer les optimisations de la batterie » dans les paramètres de l'application.
Téléchargez audio-share-server-cmd-windows.zip
pour Windows, audio-share-server-cmd-linux.tar.gz
pour Linux.
Décompressez le fichier d'archive.
Exécutez simplement as-cmd -b
pour démarrer le serveur. Il utilisera la première adresse LAN comme hôte avec le port 65530
et sélectionnera un point de terminaison audio par défaut. La plupart du temps, cela fonctionne bien. Sinon, utilisez as-cmd -h
pour voir l'aide et définissez les arguments appropriés.
Windows vous demandera d'ajouter automatiquement des règles de pare-feu, contrairement à Linux. Donc, si votre distribution Linux active le pare-feu, vous devez configurer le pare-feu manuellement.
Installez l'APK sur votre téléphone et ouvrez-le. Modifiez la partie "Hôte" pour vous assurer qu'elle est identique à la valeur de l'étape précédente, telle que 192.168.xxx.xxx
. Cliquez sur le bouton "▶" et profitez de l'audio ?.
adresse=192.168.3.2 # change it.port=65530 # change it.sudo firewall-cmd --add-rich-rule="rule family=ipv4 adresse de destination=$address port port=$port protocol=tcp accept"sudo pare-feu -cmd --add-rich-rule="famille de règles=adresse de destination ipv4=$adresse du port port=$port protocole=udp accepter"sudo pare-feu-cmd --d'exécution à permanent
sudo pare-feu-cmd --list-rich-rules
Sortir:
famille de règles = "ipv4" adresse de destination = "192.168.3.2" port port = "65530" protocole = "tcp" accepter famille de règles = "ipv4" adresse de destination = "192.168.3.2" port port = "65530" protocole = "udp" accepter
adresse=192.168.3.2 # change it.port=65530 # change it.sudo firewall-cmd --remove-rich-rule="rule family=ipv4 adresse de destination=$address port port=$port protocol=tcp accept"sudo pare-feu -cmd --remove-rich-rule="famille de règles=adresse de destination ipv4=$adresse port port=$port protocole=udp accepter"sudo pare-feu-cmd --d'exécution à permanent
Il existe deux types de formats audio :
Capturer le format audio
Format de transfert audio
Le format audio de transfert est constitué de données PCM non compressées et reste identique au format audio de capture.
Vous pouvez ouvrir server.log
pour voir le format audio du transfert.
[2024-10-26 14:52:48.967] [info] AudioFormat: encoding: ENCODING_PCM_16BIT channels: 2 sample_rate: 44100
Comme indiqué ci-dessus, le codage est 16 bit integer PCM
, le nombre de canaux est 2
et la fréquence d'échantillonnage est 44.1kHz
.
Sur Android, l'API AudioTrack prend uniquement en charge les formats audio PCM répertoriés ci-dessous :
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 prend en charge ces 5 types de format PCM, mais la disponibilité d'un format spécifique dépend du point de terminaison audio.
Sous Windows, le format audio de capture par défaut dépend du format par défaut du point de terminaison audio. Vous pouvez le modifier en configurant Sound Panel ( mmsys.cpl
). Dans l'onglet Playback
du Panneau Son, cliquez avec le bouton droit sur un point de terminaison disponible, ouvrez le Panneau Propriétés, sélectionnez l'onglet Advanced
, modifiez Default Format
et cliquez sur Apply
. Cela peut également être fait dans Realtek Audio Console
, si vous utilisez une carte audio Realtek. Le format audio de capture doit avoir les mêmes canaux et la même fréquence d'échantillonnage que le point de terminaison audio. Donc, si vous souhaitez les modifier, vous pouvez uniquement ouvrir le Panneau Son et définir le format par défaut. Pour être compatible avec Linux, as-cmd
peut toujours définir --channels
ou --sample-rate
sous Windows. Cependant, il reviendra au format audio approprié, car il ne prend pas en charge ce qui est attendu dans la plupart des cas.
https://learn.microsoft.com/en-us/windows/win32/coreaudio/device-formats
Sous Linux, le format audio de capture par défaut aurait pu être entièrement fourni par PipeWire. Cependant, le codage audio par défaut peut être planaire, tel que SPA_AUDIO_FORMAT_F32P
. AudioTrack d'Android ne peut pas le lire. Ainsi, l'encodage audio par défaut est forcé à SPA_AUDIO_FORMAT_F32_LE
(PCM flottant 32 bits avec petit endian). Les canaux et la fréquence d'échantillonnage par défaut sont intacts et donnés par PipeWire.
Notez que diminuer le codage au niveau du bit ou la fréquence d'échantillonnage peut diminuer la bande passante du réseau, mais peut également augmenter le bruit vide, également appelé perte audio.
Le volume final que vous entendez est affecté par le volume suivant :
Volume du système PC.
Volume du lecteur audio sur PC.
Volume multimédia du système Android.
"Volume audio" sur l'application Android.
"Loudness Enhancer" sur l'application Android.
Ils sont tous indépendants. Si vous augmentez le volume de votre PC et de votre lecteur audio et que vous pensez toujours que ce n'est pas suffisant, mais que vous ne souhaitez pas modifier le volume du système Android, vous pouvez augmenter « Loudness Enhancer » dans les paramètres de l'application. Cela n'affectera pas le volume du système. Le « Volume audio » sur l'application peut diminuer le volume que vous entendez sans modifier le volume du système.
Trop de volume vous fera mal à l'oreille !!! "Loudness Enhancer" a une limite de 3000mB
C'est suffisant dans la plupart des cas. Si vous avez encore besoin de plus de volume, modifiez simplement directement le volume du système Android.
La carte son Realtek peut rendre le point de terminaison audio disponible lorsque le haut-parleur ne se branche pas. Ouvrez simplement Realtek Audio Console, sélectionnez l'onglet « Paramètres avancés de l'appareil » et activez l'option « Désactiver la boîte de dialogue contextuelle du panneau avant ». Ensuite, le point de terminaison audio apparaîtra. D'autres cartes son peuvent avoir des options similaires. Si vous ne trouvez pas, passez à la méthode 2.
À l'heure actuelle, je n'ai pas trouvé de moyen de créer un point de terminaison audio virtuel. La seule façon d’y parvenir est d’écrire un pilote de périphérique audio virtuel. Mais il faut un certificat de signature de code EV pour le signer. Sinon, l'utilisateur ne pourra pas l'installer. Je ne veux pas payer pour ça. Et il existe de nombreux pilotes de périphériques audio virtuels tiers. Vous pouvez en trouver un ou en publier un que vous connaissez sur Virtual Audio Device Driver sous Windows. Généralement, un pilote possède un fichier INF. Faites un clic droit dessus et cliquez sur "Installer" pour l'installer.
Grâce à PipeWire, il est très simple pour Linux de créer un point de terminaison audio virtuel, même sans privilège root. Copiez simplement la configuration ci-dessous dans ~/.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 } } ]
Exécutez ensuite systemctl --user restart pipewire
pour redémarrer le service PipeWire.
Enfin, vous pouvez voir le point de terminaison ajouté « Audio Share Sink ».
[abc@localhost ~]$ as-cmd -l [2024-03-17 22:46:14.563] [info] pipewire header_version : 0.3.48, library_version : 0.3.67 endpoint_list : * id : 30 nom : Récepteur de partage audio totale : 1
Application Android
Android Studio importera automatiquement toutes les dépendances.
Serveur MFC
vcpkg est requis pour les dépendances d'installation.
Exécutez vcpkg install asio protobuf spdlog[wchar] wil nlohmann-json
pour installer deps. Le triplet vcpkg est x64-windows-static-md
.
Visual Studio 2022 avec la charge de travail « Développement de bureau avec C++ » et l'option « C++ MFC pour les derniers outils de build v143 (x86 et x64) » sont requis pour la compilation.
CMD du serveur
CMake et un compilateur prenant en charge C++20 sont requis. Linux a également besoin libpipewire-dev
ou pipewire-devel
.
Installez vcpkg et définissez VPCKG_ROOT
env. Cet environnement est requis par CMakePresets.json
.
Exécutez vcpkg install asio protobuf cxxopts
pour installer deps. Le triplet vcpkg est x64-windows-static-md
pour Windows, x64-linux
pour Linux. De plus, Windows doit exécuter vcpkg install spdlog[wchar] wil
et Linux doit exécuter vcpkg install spdlog
.
Exécutez cmake --preset linux-Release
pour configurer.
Exécutez cmake --build --preset linux-Release
pour construire. Le as-cmd
se trouve dans out/install/linux-Release/bin/as-cmd
.
Pour Windows, remplacez linux
par windows
au cours des deux étapes précédentes.
Ce projet est sous licence 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 sous licence MIT
WIL sous licence MIT
Asio sous licence BSL-1.0.
Tampons de protocole sous licence LICENCE.
spdlog sous licence MIT.
{fmt} sous licence sous la LICENCE.
cxxopts sous licence MIT
Netty sous licence Apache-2.0.
Composants matériels pour Android sous licence Apache-2.0.
Plugin Protobuf pour Gradle sous licence LICENCE.
PipeWire sous licence sous LICENCE.
Mosklia
YuHuanTin