1.安装:yarn add react-native-sound

react-native link react-native-sound

2.

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

import { Slider } from 'react-native-elements'
import Sound from 'react-native-sound'

let mp3 = require('./sounds/guojing_xinqiang.mp3');//支持众多格式
//如果是网络音频,使用 new Sound(mp3,null,error => {})
let whoosh = new Sound(mp3, (error) => {
if (error) {
return console.log('资源加载失败', error);
}
});

export default class mySound extends Component {
constructor(props){
super(props);
this.state = {
volume: 0.5,
seconds: 0, //秒数
totalMin: '', //总分钟
totalSec: '', //总分钟秒数
nowMin: 0, //当前分钟
nowSec: 0, //当前秒钟
maximumValue: 0, //滑块最大值
}
}
componentDidMount(){
let totalTime = whoosh.getDuration();
totalTime = Math.ceil(totalTime);
let totalMin = parseInt(totalTime/60); //总分钟数
let totalSec = totalTime - totalMin * 60; //秒钟数并判断前缀是否 + '0'
totalSec = totalSec > 9 ? totalSec : '0' + totalSec;
this.setState({
totalMin,
totalSec,
maximumValue: totalTime,
})
}
componentWillUnmount(){
this.time && clearTimeout(this.time);
}
// 声音+
_addVolume = () => {
let volume = this.state.volume;
volume += 0.1;
volume = parseFloat(volume).toFixed(1) * 1;
if(volume > 1){
return alert('目前已经是最大音量');
}
this.setState({volume: volume});
whoosh.setVolume(volume);
}
// 声音-
_reduceVolume = () => {
let volume = this.state.volume;
volume -= 0.1;
volume = parseFloat(volume).toFixed(1) * 1;
if(volume < 0){
return alert('当前为静音');
}
this.setState({volume: volume});
whoosh.setVolume(volume);
}
// 播放
_play = () => {
whoosh.play();
this.time = setInterval(() => {
whoosh.getCurrentTime(seconds => {
seconds = Math.ceil(seconds);
this._getNowTime(seconds)
})
},1000)
}
// 暂停
_pause = () => {
clearInterval(this.time);
whoosh.pause();
}
// 停止
_stop = () => {
clearInterval(this.time);
this.setState({
nowMin: 0,
nowSec: 0,
seconds: 0,
})
whoosh.stop();
}
_getNowTime = (seconds) => {
let nowMin = this.state.nowMin,
nowSec = this.state.nowSec;
if(seconds >= 60){
nowMin = parseInt(seconds/60); //当前分钟数
nowSec = seconds - nowMin * 60;
nowSec = nowSec < 10 ? '0' + nowSec : nowSec;
}else{
nowSec = seconds < 10 ? '0' + seconds : seconds;
}
this.setState({
nowMin,
nowSec,
seconds
})
}
render() {
let time = this.state;
return (
<View style={styles.container}>
<Slider
// disabled //禁止滑动
maximumTrackTintColor={'#ccc'} //右侧轨道的颜色
minimumTrackTintColor={'skyblue'} //左侧轨道的颜色
maximumValue={this.state.maximumValue} //滑块最大值
minimumValue={0} //滑块最小值
value={this.state.seconds}
onSlidingComplete={(value)=>{ //用户完成更改值时调用的回调(例如,当滑块被释放时)
value = parseInt(value);
this._getNowTime(value)
// 设置播放时间
whoosh.setCurrentTime(value);
}}
/>
<Text>{time.nowMin}:{time.nowSec}/{time.totalMin}:{time.totalSec}</Text>
<Text>当前音量: {this.state.volume}</Text>
<Text onPress={this._addVolume}>声音+</Text>
<Text onPress={this._reduceVolume}>声音-</Text>
<Text onPress={this._play}>播放</Text>
<Text onPress={this._pause}>暂停</Text>
<Text onPress={this._stop}>停止</Text>
</View>
);
}
}

const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#F5FCFF',
},
});

//这里的UI库可以自行更换

转载于https://blog.csdn.net/qq_39910762/article/details/85249897

转载于:https://www.cnblogs.com/boonook/p/10364889.html

react-native-sound的使用相关推荐

  1. Android特效(包含React Native)

    在这里提供了一些Android特效,大家可以参考一下, 带有删除按钮的dialog https://www.jianshu.com/p/9259ad7f857bToast封装 https://www. ...

  2. React Native Expo 项目中添加动画音效

    目录 背景 实现 代码 效果 参考链接 背景 最近做一个学校作业,用 React Native 写一个游戏.游戏中涉及一个物体下落的动效,是用 React Native 的 Animated API ...

  3. react native 安装插件

    RN插件 1.字体库icons npm i react-native-vector-icons --save (要关联 rnpm link) 2.字符串string npm i query-strin ...

  4. fragment中文网_更新 · React Native 中文网

    时刻将 React Native 更新到最新的版本,可以获得更多 API.视图.开发者工具以及其他一些好东西(译注:官方开发任务繁重,人手紧缺,几乎不会对旧版本提供维护支持,所以即便更新可能带来一些兼 ...

  5. React Native —— App

    使用 React Native 作为 app 框架,Redux 作为数据层,因此我们需要选用一些支持性的技术和工具: 开源的 Parse Server 做数据存储 - 运行在 Node.js 上. F ...

  6. 【React Native】iOS原生导航跳转RN页面

    上一篇介绍了React Native使用react-navigation进行导航跳转页面,现在我们介绍下原生iOS中怎么导航进一个新的React Native页面. 一.原生跳转React Nativ ...

  7. 【React Native】react-navigation导航使用方法

    目录 集成react-navigation 使用react-navigation 上一篇介绍了如何在已有iOS项目中集成React Native.这一篇我们把上一篇的demo做下拓展,添加点击电影跳转 ...

  8. 给iOS开发者的React Native入门使用教程

    目录 一. 原生iOS项目集成React Native 二. 原生跳转RN页面 三. 显示豆瓣热门电影列表 四. 改为导航 五.完整源代码 一. 原生iOS项目集成React Native 创建一个新 ...

  9. 对比React Native、dcloud、LuaView三个框架技术(内部)

    转载自:http://www.jianshu.com/p/ee1cdb33db8d 主要对比React Native和5+SDK(就是dcloud的SDK)两个: 开发语言:三个都是用其他语言来统一开 ...

  10. 初步了解React Native的新组件库firstBorn

    first-born is a React Native UI Component Framework, which follows the design methodology Atomic Des ...

最新文章

  1. php时间戳与日期互转
  2. Java NIO学习系列七:Path、Files、AsynchronousFileChannel
  3. 给3月要跳槽的前端提个醒!不了解微前端就别去面试了,不然……
  4. weblogic修改控制台ip_「Weblogic学习」Weblogic知识要点之JNDI/JTA编程开发
  5. 联想小新锐7000主板型号_2020年高性价比游戏本选购推荐指南——7000价位游戏本推荐...
  6. 关于深度学习框架的一些见解
  7. python pip工具命令_转载 Python 安装setuptools和pip工具操作方法(必看)
  8. WCF开发实战系列二:使用IIS发布WCF服务(转)
  9. docker alpine中 配置 nginx和php两个容器互联时,访问php文件不执行问题
  10. python实现强化学习
  11. 使用ECS和OSS搭建个人网盘(阿里云官方)
  12. NoClassDefFoundError: com/fasterxml/jackson/core/util/DefaultIndenter
  13. Squid合并回源技术
  14. Ubuntu18.04grub增加console口输出
  15. android 解析json 日期格式,处理Json数据中的日期类型.如/Date(1415169703000)/格式
  16. 大气的品牌化妆品官网模板
  17. C#免费教程(bili网站搜罗VSTO免费视频资源)
  18. 不填写内容用哪个斜杠代替_反斜杠
  19. linux 扩展pam支持第三方认证
  20. spring项目中使用slf4j和log4j2日志框架

热门文章

  1. 服务器集群技术(备份服务器方案和均摊工作方案)(用来解决服务器挂掉问题)...
  2. MapReduce中的partitioner
  3. 关于文件保存/关闭时报错:文件正由另一进程使用,因此该进程无法访问此文件。...
  4. 跨平台视频通信项目-OpenTok
  5. iGrimace IG 各版本区别
  6. vue表格导出到Excel
  7. Java 集合框架,看这篇真的够了!
  8. Java 程序员必备的 Intellij IDEA 插件
  9. HBase进化 | 从NoSQL到NewSQL,凤凰涅槃成就Phoenix
  10. 关于 Java 性能调优的 11个简单技巧,多少人知道?