我正在我的 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)
在互联网上播放音频需要什么具体步骤吗?
我想制作像 Shazam 这样的音频识别移动应用程序
我想通过 Socket.IO 每秒或每个样本将记录数据发送到基于机器学习的识别服务器(也许每秒发送数据采样率次数太多),然后移动应用程序接收并显示预测结果。
如何在录音时获取数据recordingInstance?我读了世博会的音频文档,但我不知道该怎么做。
我跑了两个例子:
现在我想混合两个例子。感谢您的阅读。如果我能console.log记录数据,那会有很大帮助。
https://forums.expo.io/t/measure-loudness-of-the-audio-in-realtime/18259
这可能是不可能的(播放动画?实时获取数据?)
https://forums.expo.io/t/how-to-get-the-volume-while-recording-an-audio/44100
没有答案
https://forums.expo.io/t/stream-microphone-recording/4314
根据这个问题,
https://www.npmjs.com/package/react-native-recording
似乎是一个解决方案,但它需要喷射。
我用来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)我们遇到了一个非常奇怪的问题,即我们的应用程序上正在播放静音视频,但是当您最小化应用程序时,如果用户在 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组件时,应用程序就会按预期工作。
想要的结果是......
在后台播放静音视频,在任何情况下都不会影响用户的音乐/音频等。视频应被视为没有音频。
有想法吗?
我在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) 我是 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) 在我的应用程序中,用户录制自己在背景音乐中唱歌的声音,然后同时播放录制的音频和该背景音乐。我的音频系统使用 expo-av。问题在于,在播放阶段,音频经常不同步,因为 expo 仅真正支持异步音频。有人对如何从高层次解决这个问题有什么建议吗?
我的一些想法:
我正在尝试构建一个简单的音频播放器,从我们的服务器加载文件并播放它。目前这段代码可以在 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)
我正在使用 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)
我的问题是,有没有办法清理这个缓存?
每次我用这个库录音时,这些文件真的会占用内存吗?
我怎样才能避免糟糕的用户体验,即用户在不知道确切原因的情况下失去记忆?这是一个大问题吗?
谢谢
我目前正在尝试将多个来源的视频实现到使用 Expo 和 ReactNative 构建的学习应用程序中。
我想包含以下视频源:
我尝试在以下配置中使用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。
回顾一下,一些核心要求是:
一个人如何去完成这样的事情呢?
我正在尝试使用 React Native expo-av 录制音频,但由于某种原因,音频输出就像我在通话中一样。我怎么解决这个问题?
expo-av ×11
react-native ×11
expo ×10
javascript ×3
audio ×2
video ×2
caching ×1
ios ×1
reactjs ×1
socket.io ×1
typescript ×1
union-types ×1
volume ×1