Help
AeroPlayne is a native app for Android that reimplements the audio component of Apple’s AirTunes protocol, also known as AirPlay® version 1. This enables an Android device to appear on your local Wi-Fi network as a “virtual speaker” (the receiver) which is capable of receiving audio sent from an iOS device using AirPlay® (the sender).
Additionally, it can:
- Record received audio as a file.
- Apply effects (equalizer, reverb, etc).
- Relay received audio:
- To devices supporting the Google Cast protocol, such as a Chromecast or a Connected TV.
- To software capable of receiving audio streams, such as a web browser, QuickTime Player, or VLC.
- To an internet radio hoster, such as streamerr or RCast. (I am not affiliated with any of these services).
Operation
Every AirPlay® receiver requires a name. It doesn’t need to be unique, but it’s a good idea nonetheless. By default, this is the model name of the device. You can choose something more memorable from the Settings page .
The app can be in 2 possible states:
Standby: The receiver is “asleep” , and not present on your network. This is indicated by the main switch being off and the glowing light at the lower right corner of the speaker.
On: The receiver is “awake” , and ready to receive audio. It has registered itself on your network and will appear in the AirPlay® menu on other devices connected to the same network. A persistent notification will also appear to indicate this state.
By default, the app will go back to sleep in 3 minutes if no audio is received. This is because while it is ready to receive, the device’s radio must remain active to listen for incoming connections, which increases battery usage. You can change or disable this duration from the Settings page.
When a connection is successfully formed, the app will enter its receiver mode.
- The toolbar shows the name of the device sending its audio to the receiver.
- The artwork, title, artist, and album name for the current track will be displayed.
- Buttons and sliders appear, enabling the sender’s volume, track position, and transport (play/pause, etc.) to be controlled.
The presence of these items depends on their being supplied by the sending device and its reported capabilities. This information is also shown in a persistent notification.
Note: Without an in-app Premium purchase, the app operates in trial mode. In general, all functionality is present but time or quality limited.
In this case, audio is limited to three minutes, after which noise is overlaid on the audio. You can reset the trial timer by disconnecting or restarting the audio.
Buffers
Audio streaming relies on buffers to account for fluctuating network conditions which could cause audio to skip or pause. Buffers help smooth over short interruptions by building up a backlog of audio.
By default, AirPlay® uses approximately 1.75 seconds of buffering, meaning it takes this long for the audio to be played by the receiving device. This is why there is (sometimes) a delay between an event on the sending device and its effects being heard on the receiving device, known as its latency.
Unlike many AirPlay® receivers, you can change the size of this buffer, which trades decreased latency for an increase in susceptibility to bad network connectivity. In practice, if you only require audio streaming, the buffer can be very small. For audio played alongside video, the buffer size will also influence its synchronization.
Note: A buffer size that is too small will cause audio to skip, drop out, glitch, and be generally unreliable.
To change the buffer size, choose Adjust Latency from the menu, or long-press on the status bar at the bottom-center of the screen. The dialog allows you to change the buffer size by dragging the slider or tapping the plus/minus buttons.
Audio Effects
At the bottom left corner of the screen, there is an equalizer icon, representing audio effects. When an effect is enabled, the icon is badged with the number of enabled effects. Tapping the icon causes a sheet to appear, containing a tab for all available effects. By default, Android supplies 5 effects:
- Equalizer
- Loudness
- Bass Boost
- Gain
- Reverb
Each effect can be enabled by toggling the switch in the toolbar. Enabled effects are indicated with a check mark alongside the name.
The current settings for all effects can be collected and saved as a preset. Preset management is controlled by items in the toolbar menu.
Metadata
At the bottom right corner of the screen is the metadata icon. Information provided by the current sender is displayed here. The data includes most of the standard details defined in the iTunes/Music app for Mac, such as Title, Artist & Album Name, Year of Release, etc. It may, depending on the source, show file-based information such as the source file location, the file size, and the bitrate.
Relay
Next to the metadata icon is the relay icon. This component forwards received audio to other networked devices. For example, when using Google Cast, it automatically relays the received audio to that device.
You can also use the relay manually. Switch the relay on, and one or more servers will be made available on your local network. Their addresses are listed at the bottom of the sheet. Each is now ready to receive connections from devices on your local network. You can enter these addresses into a ShoutCAST or IceCast compatible player, such as a web browser or VLC, and the audio will be relayed to it. Active connections to the server (its clients) will be listed in the sheet.
You can also proactively connect to an internet server, and the device will act as a source for that server to send audio to listeners on the wider internet. To do this, select Connect to Server from the menu. Details of what to enter in this dialog should be available from your service provider.
Note: In trial mode, only the lowest quality MP4 bitrate is available, and noise will overlay the audio after 3 minutes.
Recording
The app can record (or, more accurately, transcode) the audio it receives, meaning it can save an audio file consisting of the audio encoded as an MP4 file (for lossy-compressed AAC audio data), High-Efficiency AAC (HE-AAC) audio data (for lower bitrate, space-constrained, or voice-only situations), or a FLAC audio file (for perfect, losslessly-compressed audio). Choose the format from the Settings page.
Note: In trial mode, only the lowest quality MP4 bitrate is available, and recording is limited to 3 minutes.
A recording first requires a file to write to. Select Record from the menu, and choose a destination file location and name. The receiver is now primed to record. If it was already receiving audio, it will begin immediately. If not, it is now Ready to Record, meaning it will start recording when the audio starts. To stop recording, tap the Finish button.
It is possible to pause a recording without finishing it by pausing the sending device. As long as this doesn’t cause the device to disconnect itself or send silence (see Frequently Asked Questions), the recording will automatically resume when the received audio resumes.
Other Settings
These settings are available from the app’s Settings page:
Receiver
Block New Sender Devices: If enabled and a sender attempts to connect to the receiver while another sender is already connected, the currently connected sender is disconnected and replaced with the new sender. If disabled, the request to connect by the new sender is rejected. Disabled by default.
Presence Reporting: If enabled, the receiver reports to the sender all available audio outputs (speakers, headphones, etc.). The receiver may choose to abort its connection request based on this response. If disabled, the receiver always reports the presence of a speaker, which is the most compatible option. Disabled by default.
Sleep
Automatic Sleep Time Period: The amount of time the receiver can remain switched on without a connected sender device before it turns itself off. 3 minutes by default.
Start Sleep Timer When Paused: If enabled and the receiver has a connected sender but it is paused, the sleep timer is started. This guards against senders that remain connected indefinitely. Enabled by default.
Volume Level
Use Device Volume: If enabled, the in-app volume setting (determined by the slider control) matches the device’s media volume level. Changing one volume level will change the other. If disabled, the device’s volume sets the maximum volume, and the in-app volume control determines what fraction of that is the actual volume level. For example, if the device volume is at 60%, and the in-app volume slider control is at the halfway position, the actual volume is 30% (half of 60%). Disabled by default.
Synchronize Device Volumes: If enabled, a change to the sender device’s volume level or the Google Cast device’s volume level is synchronized between all connected devices (if possible). If not, each volume level is independent of the other. Enabled by default.
Recorder
- File Format: Controls the file type (the container) and the encoder used (the codec). You can choose the codec bit rate from here, but it is recommended that you choose a preset, as not all codec parameter combinations are guaranteed to work. 192Kb/s AAC by default.
Note: In trial mode, this option is not available. Only the lowest quality AAC bitrate is available.
- Direct File Writer: This is an advanced option that uses a different method to record files, which may speed up the final stage of recording when the Finish button has been tapped. This may be superfluous, but it is kept around just in case. See Frequently Asked Questions for more details. Enabled by default.
Relay
Port Number: Every server needs an address and a port number. This is the port number component of the address. You can specify a fixed number, but if it conflicts with an existing server, the relay won’t start. To automatically use the first available port, choose zero. But remember this will change each time. 9368 by default.
Allow All Client Types: If enabled, only Google Cast devices can use the relay. Disabled by default.
Application
- Share Crash Data: When a crash occurs, the app usually stops working. Enabling this generates a log of what caused the event, which is then sent to the developer to aid in fixing the issue. No personal data is included. It is strongly recommended to leave this option enabled. Enabled by default.
Analytics
Share Usage Data: At certain points within the lifecycle of the app, events can be generated and logged to show the developer how the app is being used, which features are being used, etc. Enabled by default.
Reset Analytics Data: All analytics events are associated with a unique, device-specific number. Tapping this causes that number to be regenerated. This number is also used to uniquely identify the receiver on your network, so resetting it will also make your device appear as a new device (with the same name).
Known Issues
- When switching between the pages of individual audio effects, the sheet hosting the controls for the effect may not be the correct height. I am investigating this issue.
- The “finalizing” stage of recording can sometimes take an abnormally long time. See the Frequently Asked Questions for details.
Frequently Asked Questions
Why does the app pause for a long time before the recording finishes?
For some reason, a certain stage of the recording process that only happens at the end can sometimes take a long time. If it takes more than a few seconds, a notice will appear. However the file will still eventually be written.
If this is the first time the delay occurs, the Direct File Writer setting will be automatically disabled. This makes it use a different method to ‘finish’ the file, which is likely to be faster, and the expense of being less compatible with exotic file destinations.
Note: this bug is probably already fixed, but I will leave this here just in case
Why does the artwork not always appear when sending from the Music app on the Mac?
When sending from the macOS Music app, the artwork for each item may not be displayed. This seems to be a bug in the Music app, as the image is explicitly specified as empty even when it is present.
Why can’t I record in the MP3 file format?
I have no idea. Android doesn’t seem to natively support it. Probably due to licensing costs.
My problem isn’t listed here!
If the issue causes a crash, enable Crash Reporting and eventually I’ll get the report. If it works but doesn’t seem correct, get in touch. hello@dexterouslogic.com
Why can't I AirPlay® directly from Safari on the Mac?
As of macOS Ventura (and perhaps before), using AirPlay® from within Safari’s video element (as used by YouTube, etc) is NOT supported. I suspect this now requires AirPlay® version 2. This issue also affects Apple’s own AirPort Express® device. For some reason, the iOS browser version does still work.
A workaround is to use the app as an AirPlay® output device in the Sound Control Panel.
The play, pause, or volume controls are shown, but they are disabled!
The availability of these controls is determined by the advertised capabilities of the device that is currently sending audio, in particular its adoption of the DACP protocol. This is how sending devices allow themselves to be controlled remotely.
The protocol allows a sender device to advertise what it is capable of doing (eg: change volume, play, pause, skip tracks). When the app (the receiver) notices these capabilities it enables the corresponding buttons. However, this is a functional protocol. It defines what to do, not how to do it, which in practice can confuse the user.
For example, the functional definition of pausing audio is when a command to pause the audio is received, the audio should pause. Here are three different ways to achieve this:
Tell the receiver to stop playing audio (typical of the Mac’s Music app, and the most desirable outcome).
Don’t tell the receiver to stop playing audio, but instead send silent audio (typical of the audio component of a video).
Immediately disconnect from the receiver, and ignore any further commands (typical of iOS devices, presumably to save battery).
In the first case, the audio will pause immediately (which is probably the expected outcome). In the second, the receiver will have to work its way through its buffer before it gets to the silence, meaning the response appears delayed by a few seconds. In the third case, it appears that the sending device suddenly disappeared, putting the receiver back into standby mode. These responses are all technically very different, but they do all functionally work.
The Apple Music app (formerly known as iTunes) on the Mac has the most comprehensive implementation of this protocol. iOS devices tend to have less complete conformance to this protocol (and in some cases no conformance at all).
In other words, treat the remote controls offered by the receiver as an idiosyncratic bonus that may or may not work.
What is Trial Mode?
This is a paid app. In its free mode (aka Trial), audio receiving is limited to three minutes, after which noise is overlaid on the sound. Additionally, the recording quality is limited to its lowest setting.