代码之家  ›  专栏  ›  技术社区  ›  Francisco Flores

反应本机音频动画

  •  4
  • Francisco Flores  · 技术社区  · 8 年前

    我目前正在使用 React Native Audio

    目前,根据我的发现,包的onProgress()函数只发送当前的时间码。

    谢谢你的帮助!

    2 回复  |  直到 8 年前
        1
  •  6
  •   malsager    7 年前

    我目前正在研究somthing similer。

    import React, { Component } from 'react';
    import {
        Platform,
        StyleSheet,
        Text,
        View,
        TouchableOpacity,
        Button,
        LayoutAnimation,
        Image,
        ScrollView,
        Animated
    } from 'react-native';
    export default class App extends Component {
        state = {
            isPressed: false,
            animated: new Animated.Value(0),
            opacityA: new Animated.Value(1),
        }
        constructor(props) {
            super(props);
            this._onPress = this._onPress.bind(this);
        }
        _runAnimation() {
            const { animated, opacityA } = this.state;
    
            Animated.loop(
                Animated.parallel([
                    Animated.timing(animated, {
                        toValue: 1,
                        duration: 1000,
    
                    }),
                    Animated.timing(opacityA, {
                        toValue: 0,
                        duration: 1000,
    
                    })
                ])
            ).start();
        }
        _stopAnimation() {
            Animated.loop(
                Animated.parallel([
                    Animated.timing(animated),
                    Animated.timing(opacityA)
                ])
            ).stop();
        }
        _onPress() {
            this.setState(
                state => ({ isPressed: !state.isPressed }),
            )
        }
        _micButton() {
            const { isPressed, animated, opacityA, } = this.state;
            if (isPressed) {
                //some function
                this._runAnimation();
                return (
                    <Animated.View style={{
                        width: 100,
                        height: 100,
                        borderRadius: 50,
                        backgroundColor: 'rgba(153,0,0,0.4)',
                        opacity: opacityA,
                        transform: [
                            {
                                scale: animated
                            }
                        ]
                    }}>
                        {/* icon or image */}
                    </Animated.View>
                );
            } else {
                //some function
                return (
                    <View style={{
                        width: 100,
                        height: 100,
                        borderRadius: 50,
                        backgroundColor: 'rgba(153,0,0,0.4)',
                    }}>
                        {/* icon or image */}
                    </View>
                );
            }
        }
    
    
    
    
    
    
        render() {
            return (
                <View style={styles.container}>
                    <TouchableOpacity onPress={this._onPress}>
                        {this._micButton()}
                    </TouchableOpacity>
                </View>
            );
        }
    }
    
    
    const styles = StyleSheet.create({
        container: {
            flex: 1,
            justifyContent: 'center',
            alignItems: 'center',
            backgroundColor: '#F5FCFF',
        },
    
    });
    

        2
  •  1
  •   RY_ Zheng    6 年前

    我使用 expo-av .有一个API setOnRecordingStatusUpdate

     async startRecording(callback: onRecordingStatusUpdated) {
        this.isLoading = true
    
        await Audio.setAudioModeAsync({
          allowsRecordingIOS: true,
          interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_DO_NOT_MIX,
          playsInSilentModeIOS: true,
          shouldDuckAndroid: true,
          interruptionModeAndroid: Audio.INTERRUPTION_MODE_ANDROID_DO_NOT_MIX,
          playThroughEarpieceAndroid: true
        });
        if (this.recording !== null) {
          // only one recorder is allowed to exist
          this.recording.setOnRecordingStatusUpdate(null);
          this.recording = null;
        }
    
        const recording = new Audio.Recording();
        await recording.prepareToRecordAsync(this.recordingSettings);
        // ✨✨✨set the callback
        recording.setOnRecordingStatusUpdate(callback);
    
        this.recording = recording;
        await this.recording.startAsync(); // Will call this._updateScreenForRecordingStatus to update the screen.
        this.isLoading = false
      }
     // 🌟🌟🌟
     startRecording((status => console.log('[onRecording]', status)))