Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
移动iOS的音频问题_Ios_Reactjs_Audio - Fatal编程技术网

移动iOS的音频问题

移动iOS的音频问题,ios,reactjs,audio,Ios,Reactjs,Audio,我正在使用React开发呼吸应用程序。我的应用程序在所有桌面浏览器和安卓设备上都能正常工作,但在移动iOS上不行,在这种情况下,主呼吸功能的音频根本无法播放 这是奇怪的部分。它将为应用程序的其他部分播放音频。有一个介绍,和一个教程,这两个播放各自的音频正如他们应该的。但是主要的呼吸功能没有 以下是介绍的一个示例: import React, { FC, useState, useEffect } from 'react'; import { useStyles } from './styles

我正在使用React开发呼吸应用程序。我的应用程序在所有桌面浏览器和安卓设备上都能正常工作,但在移动iOS上不行,在这种情况下,主呼吸功能的音频根本无法播放

这是奇怪的部分。它将为应用程序的其他部分播放音频。有一个介绍,和一个教程,这两个播放各自的音频正如他们应该的。但是主要的呼吸功能没有

以下是介绍的一个示例:


import React, { FC, useState, useEffect } from 'react';
import { useStyles } from './styles';
import { ButtonBar, Header } from 'components';
import IntroContent from './Intro-content';
import { createAudio, playAudio } from 'dha-assets';
import intro_female from '../../assets/audio/Female/intro_female.mp3';
import intro_male from '../../assets/audio/Male/intro_male.mp3';
import { useSelector } from 'react-redux';
import Logo from '../../assets/images/Logo.svg';
import { Redirect } from 'react-router-dom';

interface State {
  gender: string;
}

createAudio('intro_female', intro_female);
createAudio('intro_male', intro_male);

const playFemaleIntro = () => {
  playAudio('intro_female');
};

const playMaleIntro = () => {
  playAudio('intro_male');
};

const Intro: FC = () => {
  const classes = useStyles();
  const gender = useSelector<State>((state) => state.gender);
  const [paragraphs] = useState(IntroContent.intro.paragraphs);
  const [displayParagraph, setDisplayParagraph] = useState('');
  const [index, setIndex] = useState(0);

  if (gender === 'female') {
    playFemaleIntro();
  } else {
    playMaleIntro();
  }

  const timeoutDelays = [0, 5000, 3700, 5700, 4900, 7500, 9000, 6700, 6700, 8000];

  useEffect(() => {
    const changeParagraph = () => {
      setDisplayParagraph(paragraphs[index]);
      setIndex(index + 1);
    };
    setTimeout(changeParagraph, timeoutDelays[index]);
  }, [index]);

  return (
    <>
      <Header />
      {index >= 10 ? <Redirect to="/home" /> : null}
      <div className={classes.root}>
        <div className={classes.img}>
          <img src={Logo} alt="TB Logo" />
        </div>
        <div className={classes.paragraph}>
          <p>{displayParagraph}</p>
        </div>
        <div className={classes.buttonBar}>
          <ButtonBar />
        </div>
      </div>
    </>
  );
};

export default Intro;


从“React”导入React,{FC,useState,useffect};
从“./styles”导入{useStyles};
从“组件”导入{ButtonBar,Header};
从“./Intro content”导入简介内容;
从“dha资产”导入{createAudio,playAudio};
从“../assets/audio/female/intro_female.mp3”导入intro_female;
从“../../assets/audio/male/intro_male.mp3”导入简介;
从'react redux'导入{useSelector};
从“../../assets/images/Logo.svg”导入徽标;
从'react router dom'导入{Redirect};
界面状态{
性别:弦;
}
createAudio(“女简介”,女简介);
createAudio(“简介男”,简介男);
const playFemaleIntro=()=>{
播放音频(“介绍女性”);
};
const playmelintro=()=>{
playAudio(“男性介绍”);
};
常量介绍:FC=()=>{
const classes=useStyles();
const-gender=useSelector((state)=>state.gender);
常量[段落]=使用状态(IntroContent.intro.pages);
const[display段落,setdisplay段落]=useState(“”);
const[index,setIndex]=useState(0);
如果(性别==‘女性’){
playFemaleIntro();
}否则{
playMaleIntro();
}
const timeoutDelays=[0,5000,3700,5700,4900,7500,9000,6700,6700,8000];
useffect(()=>{
常量更改段落=()=>{
设置显示段落(段落[索引]);
setIndex(index+1);
};
setTimeout(更改段落,timeoutDelays[索引]);
},[指数];
返回(
{index>=10?:null}
{显示段落}

); }; 导出默认简介;
这是呼吸功能:


import React, { FC } from 'react';
import { useStyles } from './styles';
import { ButtonBar, Header } from 'components';
import BreatheCircles from './BreatheCircles';

const Breathe: FC = () => {
  const classes = useStyles();

  return (
    <>
      <Header />
      <div className={classes.root}>
        <div className={classes.circles}>
          <BreatheCircles />
        </div>
        <div className={classes.buttonBar}>
          <ButtonBar />
        </div>
      </div>
    </>
  );
};

export default Breathe;


import React, { FC } from 'react';
import { useStyles } from './styles';
import { ButtonBar, Header } from 'components';
import BreatheCircles from './BreatheCircles';
import { audioFiles, createAudio } from 'dha-assets';
import { State } from 'containers/Tutorial/Tutorial';
import { useSelector } from 'react-redux';
import breathe_female from '../../assets/audio/Female/breathe_female.mp3';
import breathe_male from '../../assets/audio/Male/breathe_male.mp3';

createAudio('breathe_female', breathe_female);
createAudio('breathe_male', breathe_male);

const Breathe: FC = () => {
  const classes = useStyles();
  const gender = useSelector<State>((state) => state.gender);

  if (gender !== 'mute') {
    audioFiles[`breathe_${gender}`].play();
    audioFiles[`breathe_${gender}`].loop = true;
  }

  return (
    <>
      <Header />
      <div className={classes.root}>
        <div className={classes.circles}>
          <BreatheCircles />
        </div>
        <div className={classes.buttonBar}>
          <ButtonBar />
        </div>
      </div>
    </>
  );
};

export default Breathe;



从“React”导入React,{FC};
从“./styles”导入{useStyles};
从“组件”导入{ButtonBar,Header};
从“/呼吸循环”导入呼吸循环;
常数呼吸:FC=()=>{
const classes=useStyles();
返回(
);
};
出口违约;
呼吸循环使用setInterval按顺序旋转不同的循环,它们的设置基本相同。以下是其中一个圆圈:


import React, { Component, FC } from 'react';
import { useStyles } from './styles';
import Counter from 'components/Counter/Counter';
import { State } from 'containers/Tutorial/Tutorial';
import { playAudio } from 'dha-assets';
import { useSelector } from 'react-redux';

const playFemaleInhale = () => {
  playAudio('inhale_female');
}
const playMaleInhale = () => {
  playAudio('inhale_male');
}

const InCircle: FC = () => {
  const classes = useStyles();
  const gender = useSelector<State>((state) => state.gender);

  if (gender === 'female') {
    playFemaleInhale();
  } else if (gender === 'male') {
    playMaleInhale();
  }
  
  return (
    <>
      <div className={classes.circleBreatheIn} />
      <div className={classes.text}>
        Inhale
      </div>
    </>
  );
};

// This is a wrapper class for the FC above. The animaations work better with the class.
class BreatheInCircle extends Component {
  render() {
    return (
      <>
        <InCircle />
        <div style={{ color: '#000' }}>
          <Counter />
        </div>
      </>
    );
  }
}

export default BreatheInCircle;



从'React'导入React,{Component,FC};
从“./styles”导入{useStyles};
从“组件/计数器/计数器”导入计数器;
从“containers/Tutorial/Tutorial”导入{State};
从“dha资产”导入{playAudio};
从'react redux'导入{useSelector};
const PlayFemaleInosit=()=>{
播放音频(“吸入女性”);
}
const playmalenosis=()=>{
播放音频(“吸入男性”);
}
循环常数:FC=()=>{
const classes=useStyles();
const-gender=useSelector((state)=>state.gender);
如果(性别==‘女性’){
PlayFemale吸入();
}否则,如果(性别==‘男性’){
playmalehosis();
}
返回(
吸入
);
};
//这是上述FC的包装器类。动画在课堂上表现得更好。
类呼吸圈扩展组件{
render(){
返回(
);
}
}
导出默认呼吸圈;
以下是我到目前为止的想法,iOS自动播放被禁用。但如果是这样,介绍和教程也不会播放。所以我认为这不可能

对于那些想了解dha资产的人,它会在创建音频文件时维护它们的地图。然后,您可以从该单一贴图播放、暂停和停止(这就是在呼吸卷曲中播放音频文件的方式)。我确实尝试过在圆圈中创建音频文件,但是没有什么不同


请让我知道,如果我需要更清楚。我很乐意回答您的任何问题。

我知道我在回答我自己的问题,但我确实解决了这个问题。最后我把所有的音频文件合并成一个文件,一个是女声,一个是男声,然后直接在呼吸文件中播放

我仍在寻找更好的解决方案。如果有人找到了,请把它寄出去

我不认为我现在的方式是最有效的方式,我希望我的代码尽可能的高效和干净

以下是最终呼吸功能的代码:


import React, { FC } from 'react';
import { useStyles } from './styles';
import { ButtonBar, Header } from 'components';
import BreatheCircles from './BreatheCircles';

const Breathe: FC = () => {
  const classes = useStyles();

  return (
    <>
      <Header />
      <div className={classes.root}>
        <div className={classes.circles}>
          <BreatheCircles />
        </div>
        <div className={classes.buttonBar}>
          <ButtonBar />
        </div>
      </div>
    </>
  );
};

export default Breathe;


import React, { FC } from 'react';
import { useStyles } from './styles';
import { ButtonBar, Header } from 'components';
import BreatheCircles from './BreatheCircles';
import { audioFiles, createAudio } from 'dha-assets';
import { State } from 'containers/Tutorial/Tutorial';
import { useSelector } from 'react-redux';
import breathe_female from '../../assets/audio/Female/breathe_female.mp3';
import breathe_male from '../../assets/audio/Male/breathe_male.mp3';

createAudio('breathe_female', breathe_female);
createAudio('breathe_male', breathe_male);

const Breathe: FC = () => {
  const classes = useStyles();
  const gender = useSelector<State>((state) => state.gender);

  if (gender !== 'mute') {
    audioFiles[`breathe_${gender}`].play();
    audioFiles[`breathe_${gender}`].loop = true;
  }

  return (
    <>
      <Header />
      <div className={classes.root}>
        <div className={classes.circles}>
          <BreatheCircles />
        </div>
        <div className={classes.buttonBar}>
          <ButtonBar />
        </div>
      </div>
    </>
  );
};

export default Breathe;



从“React”导入React,{FC};
从“./styles”导入{useStyles};
从“组件”导入{ButtonBar,Header};
从“/呼吸循环”导入呼吸循环;
从“dha资产”导入{audioFiles,createAudio};
从“containers/Tutorial/Tutorial”导入{State};
从'react redux'导入{useSelector};
从“../../assets/audio/female/breathe_female.mp3”导入breathe_female;
从“../../assets/audio/male/breathe_-male.mp3”导入breathe_-male;
createAudio(“呼吸女性”,呼吸女性);
createAudio(“呼吸男性”,呼吸男性);
常数呼吸:FC=()=>{
const classes=useStyles();
const-gender=useSelector((state)=>state.gender);
如果(性别!=“静音”){
音频文件[`breathe_${gender}`].play();
音频文件[`breathe_${gender}`].loop=true;
}
返回(
);
};
出口违约;