zmxv / react-native-sound

React Native module for playing sound clips
MIT License
2.78k stars 749 forks source link

Ducking Others Audios #652

Open AlexisChup opened 4 years ago

AlexisChup commented 4 years ago

:beetle: Description

Ducking (lower the volume from) others audios in background.

:beetle: What is the observed behavior?

The audio from other app (like Spotify) and from react-native-sound(RNS) are mix together, however there are at the same volume :

  1. The user put some music, from Spotify for example.
  2. The user come to my app and launch the game ( about every 3 minute a name is called).
  3. When a name is called from RNS audio, the Spotify's audio and RNS audio are at the same volume.

:beetle: What is the expected behavior?

  1. The user put some music, from Spotify for example.
  2. The user come to my app and launch the game ( about every 3 minute a name is called).
  3. When a name is called from RNS audio, the Spotify's audio would be ducked.
  4. At the end of RNS audio, the Spotify's audio will be set at his normal volume.

:beetle: Please post your code:

// The Sounds object 
    let whoosh;

// Import the react-native-sound module
    let Sound = require('react-native-sound');

// Enable playback in silence mode, mixWithOthers and background
    Sound.setCategory('Playback', true);
    Sound.setMode('SpokenAudio');

// What is called every 3 minute
    var whoosh = new Sound('./audios/actions/saxo.mp3', Sound.MAIN_BUNDLE, (error) => {
      if (error) {
        console.log('failed to load the sound', error);
        return;
      }
      // Play the sound with an onEnd callback
      whoosh.play((success) => {
        if (success) {
          console.log('successfully finished playing, go for another lauch TimeOut');
          this._launchTimeOut();
        } else {
          console.log('playback failed due to audio decoding errors');
        }
      });
    });

:bulb: Does the problem have a test case?

  1. Create a RNS object
  2. Put some music, from Spotify for example
  3. Launch RNS audio
  4. Confirm that duck is not working

:bulb: Possible solution

Maybe it would be possible that I didn't use the right mode when I called

Sound.setMode()

But I tried every mode they have :

//"Default", "VoiceChat", "VideoChat", "GameChat", "VideoRecording", "Measurement", "MoviePlayback", "SpokenAudio".

Or Maybe it would be possible that it was for this function

Sound.setCategory()

But I also tried every mode they have :

//"Ambient", "SoloAmbient", "Playback", "Record", "PlayAndRecord", "AudioProcessing", "MultiRoute".

:bulb: Is there a workaround?

I tried a lot of things but I completly stuck. If anyone succeeds to duck other audios in background it would be perfect.

:bulb: If the bug is confirmed, would you be willing to create a pull request?

Yes

Is your issue with...

Are you using...

Which versions are you using?

Does the problem occur on...

If your problem is happening on a device, which device?

EyadAlghamdi commented 2 years ago

i have the same issue. i tried every possible solution but it doesnt seem to duckOthers. this is not implemented yet it seems in the package.

EyadAlghamdi commented 2 years ago

I just created a new PR for this feature (only for iOS) #745 If there are any Android developers willing to add on to this fork that would be great!

if you want to test it out and provide any feedback just do

npm install https://github.com/EyadAlghamdi/react-native-sound

it will replace the main branch with the new branch to test it, later you can redo

npm install react-native-sound

and it will replace it back.

If you install the ducking branch. make sure you use the updated setCategory method which have a new parameters (3rd) named duckOthers

@param category — AVAudioSession category
@param mixWithOthers — Can be set to true to force mixing with other audio sessions.
@param duckOthers — Can be set to true to duck other sounds (iOS).

Sound.setCategory("Playback", true, true)

test it out and let me know if you face any issues so i can modify it :) cheers!

dipankurXT commented 2 years ago

@EyadAlghamdi

npm install https://github.com/EyadAlghamdi/react-native-sound

Worked like a charm. Thanks a lot.

arunabhverma commented 2 years ago

Hi @EyadAlghamdi, I am using your repo it work for me good, but I need duck and unDuck feature for IOS and android both, Now in my scenario, after ducking background sound it increases slowly slowly, and also not going to it original level of volume, and I am unable to fully unDuck the volume of background sound.

Can you help me in this scenario.

adil-ali-dev commented 11 months ago

Hi @EyadAlghamdi,after ducking background sound it increases slowly slowly, and also not going to it original level of volume, and I am unable to fully unDuck the volume of background sound

lordprana commented 10 months ago

Hello all, here's a patch file that incorporates @EyadAlghamdi changes + changes for Android. I've tested and it works on my devices. react-native-sound+0.11.2.patch