Very poor audio quality with the new Audio API

The audio reproduced by Instances from the new Audio API is super low quality compared with the classic Sound Instances. It sounds like the new Audio API Instances only handler Mono audio while the regular Sound Instances do Mono and Stereo, which for games based on music and sounds it’s very annoying since you want to hear the music with the highest sound quality possible.
It could also be the way that I have my AudioListeners and AudioPlayers setup but I doubt it because why would have them parented to the wrong path make them playback Mono audio?

Here is a video comparing both audio outputs:

The Sound Instance that I used to record the comparison between the both was parented to Workspace and the SoundService had AmbientReverb set to NoReverb.

My setup for the Audio API stuff is as shown:
image

The Blue and Red lines show the connections of the wires. All Instances (except for the Wires) had all of their properties set to their defaults.

2 Likes

I think there is no quality issue to this, but a correctly assessed issue on that where the playback is mono instead of stereo. The new API seems to not work with stereo formats?

2 Likes

If you’re emitting and listening from the camera, why not wire the AudioPlayer directly to the AudioDeviceOutput instead? Does that have any effect?

3 Likes

Thanks for the report. Investigating, but need to ask a clarifying question.

When you’re saying “poor Audio Quality,” is this happening overall when you use both AudioPlayer or just when you use MusicPlayer?

Hey @Davvex87original, for nonspatial background music you don’t actually have to use AudioEmitters or AudioListeners at all – you can wire an AudioPlayer directly to AudioDeviceOutput, like @GollyGreg suggested!

In this scenario, the AudioPlayer is wired to an AudioEmitter placed on the Camera; that means its audio stream is being broadcast out into the world from the camera’s position.

An AudioListener is also on the camera, which records all of its surroundings – in this case, it’s hearing the AudioEmitter that’s right on top of it. The recorded stream is fed to an AudioDeviceOutput.

While this sounds nonspatial, it’s actually the equivalent of putting a microphone right up against a speaker – there is some loss that you wouldn’t encounter if you just used a Wire directly.

2 Likes

Ok I see.
Thank you so much @GollyGreg for the solution, I didn’t know you could wire things up like that.

This issue was happening with every AudioPlayer. Well for the lower audio quality It’s probably something related to the AudioEmitters instead since it sounds absolutely fantastic now that I have the player connected directly to the AudioDeviceOutput, though in-game, as long as the AudioEmitter is parented to a part in 3D space, players will probably never notice the Mono quality.

AudioEmitters and AudioListeners are mainly intended for 3d spatialization; when all of an audio stream’s channels get emitted from a single point in 3d space, it sounds effectively mono; the same thing occurs if you parent a Sound to a part that’s at the same position as SoundService:GetListener.

The main difference with the new API is that AudioListener is a creatable instance (so you can have several), whereas before, SoundService:GetListener was the only one, and it was hidden behind a method

1 Like