React Native - Expo Audio остановить все звуки - PullRequest
0 голосов
/ 11 мая 2018

Я использую Expo Audio , чтобы воспроизвести несколько коротких звуков из списка.

async playAudio(file) {

    try {
        await Audio.setIsEnabledAsync(true);
        const sound = new Audio.Sound();
        await sound.loadAsync(file);
        await sound.playAsync(); 
    } catch(error) {
      console.error(error);
    }
}

Который я звоню из списка с list.map()

renderTheList = (item, i) => {
    return (
        <View key={i}> 
            <TouchableOpacity onPress={ () => { this.onAudioSelected(item.audio) }}>
            </TouchableOpacity>
        </View>
    )
}

onAudioSelected(audio) {
    // Audio.clearSounds() <-- something like this
    playAudio(audio)

    ...
    }

Звук воспроизводится нормально, но когда я выбираю следующий элемент в списке, предыдущий звук не останавливается. Поэтому, если я коснусь группы подряд, раздастся куча звуков.

Как остановить все воспроизводимые в данный момент звуки?

1 Ответ

0 голосов
/ 06 июля 2018

Я понял, что должен создать объект воспроизведения в конструкторе и использовать unloadAsync()

constructor(props)
    {
      super(props);

      this.audioPlayer = new Audio.Sound();

    }

    playSound = async () => {
        try {
          await this.audioPlayer.unloadAsync()
          await this.audioPlayer.loadAsync(require("../soundfile.mp3"));
          await this.audioPlayer.playAsync();
        } catch (err) {
          console.warn("Couldn't Play audio", err)
        }
    }

Полная документация находится на AV - Expo Documentation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...