Реагировать на звук родной игры

У меня есть такой компонент, как:

import React, { Component } from 'react'
import { StyleSheet, Text, View, TouchableOpacity } from 'react-native'


class MovieList extends Component {


    handlePress() {
        // Play some sound here
    }

    render() {
        const { movie } = this.props
        return (
            <TouchableOpacity onPress={this.handlePress.bind(this)}>
                <View style={styles.movie}>
                    <Text style={styles.name}>{movie.name}</Text>
                    <View style={styles.start}>
                        <Text style={styles.text}>Start</Text>
                    </View>
                </View>
            </TouchableOpacity>
        )
    }
}

Здесь, когда я касаюсь view, я хочу воспроизвести звук. Я погуглил по этому поводу, но не нашел подходящего ответа.

Можно ли как-нибудь воспроизвести звук, когда я нажимаю на что-нибудь? Как я могу это сделать?

Ответ 1

Ознакомьтесь с React Native Sound - кроссплатформенным компонентом для доступа к элементам управления аудио устройства.

Вы можете использовать это так:

const Sound = require('react-native-sound')

let hello = new Sound('hello.mp3', Sound.MAIN_BUNDLE, (error) => {
  if (error) {
    console.log(error)
  }
})

hello.play((success) => {
  if (!success) {
    console.log('Sound did not play')
  }
})

Ответ 2

Вы можете попробовать аудио компонент из expo-sdk.

Посмотрите пример здесь.

Работает с SDK 18.

Ответ 3

Вы можете воспроизводить звук с помощью библиотеки expo-av следующим образом.

import { Audio } from "expo-av";
class MovieList extends Component {


   async handlePress() {
     try {
        const { sound: soundObject, status } = await 
           Audio.Sound.createAsync('sound.mp3', { shouldPlay: true });
        await soundObject.playAsync();
      } catch (error) {
      console.log(error);
     }
    }

    render() {
        const { movie } = this.props
        return (
            <TouchableOpacity onPress={this.handlePress.bind(this)}>
                <View style={styles.movie}>
                    <Text style={styles.name}>{movie.name}</Text>
                    <View style={styles.start}>
                        <Text style={styles.text}>Start</Text>
                    </View>
                </View>
            </TouchableOpacity>
        )
    }
}