# sndcpy (v1.1) This tool forwards audio from an Android 10 device to the computer. It does not require any _root_ access. It works on _GNU/Linux_, _Windows_ and _macOS_. The purpose is to enable [audio forwarding][issue14] while mirroring with [scrcpy]. However, it can be used independently. **Update: [scrcpy 2.0] now supports audio forwarding natively.** [issue14]: https://github.com/Genymobile/scrcpy/issues/14 [scrcpy]: https://github.com/Genymobile/scrcpy [scrcpy 2.0]: https://blog.rom1v.com/2023/03/scrcpy-2-0-with-audio/ ## Note This application is a proof-of-concept. But as explained below, many apps are restricted and could not forward the audio. ## Requirements - The Android device requires at least Android 10. - [VLC] must be installed on the computer. [vlc]: https://www.videolan.org/ ## Get the app Download the latest release: - [`sndcpy-v1.1.zip`][release] <sub>SHA-256: `b045320ddddbc5a237d6d95213c664f03b2f46ef8bbfcef91c2d95644ed42bbc`</sub> - [`sndcpy-with-adb-windows-v1.1.zip`][release-adb] <sub>SHA-256: `0b93c846f574df3f38f53eeee44b1a35b863a49465da8f5cd5b1b69a29305901`</sub> _On Windows, for simplicity, take the second archive, which also contains `adb`._ [release]: https://github.com/rom1v/sndcpy/releases/download/v1.1/sndcpy-v1.1.zip [release-adb]: https://github.com/rom1v/sndcpy/releases/download/v1.1/sndcpy-with-adb-windows-v1.1.zip Alternatively, you could [build the app][BUILD]. [BUILD]: BUILD.md ## Run the app Plug an Android 10 device with USB debugging enabled, and execute: ```bash ./sndcpy ``` If several devices are connected (listed by `adb devices`): ```bash ./sndcpy <serial> # replace <serial> by the device serial ``` _(omit `./` on Windows)_ It will install the app on the device and start forwarding audio. Press `Ctrl`+`c` in the terminal to stop (except on Windows, just disconnect the device or stop capture from the device notifications). VLC may print this error message once: ``` main stream error: connection error: Connection refused ``` It is "expected", just ignore it. The sound continues to be played on the device. The volume can be adjusted independently on the device and on the computer. ## Uninstall To uninstall the app from the device: ```bash adb uninstall com.rom1v.sndcpy ``` ## Apps restrictions `sndcpy` may only forward audio from apps which do not prevent audio capture. The rules are detailed in [§capture policy][rules]: > - By default, apps that target versions up to and including to Android 9.0 do > not permit playback capture. To enable it, include > `android:allowAudioPlaybackCapture="true"` in the app's `manifest.xml` file. > - By default, apps that target Android 10 (API level 29) or higher allow their > audio to be captured. To disable playback capture, include > `android:allowAudioPlaybackCapture="false"` in the app's `manifest.xml` > file. So some apps might need to be updated to support audio capture. [rules]: https://developer.android.com/guide/topics/media/playback-capture#capture_policy ## Audio delay This is just a proof-of-concept, so it's far from perfect. For example, jitter may cause VLC to automatically increase its buffering, causing an unacceptable delay: ``` main input error: ES_OUT_SET_(GROUP_)PCR is called too late (pts_delay increased to 377 ms) ``` In that case, just restart it. ## Environment variables The scripts [`sndcpy`](sndcpy) and [`sndcpy.bat`](sndcpy.bat) use some default values which can be overridden by environment variables. - `ADB`: the full path to the `adb` executable - `VLC`: the full path to the `vlc` executable - `SNDCPY_APK`: the full path to `sndcpy.apk` - `SNDCPY_PORT`: the local port to forward to communicate with the device ## Blog post - [Audio forwarding on Android 10][blogpost] [blogpost]: https://blog.rom1v.com/2020/06/audio-forwarding-on-android-10/