标签: expo-av

expo-av 如何使用 URL 播放音频

我正在我的 Expo 托管应用程序中使用expo-av包。

我将互联网上音频文件的 URL 传递给createAsync,但音频未播放。当我使用与源代码一起存在的音频文件时require(),音频播放没有问题。

  const { sound } = await Audio.Sound.createAsync({uri: url});
  await sound.playAsync();
  await sound.unloadAsync();
Run Code Online (Sandbox Code Playgroud)

在互联网上播放音频需要什么具体步骤吗?

react-native expo expo-av

8
推荐指数
1
解决办法
7019
查看次数

Expo:实时获取音频数据并通过Socket.IO发送

我想做的应用程序

我想制作像 Shazam 这样的音频识别移动应用程序

我想通过 Socket.IO 每秒或每个样本将记录数据发送到基于机器学习的识别服务器(也许每秒发送数据采样率次数太多),然后移动应用程序接收并显示预测结果。

问题

如何在录音时获取数据recordingInstance?我读了世博会的音频文档,但我不知道该怎么做。

迄今为止

我跑了两个例子:

现在我想混合两个例子。感谢您的阅读。如果我能console.log记录数据,那会有很大帮助。

相关问题

sound-recognition socket.io react-native expo expo-av

7
推荐指数
1
解决办法
1912
查看次数

如何更改expo-av中的视频显示方向?

我用来expo-av显示视频。视频已播放Portrait,我正在尝试根据设备方向显示视频。我的代码是:

import { Video } from 'expo-av';
import * as ScreenOrientation from 'expo-screen-orientation';
import NavigationHelper from '../../../../Helpers/NavigationHelper';

export default class VideoScreen extends Component {
  render() {
    const { route } = this.props;
    const { videoUri } = route.params;

    if (!videoUri) {
      NavigationHelper.back();
    }

    return (
      <ScrollView style={styles.container}>
        <Video
          source={{ uri: videoUri }}
          rate={1.0}
          volume={1.0}
          isMuted={false}
          resizeMode={Video.RESIZE_MODE_CONTAIN}
          shouldPlay
          isLooping
          useNativeControls
          style={{ width: 300, height: 300, alignSelf: 'center' }}
          onReadyForDisplay={() => { const naturalSize = ScreenOrientation.Orientation.PORTRAIT …
Run Code Online (Sandbox Code Playgroud)

react-native expo expo-av

6
推荐指数
1
解决办法
2192
查看次数

Expo-AV - 当我们的应用程序最小化/关闭时,它会暂停用户的背景音乐,例如 Spotify

我们遇到了一个非常奇怪的问题,即我们的应用程序上正在播放静音视频,但是当您最小化应用程序时,如果用户在 Spotify 或 Apple Music 等上播放背景音乐,它会暂停他们的音乐吗?

我们的组件实际上是......

import { Video } from 'expo-av'

const intro = require('@/assets/videos/welcome_intro.mp4')

export const Background = () => {
  return <Video
    style={{ position: 'absolute', width: '100%', height: '100%' }}
    source={ intro }
    resizeMode="cover"
    isLooping={ true }
    isMuted={ true }
    shouldPlay={ true }
/>
}
Run Code Online (Sandbox Code Playgroud)

我们的 .mp4 也没有音频通道,因此不应被拾取。

然而,当我们删除这个Video组件时,应用程序就会按预期工作。

想要的结果是......

在后台播放静音视频,在任何情况下都不会影响用户的音乐/音频等。视频应被视为没有音频。

有想法吗?

video reactjs react-native expo expo-av

6
推荐指数
0
解决办法
312
查看次数

停止音频 expo-av - React Native Expo

我在react-native-expo中使用来自expo-av的音频

我可以在 Audio.sound 构造函数上使用 loadAsync 方法运行音频。

尽管当我试图阻止声音时,它并没有停止。

以下是简约的代码片段。这是停止声音的正确方法吗?我无法找到解决方案。

import React, {useState,  useEffect} from 'react';
import {  Button } from 'react-native';
import { Audio } from 'expo-av';

export default function App() {
  const [audioStatus, setAudioStatus] = useState(false)
  const sound = new Audio.Sound();
  
  useEffect(()=>{
    (async () => {
            console.log('status', audioStatus)
            if (audioStatus) {
                await sound.loadAsync('https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3')
                try {
                    await sound.playAsync()
                } catch (e) {
                    console.log(e)
                }
            }else {
                await sound.stopAsync()
                await sound.unloadAsync()
            }
          })()
  },[audioStatus])
  
  return (
      <Button color={audioStatus ? …
Run Code Online (Sandbox Code Playgroud)

javascript audio react-native expo expo-av

5
推荐指数
1
解决办法
2714
查看次数

尝试访问 AVPlaybackStatus 的错误属性时出错

我是 TypeScript 新手,正在尝试使用expo-av进行音频播放。

以下代码给我一个错误:TS2339: Property 'error' does not exist on type 'AVPlaybackStatus'.

const { sound, status } = await Audio.Sound.createAsync(track.mp3);
if (status.isLoaded) {
  console.info(status.durationMillis);
}
else {
  console.error("track not loaded", status.error);
}
Run Code Online (Sandbox Code Playgroud)

我查看了定义status并发现:

export type AVPlaybackStatus =
  | {
      isLoaded: false;
      androidImplementation?: string;
      error?: string; // populated exactly once when an error forces the object to unload
    }
  | {
      isLoaded: true;
      androidImplementation?: string;

      uri: string;

      progressUpdateIntervalMillis: number;
      durationMillis?: number;
      positionMillis: number;
      playableDurationMillis?: number;
      seekMillisToleranceBefore?: …
Run Code Online (Sandbox Code Playgroud)

typescript react-native union-types expo expo-av

5
推荐指数
1
解决办法
1639
查看次数

如何在Expo-av中同步播放多个音频文件?

在我的应用程序中,用户录制自己在背景音乐中唱歌的声音,然后同时播放录制的音频和该背景音乐。我的音频系统使用 expo-av。问题在于,在播放阶段,音频经常不同步,因为 expo 仅真正支持异步音频。有人对如何从高层次解决这个问题有什么建议吗?

我的一些想法:

  1. 将两个音频文件混合到一个文件中进行播放。除了录音和背景音轨也不同步之外,这几乎是有效的。如果我确切地知道它们偏移了多少,我可以在混音时将一定量的静音添加到其中一个文件中。然而,我还没有找到一种方法来准确计算这个偏移量。
  2. 减少录制和播放开始所需的时间,使延迟不明显。我发现这里有帮助的一些事情是以较低质量录制并使用较小的音频文件。如果有任何其他提示,我们将不胜感激。
  3. 使用与 expo-av 不同的音频库。有没有想到更好地支持同步音频的?理想情况下,Expo 或至少 React Native 也会支持它。

audio react-native expo expo-av

5
推荐指数
0
解决办法
518
查看次数

React Native Expo Audio 无法在 iOS 上播放

我正在尝试构建一个简单的音频播放器,从我们的服务器加载文件并播放它。目前这段代码可以在 Android 上运行,但在 iOS 上不起作用,会抛出错误

AVPlayerItem 实例失败,错误代码为 -11850,域为“AVFoundationErrorDomain”

据我所知,这是 iOS 在尝试加载音频文件时需要文件扩展名的问题。我们在 React Web 应用程序上使用完全相同的服务器路由,没有任何问题,它能够在简单的音频 html 元素中加载文件。Android 也可以使用下面的 React Native 代码运行:

const loadNewPlaybackInstance = async playing => {
  const source = { uri: url } // defined as `${api}/api/v1/voicemail?s3_email_id=${s3_email_id}`
  // This returns a voicemail.wav file 

  const initialStatus = {
    shouldPlay: playing,
    rate: 1.0,
    volume: volume,
    isMuted: false,
  }

  try {
    const { sound } = await Audio.Sound.createAsync(
      source,
      initialStatus,
      onPlaybackStatusUpdate,
    )
    setPlaybackInstance(sound)

    updateScreenForLoading(false)
  } catch (error) {
    console.error(error.message)
  }
}
Run Code Online (Sandbox Code Playgroud)

我发现了另一个问题,但没有真正的答案。 …

avaudioplayer ios react-native expo expo-av

5
推荐指数
1
解决办法
2592
查看次数

EXPO-AV 音频文件缓存 -REACT NATIVE

我正在使用 React Native 来开发一个应用程序。我目前正在使用 expo AV 录制音频文件,然后我可以将该文件发送到服务器。我真的不希望这些文件占用移动设备中的内存。

我使用 URI 来发送文件。但是,我想知道,每次使用这个应用程序时,我是否都会占用设备的内存?我认为该音频文件正在保存在缓存中。

这是我到目前为止所做的:


import { Audio } from "expo-av";


...

recording.stopAndUnloadAsync();
const uri = recording.getURI(); // use this uri to send by formData to the server
console.log("Recording stopped and stored at", uri);
...
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有办法清理这个缓存?

每次我用这个库录音时,这些文件真的会占用内存吗?

我怎样才能避免糟糕的用户体验,即用户在不知道确切原因的情况下失去记忆?这是一个大问题吗?

谢谢

javascript caching react-native expo expo-av

5
推荐指数
1
解决办法
768
查看次数

在 ReactNative 应用程序中嵌入不同来源的视频的最佳实践解决方案是什么?

我目前正在尝试将多个来源的视频实现到使用 Expo 和 ReactNative 构建的学习应用程序中。

我想包含以下视频源:

  • YouTube
  • 维梅奥
  • 微软流
  • 自定义 .mp4 链接

我尝试在以下配置中使用WebView:

<WebView
  ref={videoRef}
  onContentProcessDidTerminate={() => videoRef?.current?.reload()}
  javaScriptEnabled={true}
  sharedCookiesEnabled={true}
  scrollEnabled={false}
  allowsFullscreenVideo={true}
  //allowsInlineMediaPlayback={true}
  renderLoading={() => <ActivityIndicator />}
  renderError={() => <Text>An error occurred.</Text>}
  userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
  source={{
    uri: src,
  }}
  mediaPlaybackRequiresUserAction={true}
/>
Run Code Online (Sandbox Code Playgroud)

Android 和 iOS上的体验必须是无缝的,同时允许设备轮换。当用户以纵向模式启动视频并旋转设备时,我需要视频像 YouTube 应用程序一样继续无缝播放。

目前,我面临的问题是,我的解决方案在旋转屏幕时不起作用。视频停止,播放器关闭,视频暂停。然后方向锁定回纵向模式(这是应用程序所需的旋转)。我也尝试过,ScreenOrientation.unlockAsync()但我仍然面临同样的问题。使用<Video />from同样的事情expo-av

回顾一下,一些核心要求是:

  • 视频也需要手动启动,不能自行启动。
  • 允许完全的设备旋转自由
  • 旋转设备时不得停止
  • 必须内联和全屏工作
  • 必须允许多个来源
  • 必须适用于 Android 和 iOS

一个人如何去完成这样的事情呢?

javascript video react-native expo expo-av

5
推荐指数
1
解决办法
333
查看次数

在 React Native expo-Audio 中录制音频时如何提高音量?

我正在尝试使用 React Native expo-av 录制音频,但由于某种原因,音频输出就像我在通话中一样。我怎么解决这个问题?

volume react-native expo-av

0
推荐指数
1
解决办法
1633
查看次数