Skip to content

Latest commit

 

History

History
91 lines (76 loc) · 1.99 KB

File metadata and controls

91 lines (76 loc) · 1.99 KB

react-native-live-audio-visualizer

A powerful and customizable real-time audio visualizer component for React Native. This package allows developers to integrate dynamic and visually engaging audio visualizations into their React Native applications, enhancing the user experience with live audio feedback.

Installation

npm install react-native-live-audio-visualizer

Demo

Demo GIF

Usage

import * as React from 'react';
import { DeviceEventEmitter, StyleSheet, View } from 'react-native';
import {
  RequestAudioPermission,
  startAudioListening,
  stopAudioListening,
} from 'react-native-live-audio-visualizer';

export default function App() {
  const [result, setResult] = React.useState<number[]>([]);

  React.useEffect(() => {
    RequestAudioPermission(
      'This app needs audio permission',
      'Permission for audio',
      'OK'
    );

    startAudioListening().then(() => {
      console.log('Audio listening started');
    });

    DeviceEventEmitter.addListener('VisualizationChanged', (data) => {
      console.log('Event received:', data);

      setResult(data);
    });

    return () => {
      stopAudioListening().then(() => {
        console.log('Audio listening stopped');
      });
    };
  }, []);

  return (
    <View style={styles.container}>
      <View style={styles.waveContainer}>
        {result.map((wave, index) => (
          <View key={index} style={[styles.waveItem, { height: wave * 100 }]} />
        ))}
      </View>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    backgroundColor: 'black',
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
  },
  waveContainer: {
    alignItems: 'center',
    justifyContent: 'center',
    width: '100%',
    flexDirection: 'row',
  },
  box: {
    width: 60,
    height: 60,
    marginVertical: 20,
  },
  waveItem: {
    width: 12,
    backgroundColor: '#B692F6',
    marginHorizontal: 1,
    borderRadius: 4,
    minHeight: 10,
    marginRight: 8,
  },
});