Audio Share может передавать аудио с компьютера Windows/Linux на телефон Android по сети, поэтому ваш телефон становится динамиком компьютера. (Вам не нужно покупать новый динамик?.)
ПК с Windows или Linux в качестве сервера.
Windows 10+ x86_64 с распространяемым компонентом Microsoft Visual C++ 2015–2022 (x64) (vc_redist.x64.exe).
Linux с PipeWire.
Аудиоплеер на ПК может работать нормально. То есть у вас должна быть звуковая карта и конечная точка звука находится в доступном состоянии. В противном случае вам потребуются дополнительные настройки.
Android 6.0 (API 23)+.
Загрузите APK-файл и AudioShareServer.exe из последней версии.
Откройте AudioShareServer.exe на своем компьютере. Аргументы по умолчанию могут работать хорошо. Но вам, возможно, все равно придется проверить часть «Хост». Обычно это адрес локальной сети, например 192.168.xxx.xxx
. Убедитесь, что ваш телефон может подключиться к компьютеру через этот IP-адрес. Затем нажмите кнопку «Запустить сервер».
Установите APK на свой телефон и откройте его. Измените часть «Хост», чтобы убедиться, что она совпадает со значением предыдущего шага, например 192.168.xxx.xxx
. Нажмите кнопку «▶» и наслаждайтесь звуком?.
Осторожность
В настоящее время это приложение не поддерживает функцию автоматического повторного подключения. Как только приложение будет закрыто или отключено с помощью функции энергосбережения Android, воспроизведение звука прекратится. Рекомендуется добавить приложение в белый список энергосбережения. Для этого вы можете нажать «Запросить игнорирование оптимизации батареи» в настройках приложения.
Загрузите audio-share-server-cmd-windows.zip
для Windows и audio-share-server-cmd-linux.tar.gz
для Linux.
Распакуйте архивный файл.
Просто запустите as-cmd -b
чтобы запустить сервер. Он будет использовать первый адрес локальной сети в качестве хоста с портом 65530
и выберет конечную точку аудио по умолчанию. Большую часть времени он работает нормально. Если нет, используйте as-cmd -h
чтобы просмотреть справку, и установите правильные аргументы.
Windows автоматически попросит вас добавить правила брандмауэра, а Linux этого не сделает. Поэтому, если в вашем дистрибутиве Linux включен брандмауэр, вам необходимо настроить брандмауэр вручную.
Установите APK на свой телефон и откройте его. Измените часть «Хост», чтобы убедиться, что она совпадает со значением предыдущего шага, например 192.168.xxx.xxx
. Нажмите кнопку «▶» и наслаждайтесь звуком?.
адрес=192.168.3.2 # изменить it.port=65530 # изменить его.sudo firewall-cmd --add-rich-rule="семейство правил=ipv4 адрес назначения=$адрес порта порт=$port протокол=tcp Accept"sudo firewall -cmd --add-rich-rule="семейство правил=адрес назначения IPv4=$адрес порта порт=$порт протокол=udp Accept"sudo firewall-cmd --время выполнения-постоянно
sudo firewall-cmd --list-rich-rules
Выход:
семейство правил="ipv4" адрес назначения="192.168.3.2" порт порт="65530" протокол="tcp" принять семейство правил="ipv4" адрес назначения="192.168.3.2" порт порт="65530" протокол="udp" принять
адрес=192.168.3.2 # изменить его.порт=65530 # изменить его.sudo firewall-cmd --remove-rich-rule="семейство правил=адрес назначения IPv4=$адрес порта порт=$порт протокол=tcp принять"sudo firewall -cmd --remove-rich-rule="семейство правил=адрес назначения IPv4=$адрес порта порт=$порт протокол=udp Accept"sudo firewall-cmd --runtime-to-permanent
Существует два типа аудиоформата:
Захват аудио формата
Передача аудиоформата
Формат передаваемого аудио представляет собой несжатые данные PCM и соответствует формату аудиозахвата.
Вы можете открыть server.log
чтобы увидеть формат передаваемого аудио.
[2024-10-26 14:52:48.967] [info] AudioFormat: encoding: ENCODING_PCM_16BIT channels: 2 sample_rate: 44100
Как показано выше, кодировка — 16 bit integer PCM
, количество каналов — 2
, а частота дискретизации — 44.1kHz
.
В Android AudioTrack API поддерживает только аудиоформаты PCM, перечисленные ниже:
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 поддерживает эти 5 типов форматов PCM, но доступность определенного формата зависит от конечной точки аудио.
В Windows формат захвата звука по умолчанию зависит от формата по умолчанию конечной точки звука. Вы можете изменить его, установив Sound Panel ( mmsys.cpl
). На вкладке Playback
панели «Звук» щелкните правой кнопкой мыши одну доступную конечную точку, откройте панель «Свойства», выберите вкладку Advanced
, измените Default Format
и нажмите Apply
. Это также можно сделать в Realtek Audio Console
, если вы используете звуковую карту Realtek. Формат захвата аудио должен иметь те же каналы и частоту дискретизации, что и конечная точка звука. Поэтому, если вы хотите изменить их, вы можете только открыть звуковую панель и установить формат по умолчанию. Чтобы быть совместимым с Linux, as-cmd
по-прежнему может устанавливать --channels
или --sample-rate
в Windows. Однако он вернется к правильному аудиоформату, поскольку в большинстве случаев он не поддерживает ожидаемое.
https://learn.microsoft.com/en-us/windows/win32/coreaudio/device-formats
В Linux формат захвата звука по умолчанию мог быть полностью предоставлен PipeWire. Однако кодирование звука по умолчанию может быть планарным, например SPA_AUDIO_FORMAT_F32P
. AudioTrack Android не может воспроизвести его. Таким образом, кодировка звука по умолчанию установлена на SPA_AUDIO_FORMAT_F32_LE
(32-битный PCM с плавающей запятой и прямым порядком байтов). Каналы по умолчанию и частота дискретизации не меняются и задаются PipeWire.
Обратите внимание, что уменьшение побитового кодирования или частоты дискретизации может уменьшить пропускную способность сети, но также может увеличить пустой шум, также известный как потеря звука.
На окончательную громкость, которую вы слышите, влияет следующая громкость:
Системная громкость ПК.
Громкость аудиоплеера на ПК.
Громкость мультимедиа системы Android.
«Громкость звука» в приложении для Android.
«Усилитель громкости» в приложении для Android.
Они все независимы. Если вы установили максимальную громкость своего ПК и аудиоплеера и все еще чувствуете, что этого недостаточно, но не хотите менять громкость системы Android, вы можете увеличить громкость «Усилитель громкости» в настройках приложения. На громкость системы это не повлияет. «Громкость звука» в приложении позволяет уменьшить громкость звука без изменения громкости системы.
Слишком большая громкость повредит ухо!!! «Loudness Enhancer» имеет ограничение в 3000mB
. Этого достаточно для большинства случаев. Если вам все еще нужно больше громкости, просто измените громкость системы Android напрямую.
Звуковая карта Realtek может сделать конечную точку звука доступной, когда динамик не подключается. Просто откройте Realtek Audio Console, выберите вкладку «Дополнительные настройки устройства» и включите параметр «Отключить всплывающее диалоговое окно на передней панели». Затем появится конечная точка звука. Другие звуковые карты могут иметь аналогичные параметры. Если не можете найти, то переходите к Способу 2.
В настоящее время я не нашел способа создать конечную точку виртуального звука. Единственный способ добиться этого — написать драйвер виртуального аудиоустройства. Но для его подписи требуется сертификат подписи кода EV. В противном случае пользователь не сможет его установить. Я не хочу за это платить. И существует множество сторонних драйверов виртуальных аудиоустройств. Вы можете найти или опубликовать тот, который вам известен, в разделе «Драйвер виртуального аудиоустройства» в Windows. Обычно драйвер имеет INF-файл. Щелкните его правой кнопкой мыши и выберите «Установить», чтобы установить его.
Благодаря PipeWire в Linux очень легко создать виртуальную конечную точку аудио даже без привилегий root. Просто скопируйте приведенную ниже конфигурацию в ~/.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 } } ]
Затем запустите systemctl --user restart pipewire
чтобы перезапустить службу PipeWire.
Наконец, вы можете увидеть добавленную конечную точку «Приемник общего доступа к аудио».
[abc@localhost ~]$ as-cmd -l [2024-03-17 22:46:14.563] [информация] Pipewire header_version: 0.3.48, Library_version: 0.3.67 endpoint_list: * id: 30 name: Audio Share Sink всего: 1
Android-приложение
Android Studio автоматически импортирует все зависимости.
Сервер МФЦ
vcpkg необходим для установки зависимостей.
Запустите vcpkg install asio protobuf spdlog[wchar] wil nlohmann-json
чтобы установить deps. Триплет vcpkg — x64-windows-static-md
.
Для компиляции требуется Visual Studio 2022 с рабочей нагрузкой «Разработка настольных компьютеров на C++» и опцией «C++ MFC для новейших инструментов сборки v143 (x86 и x64)».
Сервер CMD
Требуется CMake и поддержка компилятора C++20. Linux также нуждается в libpipewire-dev
или pipewire-devel
.
Установите vcpkg и установите окружение VPCKG_ROOT
. Этот env необходим для CMakePresets.json
.
Запустите vcpkg install asio protobuf cxxopts
чтобы установить deps. Триплет vcpkg — x64-windows-static-md
для Windows и x64-linux
для Linux. Кроме того, в Windows необходимо запустить vcpkg install spdlog[wchar] wil
, а в Linux — vcpkg install spdlog
.
Запустите cmake --preset linux-Release
для настройки.
Запустите cmake --build --preset linux-Release
для сборки. as-cmd
находится по адресу out/install/linux-Release/bin/as-cmd
.
Для Windows замените linux
на windows
в предыдущих двух шагах.
Этот проект распространяется по лицензии 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 под лицензией MIT
WIL лицензируется по лицензии MIT.
Asio лицензируется по лицензии BSL-1.0.
Протокольные буферы лицензируются по ЛИЦЕНЗИИ.
spdlog лицензируется по лицензии MIT.
{fmt} лицензируется по ЛИЦЕНЗИИ.
cxxopts под лицензией MIT
Netty лицензируется по лицензии Apache-2.0.
Material Components для Android под лицензией Apache-2.0.
Плагин Protobuf для Gradle лицензируется по ЛИЦЕНЗИИ.
PipeWire лицензируется по ЛИЦЕНЗИИ.
Москлия
ЮХуаньТин