先放一个效果图:该图实现的效果,点击播放按钮,进度条随着时间移动,点击暂停按钮,进度条停止移动

第一步,用到什么库

1.zmxv/react-native-sound 播放声音的库   2.callstack/react-native-slider 进度条的库 

第二步,准备播放音频

我测试时,是将mp3格式的声音放在本地的,根据官网描述,本地音频,放在 `android\app\src\main\res\raw`,注意要重新编译打包项目哦

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


import Sound from "react-native-sound";
Sound.setCategory('Playback'); class SoundScreen extends React.Component {
  constructor(props) {
super(props);
this.state = {
whoosh: null, //音频对象 }
}
  componentDidMount() {
//构建好音频对象
this.build();
}
  build(){
    let audioSrc = 'whoosh.mp3' //这个音频放在android\app\src\main\res\raw
    let whoosh = new Sound(audioSrc, Sound.MAIN_BUNDLE, (error) => {
if (error) {
alert('加载声音失败');
return;
} this.setState({ whoosh: whoosh});
});
  }
playAudio=()=>{
    this.state.whoosh.play((success) => {
if (success) {//播放完成后的逻辑在这里处理 } else {
console.log('playback failed due to audio decoding errors');
}
    });
}
render(){
    return (
      <Text onPress={this.playAudio}>播放</Text>
    )
  }
}

第三步,添加Slider滑块组件

自己看文档添加吧,这里有个小问题,就是设置长度300,但是它左右两边有8个距离的空袭,我也没解决

第四步,mp3音频播放时间 和 Slider进度同步的问题
思路:Slider的最小值为0 ,最大值为1 ,之后通过定时器,获得当前播放时间 除以 总时长,这个值就是Slider的值
注意,将debug关掉,不然定时任务不准确

   //定时任务:监听当前播放时间
listenAudio() {
let that = this;
let timer = setInterval(function () {
that.state.whoosh.getCurrentTime(function (seconds) {
let duration = that.state.duration;
let temp = seconds / duration;//当前时间/总时间 = 播放进度比
that.setState({ sliderValue: temp, })
});
}, 1000);
//将定时器私有化
this.setState({ Timer: timer });
}

主要的内容都说完,注意清除定时器对象

react native 音频播放 react-native-sound的更多相关文章

  1. React Native 系列(二) -- React入门知识

    前言 本系列是基于React Native版本号0.44.3写的,最初学习React Native的时候,完全没有接触过React和JS,本文的目的是为了给那些JS和React小白提供一个快速入门,让 ...

  2. React-Native(三):React Native是基于React设计的

    React Native是基于React js设计的. 参考:<React 入门实例教程> React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript ...

  3. 用 React 编写移动应用 React Native

    转载:用 React 编写移动应用 React Native ReactNative 可以基于目前大热的开源JavaScript库React.js来开发iOS和Android原生App.而且React ...

  4. 【React Native开发】React Native移植原生Android项目(4)

    ),React Native技术交流4群(458982758),请不要反复加群!欢迎各位大牛,React Native技术爱好者加入交流!同一时候博客左側欢迎微信扫描关注订阅号,移动技术干货,精彩文章 ...

  5. [React Native] Installing and Linking Modules with Native Code in React Native

    Learn to install JavaScript modules that include native code. Some React Native modules include nati ...

  6. SoundPool 音频播放 详解 示例

    简介 如果应用程序经常播放密集.急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了.因为MediaPlayer存在如下缺点: 1) 延时时间较长,且资源占用率高. 2) ...

  7. SoundPool 音频播放 API 详解【示例】

    demo地址:https://github.com/baiqiantao/PermissionTest.git 一个大坑:SoundPool最多只能播放时长10s左右.大小70kb左右(这些值是我多次 ...

  8. ffmpeg学习笔记-音频播放

    前文讲到音频解码,将音频解码,并且输入到PCM文件,这里将音频通过AudioTrack直接输出 音频播放说明 在Android中自带的MediaPlayer也可以对音频播放,但其支持格式太少 使用ff ...

  9. 1. React介绍 React开发环境搭建 React第一个程序

    什么是 React         React 是 Facebook 发布的 JavaScript 库,以其高性能和独特的设计理念受到了广泛关注. React的开发背景         Faceboo ...

  10. iOS开发系列--音频播放、录音、视频播放、拍照、视频录制

    --iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制, ...

随机推荐

  1. JSP第一次作业

    1.环境搭建,运行出来一个JSP页面,显式hello <%@ page language="java" import="java.util.*" page ...

  2. 日志添加request-id

    package com.xf.config; import java.util.Date; import javax.servlet.http.HttpServletRequest; import j ...

  3. @Slf4j -- lombok.extern.slf4j.Slf4j;

    @Log4j:注解在类上:为类提供一个 属性名为log 的 log4j 日志对像 package com.atguigu.springcloud.controller; import com.atgu ...

  4. MySQL 中的事务理解

    MySQL 中的事务 前言 原子性 一致性 持久性 并发事务存在的问题 脏读 幻读 不可重复读 隔离性 事务的隔离级别 事务隔离是如何实现 可重复读 和 读提交 串行化 读未提交 可重复读解决了幻读吗 ...

  5. 构建api gateway之 openresty 中如何使用 wasm

    openresty 中如何使用 wasm WASM 是什么? WebAssembly是一种运行在现代网络浏览器中的新型代码,并且提供新的性能特性和效果.它设计的目的不是为了手写代码而是为诸如C.C++ ...

  6. P2_小程序简介

    小程序与普通网页开发的区别 运行环境不同 网页运行在浏览器环境中 小程序运行在微信环境中 API 不同 由于运行环境的不同,所以小程序中,无法调用 DOM 和 BOM 的 API. 但是,小程序中可以 ...

  7. G - 逆序对的数量

    G - 逆序对的数量 原题链接 什么是逆序对? 简单来说,两个数比较,下标小的数反而大,两个数称之为逆序对如\({3,1}\)就是这么一个逆序对 归并排序 由于逆序对逆序的性质,我们可以联想到排序: ...

  8. React中组件之间是如何通信的 react的组件通信方式有哪些

    一.是什么 通信指的是发送者通过某种媒体 以某种格式来传递信息 到收信者以达到某个目的,广义上,任何信息的传递都是通信 二.如何通信? 组件传递的方式有很多种,根据传送者和接收者可以分为如下: 父组件 ...

  9. TCP/IP 协议(10):TCP 协议一百问

    TCP/IP 协议(10):TCP 协议一百问 杨领well 的 TCP/IP 协议专栏 TCP 协议部分一直没有更新,是因为我不确定到底应该怎么来介绍 TCP 协议才能干货满满.最后我决定以 Q&a ...

  10. JZOJ 4250.路径

    \(\text{Solution}\) \(30\) 分暴搜合法路径 另 \(30\) 分状压 设 \(f_{i,j,k}\) 表示当前到第 \(i\) 个点,走过的点状态为 \(j\),走过的路径长 ...