오디오 공유는 네트워크를 통해 Windows/Linux 컴퓨터의 오디오를 Android 휴대폰과 공유할 수 있으므로 휴대폰이 컴퓨터의 스피커가 됩니다. (새 스피커를 살 필요는 없나요?.)
Windows 또는 Linux를 서버로 사용하는 PC.
Microsoft Visual C++ 2015-2022 재배포 가능 패키지(x64)(vc_redist.x64.exe)가 포함된 Windows 10+ x86_64.
PipeWire를 사용하는 Linux.
PC의 오디오 플레이어는 정상적으로 작동할 수 있습니다. 즉, 사운드 카드가 있어야 하고 오디오 끝점이 사용 가능한 상태에 있어야 합니다. 그렇지 않으면 몇 가지 추가 설정이 필요합니다.
안드로이드 6.0(API 23)+.
최신 릴리스에서 APK 파일과 AudioShareServer.exe를 다운로드하세요.
컴퓨터에서 AudioShareServer.exe를 엽니다. 기본 인수가 잘 작동할 수 있습니다. 하지만 "호스트" 부분을 확인해야 할 수도 있습니다. 일반적으로 192.168.xxx.xxx
와 같은 LAN 주소입니다. 휴대전화가 이 IP 주소를 통해 컴퓨터에 연결할 수 있는지 확인하세요. 그런 다음 "서버 시작"버튼을 클릭하십시오.
휴대폰에 APK를 설치하고 엽니다. "호스트" 부분을 수정하여 192.168.xxx.xxx
와 같은 이전 단계의 값과 동일한지 확인하세요. "▶" 버튼을 클릭하고 오디오를 감상해 보세요.
주의
이 앱은 현재 자동 재연결 기능을 지원하지 않습니다. Android 절전 모드로 인해 앱이 종료되거나 연결이 끊어지면 오디오 재생이 중지됩니다. 절전 기능 화이트리스트에 앱을 추가하는 것이 좋습니다. 이렇게 하려면 앱 설정에서 "배터리 최적화 무시 요청"을 누르세요.
Windows용 audio-share-server-cmd-windows.zip
, Linux용 audio-share-server-cmd-linux.tar.gz
다운로드하세요.
아카이브 파일의 압축을 풉니다.
서버를 시작하려면 as-cmd -b
실행하세요. 첫 번째 LAN 주소를 포트 65530
의 호스트로 사용하고 기본 오디오 끝점을 선택합니다. 대부분의 경우에는 정상적으로 작동합니다. 그렇지 않은 경우 as-cmd -h
사용하여 도움말을 보고 적절한 인수를 설정하십시오.
Windows에서는 자동으로 방화벽 규칙을 추가하라는 메시지를 표시하지만 Linux에서는 그렇지 않습니다. 따라서 Linux 배포판에서 방화벽을 활성화하는 경우 방화벽을 수동으로 구성해야 합니다.
휴대폰에 APK를 설치하고 엽니다. "호스트" 부분을 수정하여 192.168.xxx.xxx
와 같은 이전 단계의 값과 동일한지 확인하세요. "▶" 버튼을 클릭하고 오디오를 감상해 보세요.
address=192.168.3.2 # it.port=65530 변경 # it.sudo Firewall-cmd --add-rich-rule="rule family=ipv4 대상 주소=$address 포트 port=$port 프로토콜=tcp accept"sudo 방화벽 변경 -cmd --add-rich-rule="rule family=ipv4 대상 주소=$address 포트 포트=$port 프로토콜=udp accept"sudo Firewall-cmd --런타임에서 영구적으로
sudo 방화벽-cmd --list-rich-rules
산출:
규칙 패밀리="ipv4" 대상 주소="192.168.3.2" 포트 포트="65530" 프로토콜="tcp" 수락 규칙 패밀리="ipv4" 대상 주소="192.168.3.2" 포트 포트="65530" 프로토콜="udp" 수락
address=192.168.3.2 # it.port=65530 변경 # it.sudo Firewall-cmd --remove-rich-rule="rule family=ipv4 대상 주소=$address 포트 port=$port 프로토콜=tcp accept"sudo 방화벽 변경 -cmd --remove-rich-rule="rule family=ipv4 대상 주소=$address 포트 포트=$port 프로토콜=udp accept"sudo Firewall-cmd --런타임에서 영구적으로
오디오 형식에는 두 가지 종류가 있습니다.
오디오 형식 캡처
오디오 형식 전송
전송 오디오 형식은 압축되지 않은 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
오디오 공유는 이러한 5가지 종류의 PCM 형식을 지원하지만 특정 형식의 사용 가능 여부는 오디오 엔드포인트에 따라 다릅니다.
Windows에서 기본 캡처 오디오 형식은 오디오 끝점의 기본 형식에 따라 다릅니다. 사운드 패널( mmsys.cpl
)을 설정하여 변경할 수 있습니다. 사운드 패널의 Playback
탭에서 사용 가능한 끝점 하나를 마우스 오른쪽 버튼으로 클릭하고 속성 패널을 열고 Advanced
탭을 선택한 다음 Default Format
변경하고 Apply
클릭합니다. Realtek 오디오 카드를 사용하는 경우 Realtek Audio Console
에서도 이 작업을 수행할 수 있습니다. 캡처 오디오 형식은 오디오 엔드포인트와 동일한 채널 및 샘플링 속도를 가져야 합니다. 따라서 이를 변경하려면 사운드 패널을 열고 기본 형식을 설정하면 됩니다. Linux와 호환되기 위해 as-cmd
여전히 Windows에서 --channels
또는 --sample-rate
설정할 수 있습니다. 그러나 대부분의 경우 예상되는 오디오 형식을 지원하지 않기 때문에 적절한 오디오 형식으로 대체됩니다.
https://learn.microsoft.com/en-us/windows/win32/coreaudio/device-formats
Linux에서는 기본 캡처 오디오 형식이 PipeWire에 의해 완전히 제공되었을 수 있습니다. 그러나 기본 오디오 인코딩은 SPA_AUDIO_FORMAT_F32P
와 같이 평면형일 수 있습니다. Android의 AudioTrack에서는 재생할 수 없습니다. 따라서 기본 오디오 인코딩은 SPA_AUDIO_FORMAT_F32_LE
(리틀 엔디안이 있는 32비트 부동 PCM)로 강제 설정됩니다. 기본 채널과 샘플 속도는 그대로 유지되며 PipeWire에서 제공됩니다.
인코딩 비트 단위 또는 샘플링 속도를 줄이면 네트워크 대역폭이 줄어들 수 있지만 오디오 손실이라고도 하는 공백 소음이 증가할 수도 있습니다.
최종적으로 들리는 볼륨은 다음 볼륨의 영향을 받습니다.
PC 시스템 볼륨.
PC의 오디오 플레이어 볼륨.
Android 시스템 미디어 볼륨.
Android 앱의 "오디오 볼륨".
Android 앱의 "Loudness Enhancer".
그들은 모두 독립적입니다. PC와 오디오 플레이어의 볼륨을 최대로 설정했지만 여전히 충분하지 않다고 생각하지만 Android 시스템 볼륨을 변경하고 싶지 않은 경우 앱 설정에서 "Loudness Enhancer"를 늘릴 수 있습니다. 시스템 볼륨에는 영향을 미치지 않습니다. 앱의 "오디오 볼륨"은 시스템 볼륨을 변경하지 않고도 듣는 볼륨을 줄일 수 있습니다.
너무 큰 소리를 내면 귀가 아프게 됩니다!!! "Loudness Enhancer"의 제한은 3000mB
입니다. 대부분의 경우 충분합니다. 여전히 더 큰 소리가 필요하다면 Android 시스템 볼륨을 직접 변경하세요.
Realtek 사운드 카드는 스피커가 연결되지 않은 경우 오디오 엔드포인트를 사용할 수 있도록 할 수 있습니다. Realtek 오디오 콘솔을 열고 "장치 고급 설정" 탭을 선택한 다음 "전면 패널 전면 팝업 대화 상자 비활성화" 옵션을 켜십시오. 그러면 오디오 끝점이 표시됩니다. 다른 사운드 카드에도 비슷한 옵션이 있을 수 있습니다. 찾을 수 없으면 방법 2를 사용하세요.
현재 가상 오디오 엔드포인트를 생성하는 방법을 찾지 못했습니다. 이를 달성하는 유일한 방법은 가상 오디오 장치 드라이버를 작성하는 것입니다. 하지만 서명하려면 EV 코드 서명 인증서가 필요합니다. 그렇지 않으면 사용자가 설치할 수 없습니다. 나는 그 비용을 지불하고 싶지 않습니다. 그리고 기존의 타사 가상 오디오 장치 드라이버도 많이 있습니다. Windows의 가상 오디오 장치 드라이버에서 알고 있는 것을 찾거나 게시할 수 있습니다. 일반적으로 드라이버에는 INF 파일이 있습니다. 마우스 오른쪽 버튼을 클릭한 후 "설치"를 클릭하여 설치하세요.
PipeWire 덕분에 Linux는 루트 권한 없이도 가상 오디오 엔드포인트를 매우 쉽게 생성할 수 있습니다. 아래 구성을 ~/.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 서비스를 다시 시작하십시오.
마지막으로 추가된 엔드포인트 "Audio Share Sink"를 볼 수 있습니다.
[abc@localhost ~]$ as-cmd -l [2024-03-17 22:46:14.563] [정보] 파이프와이어 header_version: 0.3.48, library_version: 0.3.67 끝점_목록: * id: 30 이름: 오디오 공유 싱크 총: 1
안드로이드 앱
Android Studio는 모든 종속성을 자동으로 가져옵니다.
서버 MFC
종속성을 설치하려면 vcpkg가 필요합니다.
vcpkg install asio protobuf spdlog[wchar] wil nlohmann-json
실행하여 deps를 설치합니다. vcpkg 삼중항은 x64-windows-static-md
입니다.
컴파일하려면 "C++를 사용한 데스크톱 개발" 워크로드와 "최신 v143 빌드 도구(x86 및 x64)용 C++ MFC" 옵션이 포함된 Visual Studio 2022가 필요합니다.
서버 CMD
CMake 및 컴파일러 지원 C++20이 필요합니다. Linux에는 libpipewire-dev
또는 pipewire-devel
도 필요합니다.
vcpkg를 설치하고 VPCKG_ROOT
환경을 설정합니다. 이 환경은 CMakePresets.json
에 필요합니다.
vcpkg install asio protobuf cxxopts
실행하여 deps를 설치합니다. vcpkg 삼중항은 Windows의 경우 x64-windows-static-md
이고 Linux의 경우 x64-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 라이선스에 따라 라이선스가 부여되었습니다.
MIT 라이센스에 따라 라이센스가 부여된 WIL
Asio는 BSL-1.0 라이센스에 따라 라이센스를 받았습니다.
라이센스에 따라 라이센스가 부여된 프로토콜 버퍼.
spdlog는 MIT 라이센스에 따라 라이센스가 부여되었습니다.
{fmt}는 LICENSE에 따라 라이센스가 부여되었습니다.
MIT 라이센스에 따라 라이센스가 부여된 cxxopts
Netty는 Apache-2.0 라이선스에 따라 라이선스가 부여되었습니다.
Apache-2.0 라이선스에 따라 라이선스가 부여된 Android용 머티리얼 구성요소입니다.
LICENSE에 따라 라이센스가 부여된 Gradle용 Protobuf 플러그인입니다.
PipeWire는 LICENSE에 따라 라이센스가 부여되었습니다.
모스크바
유환틴