Je veux jouer un son en React Native.
J'ai essayé de lire ici en zmxv/react-native-sound , mais en tant que débutant comme moi, cette documentation me rend confus comment l'appliquer en React Native code.
Avant d'avoir essayé celui-ci pour faire réagir le son de lecture native sur l'événement et créer un code comme celui-ci:
import React, { Component } from 'react'
import { StyleSheet, Text, View, TouchableOpacity } from 'react-native'
const Sound = require('react-native-sound')
export default class MovieList extends Component {
handlePress() {
// Play some sound here
let hello = new Sound('motorcycle.mp3', Sound.MAIN_BUNDLE, (error) => {
if (error) {
console.log(error)
}
})
hello.play((success) => {
if (!success) {
console.log('Sound did not play')
}
})
}
render() {
const { movie } = this.props
return (
<TouchableOpacity onPress={this.handlePress.bind(this)}>
<View>
<Text>Start</Text>
</View>
</TouchableOpacity>
)
}
}
Et c'est là que je mets mon audio:
MyProject/Android/app/src/main/res/raw/Motorcycle.mp3
Structure du projet
Alors, qu'est-ce qui ne va pas dans mon code?
Cela préchargera le son et lorsque vous appuyez sur la lecture, il le jouera.
export default class MovieList extends Component {
componentDidMount(){
this.hello = new Sound('whoosh.mp3', Sound.MAIN_BUNDLE, (error) => {
if (error) {
console.log('failed to load the sound', error);
return;
}
});
}
handlePress() {
this.hello.play((success) => {
if (!success) {
console.log('Sound did not play')
}
})
}
render() {
const { movie } = this.props
return (
<TouchableOpacity onPress={this.handlePress.bind(this)}>
<View>
<Text>Start</Text>
</View>
</TouchableOpacity>
)
}
}
Merci beaucoup qui a répondu à cette question, mais j'ai résolu cela avec cette simple:
import React, { Component } from 'react'
import { Text, View, TouchableOpacity } from 'react-native'
import Sound from 'react-native-sound';
export default class MovieList extends Component {
sound = new Sound('motorcycle.mp3');
playSound = () => {
this.sound.play()
}
render() {
return (
<View>
<TouchableOpacity onPress={this.playSound}>
<View>
<Text>Start</Text>
</View>
</TouchableOpacity>
</View>
)
}
}
Essayez ce code pour lire le son:
setTimeout(() => {
var sound = new Sound("motorcycle.mp3",Sound.MAIN_BUNDLE, (error) => {
/* ... */
});
setTimeout(() => {
sound.play((success) => {
/* ... */
});
}, 100);
}, 100);
Il est piraté et résolu par https://github.com/zmxv/react-native-sound/issues/89#issuecomment-276678935
Pour iOS, ce qui a fonctionné pour moi est le suivant:
npm run ios
Voici mon code:
const sound = new Sound(
"myFile.mp3",
Sound.MAIN_BUNDLE,
error => {
if (error) {
console.log("failed to load the sound", error);
return;
}
sound.play(() => sound.release());
}
);
// The play dispatcher
sound.play();