InnerAudioContext

功能描述

创建内部 audio 上下文 InnerAudioContext 对象

体验 Demo

智能生活App扫码进行体验
Demo下载地址 →

代码示例

请求示例

import {
  Button,
  View,
  createInnerAudioContext,
} from '@ray-js/ray'
import React, { FC, useRef, useState } from 'react'

function getRandomNumberMin(): number {
  return Math.floor(Math.random() * (200 - 100 + 1) + 100)
}

const autoplay = true
const loop = true
const playbackRate = 2
const AUDIO_PATH =
  'https://images.tuyacn.com/rms-static/cf60cb10-9f19-11ee-8cd8-b117287658f4-1703064369729.mp3?tyName=1.mp3'
const AUDIO_PATH2 =
  'https://images.tuyacn.com/rms-static/4681f900-9fa4-11ee-af19-cfa45f6de59e-1703123840144.mp3?tyName=2.mp3'

const AudioDemo: FC = () => {
  const audioContext = useRef(null)
  const [audioStatus, setAudioStatus] = useState<string>('')
  const [startTime, setStartTime] = useState<number>(0)

  const operation =
    (
      ops: 'play' | 'pause' | 'stop' | 'resume' | 'seek',
      params?: {
        startTime?: number
        [key: string]: any
      }
    ) =>
    () => {
      if (ops === 'play') {
        setStartTime(params.startTime)
      }
      setAudioStatus(ops)
      audioContext.current[ops]?.({
        ...params,
        success: (res) => console.log(`${ops} success`, res),
        fail: (res) => console.log(`${ops} fail`, res),
        complete: (res) => console.log(`${ops} complete`, res),
      })
    }

  return (
    <View style={{ padding: 20 }}>
      <Button
        type="primary"
        style={{ margin: 10 }}
        onClick={() => {
          audioContext.current = createInnerAudioContext({
            success: (res) => console.log('createInnerAudioContext success', res),
            fail: (res) => console.log('createInnerAudioContext fail', res),
            complete: () => console.log('createInnerAudioContext complete'),
          })

          audioContext.current.onTimeUpdate((res) => {
            console.log('onTimeUpdate callback', res)
          })
        }}
      >
        创建实例
      </Button>
      <Button type="primary" style={{ margin: 10 }} onClick={operation('destroy')}>
        销毁 destroy
      </Button>
      <Button
        type="primary"
        style={{ margin: 10 }}
        onClick={operation('play', {
          src: AUDIO_PATH,
          autoplay,
          startTime: getRandomNumberMin(),
          loop,
          volume: 1,
          playbackRate,
        })}
      >
        播放音乐1 play
      </Button>
      <Button
        type="primary"
        style={{ margin: 10 }}
        onClick={operation('play', {
          src: AUDIO_PATH2,
          autoplay,
          startTime: getRandomNumberMin(),
          loop,
          volume: 1,
          playbackRate,
        })}
      >
        播放音乐2 play
      </Button>
      <Button type="primary" style={{ margin: 10 }} onClick={operation('pause')}>
        暂停 pause
      </Button>
      <Button type="primary" style={{ margin: 10 }} onClick={operation('stop')}>
        停止 stop
      </Button>
      <Button type="primary" style={{ margin: 10 }} onClick={operation('resume')}>
        恢复播放 resume
      </Button>

      <Button
        type="primary"
        style={{ margin: 10 }}
        onClick={operation('seek', { position: getRandomNumberMin() })}
      >
        跳转 seek
      </Button>
      <View style={{ margin: 10 }}>当前状态:{audioStatus}</View>
      <View style={{ margin: 10 }}>autoplay: {'' + autoplay}</View>
      <View style={{ margin: 10 }}>startTime: {'' + startTime}</View>
      <View style={{ margin: 10 }}>loop: {'' + loop}</View>
      <View style={{ margin: 10 }}>playbackRate: {'' + playbackRate}</View>
    </View>
  )
}

export default AudioDemo

成功示例

onTimeUpdate

{
  "time": 0.05497835
}

Q:destroy 和 destroyPlayer 有什么区别?

A:destroy 已经废弃,推荐使用 destroyPlayer。