Repository files navigation

react-voice-visualizer

Overview

The react-voice-visualizer library offers a comprehensive and highly customizable solution for capturing, visualizing, and manipulating audio recordings within your web applications. Built with React hook and component, this library simplifies the process of integrating audio recording and visualization functionalities using the Web Audio API.

screenshot

Experience the Demo App: Click here to explore the react-voice-visualizer. Try it out and see it in action!

Key Features:

  • Audio Recording: Easily capture audio recordings with minimal setup using React hook and component.

  • Visualization: Visualize audio data in real-time, making it suitable for applications such as voice recognition, sound analysis, and more.

  • Customization: The library is absolutely customizable, allowing you to tailor the audio recording and visualization components to fit your project's unique requirements.

  • Responsiveness: Create audio applications that adapt seamlessly to various screen sizes and devices, ensuring a consistent user experience across platforms.

This README provides a comprehensive guide to effectively utilizing the library's features.

Installation

To integrate the React Voice Visualizer library into your project, simply install it via npm or yarn:

npm install react-voice-visualizer

or

yarn add react-voice-visualizer

Version 2.x.x Release Notes

Breaking Changes:

  • Ref Handling Update: In this version, the library has been enhanced to manage audio references (audioRef) internally. Users no longer need to pass ref={audioRef} separately to components. This change offers a more seamless and intuitive experience.

New Features:

  • Preloaded Audio Blob Support: Version 2.x.x introduces the capability to set preloaded audio blobs. Users now have the flexibility to load audio blobs from various sources, such as user inputs or files using setPreloadedAudioBlob function, expanding the library's versatility in different scenarios.

For a live demonstration of the React Voice Visualizer library, you can check out the Demo Voice Visualizer App. This app showcases various features and functionalities of the library in action.

Feel free to explore the demo app to see how the React Voice Visualizer can be used in different scenarios. You can refer to the source code of the demo app for additional examples and inspiration for using the library effectively.

Usage

To start using the VoiceVisualizer component, you will need to import the necessary hook and component from the library. Here's an example of how to use this library in your App component:

import{useEffect}from"react";import{useVoiceVisualizer,VoiceVisualizer}from"react-voice-visualizer";constApp=()=>{// Initialize the recorder controls using the hookconstrecorderControls=useVoiceVisualizer();const{// ... (Extracted controls and states, if necessary)
recordedBlob,
error,}=recorderControls;// Get the recorded audio blobuseEffect(()=>{if(!recordedBlob)return;console.log(recordedBlob);},[recordedBlob]);// Get the error when it occursuseEffect(()=>{if(!error)return;console.error(error);},[error]);return(<VoiceVisualizercontrols={recorderControls}/>);};exportdefaultApp;

Getting started

  1. Import the required components and hooks from the library.
  2. Initialize the recorder controls using the useVoiceVisualizer hook.
  3. Use the provided state and functions to manage audio recording and playback.
  4. Render the VoiceVisualizer component to display the real-time audio visualization.
  5. Use the provided buttons to start, pause, stop, and save the audio recording.

Remember to include necessary CSS styles to customize the components and buttons according to your design preferences.

API Reference

useVoiceVisualizer() Hook

A hook that provides recorder controls and state for audio visualization.

Usage
constrecorderControls=useVoiceVisualizer();
Parameters (All parameters are optional)
ParameterTypeDescription
onStartRecording() => voidCallback function triggered when recording starts.
onStopRecording() => voidCallback function triggered when recording stops.
onPausedRecording() => voidCallback function triggered when recording is paused.
onResumedRecording() => voidCallback function triggered when recording is resumed.
onClearCanvas() => voidCallback function triggered when the canvas is cleared.
onEndAudioPlayback() => voidCallback function triggered when audio playback ends.
onStartAudioPlayback() => voidCallback function triggered when audio playback starts.
onPausedAudioPlayback() => voidCallback function triggered when audio playback is paused.
onResumedAudioPlayback() => voidCallback function triggered when audio playback is resumed.
onErrorPlayingAudio(error: Error) => voidCallback function is invoked when an error occurs during the execution of audio.play(). It provides an opportunity to handle and respond to such error.
shouldHandleBeforeUnloadbooleanDetermines whether the beforeunload event handler should be added to the window, preventing page unload if necessary (true by default).
mediaRecorderOptionsMediaRecorderOptionsConfiguration options for the MediaRecorder instance.
Returns
ReturnsTypeDescription
audioRefMutableRefObject
<HTMLAudioElement | null>
Reference to the audio element used for playback.
isRecordingInProgressbooleanIndicates if audio recording is currently in progress.
isPausedRecordingbooleanIndicates if audio recording is currently paused.
audioDataUint8ArrayAudio data for real-time visualization.
recordingTimenumberElapsed time during recording in milliseconds.
mediaRecorderMediaRecorder | nullMediaRecorder instance used for recording audio.
durationnumberDuration of the recorded audio in seconds.
currentAudioTimenumberCurrent playback time of the recorded audio in seconds.
audioSrcstringSource URL of the recorded audio file for playback.
isPausedRecordedAudiobooleanIndicates if recorded audio playback is paused.
isProcessingRecordedAudiobooleanIndicates if the recorded audio is being processed and 'Processing Audio...' text shown.
isClearedbooleanIndicates if the canvas has been cleared.
isAvailableRecordedAudiobooleanIndicates whether recorded audi is available and not currently being processed. This return value can be used to check if it's an appropriate time to work with recorded audio data in your application.
recordedBlobBlob | nullRecorded audio data in Blob format.
bufferFromRecordedBlobAudioBuffer | nullAudio buffer from the recorded Blob.
formattedDurationstringFormatted duration time in format 09:51m.
formattedRecordingTimestringFormatted recording current time in format 09:51.
formattedRecordedAudioCurrentTimestringFormatted recorded audio current time in format 09:51:1.
startRecording() => voidFunction to start audio recording.
togglePauseResume() => voidFunction to toggle pause/resume during recording and playback of recorded audio.
startAudioPlayback() => voidFunction to start/resume playback of recorded audio.
stopAudioPlayback() => voidFunction to pause playback of recorded audio.
stopRecording() => voidFunction to stop audio recording.
saveAudioFile() => voidThis function allows you to save the recorded audio as a webm file format. Please note that it supports saving audio only in the webm format. If you need to save the audio in a different format, you can use external libraries like FFmpeg to convert the Blob to your desired format. This flexibility allows you to tailor the output format according to your specific needs.
clearCanvas() => voidFunction to clear the visualization canvas.
setCurrentAudioTimeDispatch<SetStateAction<number>>Internal function to handle current audio time updates during playback.
errorError | nullError object if any error occurred during recording or playback.
isProcessingOnResizebooleanIndicates whether audio processing is occurring during a resize event when audio is recorded and a blob is present.
isProcessingStartRecordingbooleanWhen set to true, it indicates that the start recording button has been pressed, but either the permission to record has not yet been granted or the recording itself has not yet commenced. This prop serves as a helpful flag to manage the state of the recording process, allowing components to react accordingly to the current stage of recording initiation.
isPreloadedBlobbooleanThis property indicates whether a preloaded audio blob is available for playback or processing.
setPreloadedAudioBlob(blob: Blob) => voidUsers can use this method to set a preloaded audio blob, enabling seamless integration with user inputs, file uploads etc.
_setIsProcessingAudioOnCompleteDispatch<SetStateAction<boolean>>Internal function to set isProcessingAudioOnComplete state.
_setIsProcessingOnResizeDispatch<SetStateAction<boolean>>Internal function to set isProcessingOnResize state.

VoiceVisualizer Component

A component that visualizes the real-time audio wave during recording.

Props for AudioVisualizer Component

PropsDescriptionDefaultType
controlsProvides the audio recording controls and states required for visualization.-Controls (Required)
heightThe height of the visualization canvas.200string | number (Optional)
widthThe width of the visualization canvas.100%string | number (Optional)
backgroundColorThe background color of the visualization canvas.transparentstring (Optional)
mainBarColorThe color of the main audio wave line.#FFFFFFstring (Optional)
secondaryBarColorThe secondary color of the audio wave line.#5e5e5estring (Optional)
speedThe speed of the audio visualization animation (Integer from 1 to 6, higher number is slower).3number (Optional)
barWidthThe width of each audio wave bar.2number (Optional)
gapThe gap between each audio wave bar.1number (Optional)
roundedThe border radius of the audio wave bars.5number (Optional)
isControlPanelShownWhether to display the audio control panel, including features such as recorded audio duration, current recording time, and control buttons. If you want to create your own UI, set it to false and utilize functions from the useVoiceVisualizer hook to manage audio control.trueboolean (Optional)
isDownloadAudioButtonShownWhether to display the Download audio button.falseboolean (Optional)
fullscreenWhether the visualization should be displayed in fullscreen mode. It begins from the center by default.falseboolean (Optional)
animateCurrentPickWhether to animate the current pick in the visualization.trueboolean (Optional)
onlyRecordingWhether to show the visualization only during voice recording.falseboolean (Optional)
isDefaultUIShownWhether to show a default UI on Canvas before recording. If you want to create your own UI, set it to false.trueboolean (Optional)
mainContainerClassNameThe CSS class name for the main container.-string (Optional)
canvasContainerClassNameThe CSS class name for the container of the visualization canvas.-string (Optional)
isProgressIndicatorShownWhether to show the progress indicator after recording.trueboolean (Optional)
progressIndicatorClassNameThe CSS class name for the progress indicator.-string (Optional)
isProgressIndicatorTimeShownWhether to show the progress indicator time.trueboolean (Optional)
progressIndicatorTimeClassNameThe CSS class name for the progress indicator with time.-string (Optional)
isProgressIndicatorOnHoverShownWhether to show the progress indicator on hover.trueboolean (Optional)
progressIndicatorOnHoverClassNameThe CSS class name for the progress indicator on hover.-string (Optional)
isProgressIndicatorTimeOnHoverShownWhether to show the progress indicator time on hover.trueboolean (Optional)
progressIndicatorTimeOnHoverClassNameThe CSS class name for the progress indicator with time on hover.-string (Optional)
isAudioProcessingTextShownWhether to show the audio processing text.trueboolean (Optional)
audioProcessingTextClassNameThe CSS class name for the audio processing text.-string (Optional)
controlButtonsClassNameThe CSS class name for the Clear Button and Download Audio button components.-string (Optional)

License

This library is distributed under the MIT License.

Issues

If you encounter any bugs or have suggestions for improvements, please report them in the GitHub Issues section.

Support

For support or general questions, you can reach out to zarytskyi222@gmail.com.

If you find my project valuable and would like to support its development, you can buy me a coffee ☕. Your contribution helps keep this project active and growing.

Buy Me A Coffee

Your contribution is greatly appreciated! ❤️🚀

Credits

This library was created by Yurii Zarytskyi

linkedIn LinkedIn

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

react-voice-visualizer

Overview

The react-voice-visualizer library offers a comprehensive and highly customizable solution for capturing, visualizing, and manipulating audio recordings within your web applications. Built with React hook and component, this library simplifies the process of integrating audio recording and visualization functionalities using the Web Audio API.

screenshot

Experience the Demo App: Click here to explore the react-voice-visualizer. Try it out and see it in action!

Key Features:

  • Audio Recording: Easily capture audio recordings with minimal setup using React hook and component.

  • Visualization: Visualize audio data in real-time, making it suitable for applications such as voice recognition, sound analysis, and more.

  • Customization: The library is absolutely customizable, allowing you to tailor the audio recording and visualization components to fit your project's unique requirements.

  • Responsiveness: Create audio applications that adapt seamlessly to various screen sizes and devices, ensuring a consistent user experience across platforms.

This README provides a comprehensive guide to effectively utilizing the library's features.

Installation

To integrate the React Voice Visualizer library into your project, simply install it via npm or yarn:

npm install react-voice-visualizer

or

yarn add react-voice-visualizer

Version 2.x.x Release Notes

Breaking Changes:

  • Ref Handling Update: In this version, the library has been enhanced to manage audio references (audioRef) internally. Users no longer need to pass ref={audioRef} separately to components. This change offers a more seamless and intuitive experience.

New Features:

  • Preloaded Audio Blob Support: Version 2.x.x introduces the capability to set preloaded audio blobs. Users now have the flexibility to load audio blobs from various sources, such as user inputs or files using setPreloadedAudioBlob function, expanding the library's versatility in different scenarios.

For a live demonstration of the React Voice Visualizer library, you can check out the Demo Voice Visualizer App. This app showcases various features and functionalities of the library in action.

Feel free to explore the demo app to see how the React Voice Visualizer can be used in different scenarios. You can refer to the source code of the demo app for additional examples and inspiration for using the library effectively.

Usage

To start using the VoiceVisualizer component, you will need to import the necessary hook and component from the library. Here's an example of how to use this library in your App component:

import{useEffect}from"react";import{useVoiceVisualizer,VoiceVisualizer}from"react-voice-visualizer";constApp=()=>{// Initialize the recorder controls using the hookconstrecorderControls=useVoiceVisualizer();const{// ... (Extracted controls and states, if necessary)
recordedBlob,
error,}=recorderControls;// Get the recorded audio blobuseEffect(()=>{if(!recordedBlob)return;console.log(recordedBlob);},[recordedBlob]);// Get the error when it occursuseEffect(()=>{if(!error)return;console.error(error);},[error]);return(<VoiceVisualizercontrols={recorderControls}/>);};exportdefaultApp;

Getting started

  1. Import the required components and hooks from the library.
  2. Initialize the recorder controls using the useVoiceVisualizer hook.
  3. Use the provided state and functions to manage audio recording and playback.
  4. Render the VoiceVisualizer component to display the real-time audio visualization.
  5. Use the provided buttons to start, pause, stop, and save the audio recording.

Remember to include necessary CSS styles to customize the components and buttons according to your design preferences.

API Reference

useVoiceVisualizer() Hook

A hook that provides recorder controls and state for audio visualization.

Usage
constrecorderControls=useVoiceVisualizer();
Parameters (All parameters are optional)
ParameterTypeDescription
onStartRecording() => voidCallback function triggered when recording starts.
onStopRecording() => voidCallback function triggered when recording stops.
onPausedRecording() => voidCallback function triggered when recording is paused.
onResumedRecording() => voidCallback function triggered when recording is resumed.
onClearCanvas() => voidCallback function triggered when the canvas is cleared.
onEndAudioPlayback() => voidCallback function triggered when audio playback ends.
onStartAudioPlayback() => voidCallback function triggered when audio playback starts.
onPausedAudioPlayback() => voidCallback function triggered when audio playback is paused.
onResumedAudioPlayback() => voidCallback function triggered when audio playback is resumed.
onErrorPlayingAudio(error: Error) => voidCallback function is invoked when an error occurs during the execution of audio.play(). It provides an opportunity to handle and respond to such error.
shouldHandleBeforeUnloadbooleanDetermines whether the beforeunload event handler should be added to the window, preventing page unload if necessary (true by default).
mediaRecorderOptionsMediaRecorderOptionsConfiguration options for the MediaRecorder instance.
Returns
ReturnsTypeDescription
audioRefMutableRefObject
<HTMLAudioElement | null>
Reference to the audio element used for playback.
isRecordingInProgressbooleanIndicates if audio recording is currently in progress.
isPausedRecordingbooleanIndicates if audio recording is currently paused.
audioDataUint8ArrayAudio data for real-time visualization.
recordingTimenumberElapsed time during recording in milliseconds.
mediaRecorderMediaRecorder | nullMediaRecorder instance used for recording audio.
durationnumberDuration of the recorded audio in seconds.
currentAudioTimenumberCurrent playback time of the recorded audio in seconds.
audioSrcstringSource URL of the recorded audio file for playback.
isPausedRecordedAudiobooleanIndicates if recorded audio playback is paused.
isProcessingRecordedAudiobooleanIndicates if the recorded audio is being processed and 'Processing Audio...' text shown.
isClearedbooleanIndicates if the canvas has been cleared.
isAvailableRecordedAudiobooleanIndicates whether recorded audi is available and not currently being processed. This return value can be used to check if it's an appropriate time to work with recorded audio data in your application.
recordedBlobBlob | nullRecorded audio data in Blob format.
bufferFromRecordedBlobAudioBuffer | nullAudio buffer from the recorded Blob.
formattedDurationstringFormatted duration time in format 09:51m.
formattedRecordingTimestringFormatted recording current time in format 09:51.
formattedRecordedAudioCurrentTimestringFormatted recorded audio current time in format 09:51:1.
startRecording() => voidFunction to start audio recording.
togglePauseResume() => voidFunction to toggle pause/resume during recording and playback of recorded audio.
startAudioPlayback() => voidFunction to start/resume playback of recorded audio.
stopAudioPlayback() => voidFunction to pause playback of recorded audio.
stopRecording() => voidFunction to stop audio recording.
saveAudioFile() => voidThis function allows you to save the recorded audio as a webm file format. Please note that it supports saving audio only in the webm format. If you need to save the audio in a different format, you can use external libraries like FFmpeg to convert the Blob to your desired format. This flexibility allows you to tailor the output format according to your specific needs.
clearCanvas() => voidFunction to clear the visualization canvas.
setCurrentAudioTimeDispatch<SetStateAction<number>>Internal function to handle current audio time updates during playback.
errorError | nullError object if any error occurred during recording or playback.
isProcessingOnResizebooleanIndicates whether audio processing is occurring during a resize event when audio is recorded and a blob is present.
isProcessingStartRecordingbooleanWhen set to true, it indicates that the start recording button has been pressed, but either the permission to record has not yet been granted or the recording itself has not yet commenced. This prop serves as a helpful flag to manage the state of the recording process, allowing components to react accordingly to the current stage of recording initiation.
isPreloadedBlobbooleanThis property indicates whether a preloaded audio blob is available for playback or processing.
setPreloadedAudioBlob(blob: Blob) => voidUsers can use this method to set a preloaded audio blob, enabling seamless integration with user inputs, file uploads etc.
_setIsProcessingAudioOnCompleteDispatch<SetStateAction<boolean>>Internal function to set isProcessingAudioOnComplete state.
_setIsProcessingOnResizeDispatch<SetStateAction<boolean>>Internal function to set isProcessingOnResize state.

VoiceVisualizer Component

A component that visualizes the real-time audio wave during recording.

Props for AudioVisualizer Component

PropsDescriptionDefaultType
controlsProvides the audio recording controls and states required for visualization.-Controls (Required)
heightThe height of the visualization canvas.200string | number (Optional)
widthThe width of the visualization canvas.100%string | number (Optional)
backgroundColorThe background color of the visualization canvas.transparentstring (Optional)
mainBarColorThe color of the main audio wave line.#FFFFFFstring (Optional)
secondaryBarColorThe secondary color of the audio wave line.#5e5e5estring (Optional)
speedThe speed of the audio visualization animation (Integer from 1 to 6, higher number is slower).3number (Optional)
barWidthThe width of each audio wave bar.2number (Optional)
gapThe gap between each audio wave bar.1number (Optional)
roundedThe border radius of the audio wave bars.5number (Optional)
isControlPanelShownWhether to display the audio control panel, including features such as recorded audio duration, current recording time, and control buttons. If you want to create your own UI, set it to false and utilize functions from the useVoiceVisualizer hook to manage audio control.trueboolean (Optional)
isDownloadAudioButtonShownWhether to display the Download audio button.falseboolean (Optional)
fullscreenWhether the visualization should be displayed in fullscreen mode. It begins from the center by default.falseboolean (Optional)
animateCurrentPickWhether to animate the current pick in the visualization.trueboolean (Optional)
onlyRecordingWhether to show the visualization only during voice recording.falseboolean (Optional)
isDefaultUIShownWhether to show a default UI on Canvas before recording. If you want to create your own UI, set it to false.trueboolean (Optional)
mainContainerClassNameThe CSS class name for the main container.-string (Optional)
canvasContainerClassNameThe CSS class name for the container of the visualization canvas.-string (Optional)
isProgressIndicatorShownWhether to show the progress indicator after recording.trueboolean (Optional)
progressIndicatorClassNameThe CSS class name for the progress indicator.-string (Optional)
isProgressIndicatorTimeShownWhether to show the progress indicator time.trueboolean (Optional)
progressIndicatorTimeClassNameThe CSS class name for the progress indicator with time.-string (Optional)
isProgressIndicatorOnHoverShownWhether to show the progress indicator on hover.trueboolean (Optional)
progressIndicatorOnHoverClassNameThe CSS class name for the progress indicator on hover.-string (Optional)
isProgressIndicatorTimeOnHoverShownWhether to show the progress indicator time on hover.trueboolean (Optional)
progressIndicatorTimeOnHoverClassNameThe CSS class name for the progress indicator with time on hover.-string (Optional)
isAudioProcessingTextShownWhether to show the audio processing text.trueboolean (Optional)
audioProcessingTextClassNameThe CSS class name for the audio processing text.-string (Optional)
controlButtonsClassNameThe CSS class name for the Clear Button and Download Audio button components.-string (Optional)

License

This library is distributed under the MIT License.

Issues

If you encounter any bugs or have suggestions for improvements, please report them in the GitHub Issues section.

Support

For support or general questions, you can reach out to zarytskyi222@gmail.com.

If you find my project valuable and would like to support its development, you can buy me a coffee ☕. Your contribution helps keep this project active and growing.

Buy Me A Coffee

Your contribution is greatly appreciated! ❤️🚀

Credits

This library was created by Yurii Zarytskyi

linkedIn LinkedIn

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

react-voice-visualizer

Overview

The react-voice-visualizer library offers a comprehensive and highly customizable solution for capturing, visualizing, and manipulating audio recordings within your web applications. Built with React hook and component, this library simplifies the process of integrating audio recording and visualization functionalities using the Web Audio API.

screenshot

Experience the Demo App: Click here to explore the react-voice-visualizer. Try it out and see it in action!

Key Features:

  • Audio Recording: Easily capture audio recordings with minimal setup using React hook and component.

  • Visualization: Visualize audio data in real-time, making it suitable for applications such as voice recognition, sound analysis, and more.

  • Customization: The library is absolutely customizable, allowing you to tailor the audio recording and visualization components to fit your project's unique requirements.

  • Responsiveness: Create audio applications that adapt seamlessly to various screen sizes and devices, ensuring a consistent user experience across platforms.

This README provides a comprehensive guide to effectively utilizing the library's features.

Installation

To integrate the React Voice Visualizer library into your project, simply install it via npm or yarn:

npm install react-voice-visualizer

or

yarn add react-voice-visualizer

Version 2.x.x Release Notes

Breaking Changes:

  • Ref Handling Update: In this version, the library has been enhanced to manage audio references (audioRef) internally. Users no longer need to pass ref={audioRef} separately to components. This change offers a more seamless and intuitive experience.

New Features:

  • Preloaded Audio Blob Support: Version 2.x.x introduces the capability to set preloaded audio blobs. Users now have the flexibility to load audio blobs from various sources, such as user inputs or files using setPreloadedAudioBlob function, expanding the library's versatility in different scenarios.

For a live demonstration of the React Voice Visualizer library, you can check out the Demo Voice Visualizer App. This app showcases various features and functionalities of the library in action.

Feel free to explore the demo app to see how the React Voice Visualizer can be used in different scenarios. You can refer to the source code of the demo app for additional examples and inspiration for using the library effectively.

Usage

To start using the VoiceVisualizer component, you will need to import the necessary hook and component from the library. Here's an example of how to use this library in your App component:

import{useEffect}from"react";import{useVoiceVisualizer,VoiceVisualizer}from"react-voice-visualizer";constApp=()=>{// Initialize the recorder controls using the hookconstrecorderControls=useVoiceVisualizer();const{// ... (Extracted controls and states, if necessary)
recordedBlob,
error,}=recorderControls;// Get the recorded audio blobuseEffect(()=>{if(!recordedBlob)return;console.log(recordedBlob);},[recordedBlob]);// Get the error when it occursuseEffect(()=>{if(!error)return;console.error(error);},[error]);return(<VoiceVisualizercontrols={recorderControls}/>);};exportdefaultApp;

Getting started

  1. Import the required components and hooks from the library.
  2. Initialize the recorder controls using the useVoiceVisualizer hook.
  3. Use the provided state and functions to manage audio recording and playback.
  4. Render the VoiceVisualizer component to display the real-time audio visualization.
  5. Use the provided buttons to start, pause, stop, and save the audio recording.

Remember to include necessary CSS styles to customize the components and buttons according to your design preferences.

API Reference

useVoiceVisualizer() Hook

A hook that provides recorder controls and state for audio visualization.

Usage
constrecorderControls=useVoiceVisualizer();
Parameters (All parameters are optional)
ParameterTypeDescription
onStartRecording() => voidCallback function triggered when recording starts.
onStopRecording() => voidCallback function triggered when recording stops.
onPausedRecording() => voidCallback function triggered when recording is paused.
onResumedRecording() => voidCallback function triggered when recording is resumed.
onClearCanvas() => voidCallback function triggered when the canvas is cleared.
onEndAudioPlayback() => voidCallback function triggered when audio playback ends.
onStartAudioPlayback() => voidCallback function triggered when audio playback starts.
onPausedAudioPlayback() => voidCallback function triggered when audio playback is paused.
onResumedAudioPlayback() => voidCallback function triggered when audio playback is resumed.
onErrorPlayingAudio(error: Error) => voidCallback function is invoked when an error occurs during the execution of audio.play(). It provides an opportunity to handle and respond to such error.
shouldHandleBeforeUnloadbooleanDetermines whether the beforeunload event handler should be added to the window, preventing page unload if necessary (true by default).
mediaRecorderOptionsMediaRecorderOptionsConfiguration options for the MediaRecorder instance.
Returns
ReturnsTypeDescription
audioRefMutableRefObject
<HTMLAudioElement | null>
Reference to the audio element used for playback.
isRecordingInProgressbooleanIndicates if audio recording is currently in progress.
isPausedRecordingbooleanIndicates if audio recording is currently paused.
audioDataUint8ArrayAudio data for real-time visualization.
recordingTimenumberElapsed time during recording in milliseconds.
mediaRecorderMediaRecorder | nullMediaRecorder instance used for recording audio.
durationnumberDuration of the recorded audio in seconds.
currentAudioTimenumberCurrent playback time of the recorded audio in seconds.
audioSrcstringSource URL of the recorded audio file for playback.
isPausedRecordedAudiobooleanIndicates if recorded audio playback is paused.
isProcessingRecordedAudiobooleanIndicates if the recorded audio is being processed and 'Processing Audio...' text shown.
isClearedbooleanIndicates if the canvas has been cleared.
isAvailableRecordedAudiobooleanIndicates whether recorded audi is available and not currently being processed. This return value can be used to check if it's an appropriate time to work with recorded audio data in your application.
recordedBlobBlob | nullRecorded audio data in Blob format.
bufferFromRecordedBlobAudioBuffer | nullAudio buffer from the recorded Blob.
formattedDurationstringFormatted duration time in format 09:51m.
formattedRecordingTimestringFormatted recording current time in format 09:51.
formattedRecordedAudioCurrentTimestringFormatted recorded audio current time in format 09:51:1.
startRecording() => voidFunction to start audio recording.
togglePauseResume() => voidFunction to toggle pause/resume during recording and playback of recorded audio.
startAudioPlayback() => voidFunction to start/resume playback of recorded audio.
stopAudioPlayback() => voidFunction to pause playback of recorded audio.
stopRecording() => voidFunction to stop audio recording.
saveAudioFile() => voidThis function allows you to save the recorded audio as a webm file format. Please note that it supports saving audio only in the webm format. If you need to save the audio in a different format, you can use external libraries like FFmpeg to convert the Blob to your desired format. This flexibility allows you to tailor the output format according to your specific needs.
clearCanvas() => voidFunction to clear the visualization canvas.
setCurrentAudioTimeDispatch<SetStateAction<number>>Internal function to handle current audio time updates during playback.
errorError | nullError object if any error occurred during recording or playback.
isProcessingOnResizebooleanIndicates whether audio processing is occurring during a resize event when audio is recorded and a blob is present.
isProcessingStartRecordingbooleanWhen set to true, it indicates that the start recording button has been pressed, but either the permission to record has not yet been granted or the recording itself has not yet commenced. This prop serves as a helpful flag to manage the state of the recording process, allowing components to react accordingly to the current stage of recording initiation.
isPreloadedBlobbooleanThis property indicates whether a preloaded audio blob is available for playback or processing.
setPreloadedAudioBlob(blob: Blob) => voidUsers can use this method to set a preloaded audio blob, enabling seamless integration with user inputs, file uploads etc.
_setIsProcessingAudioOnCompleteDispatch<SetStateAction<boolean>>Internal function to set isProcessingAudioOnComplete state.
_setIsProcessingOnResizeDispatch<SetStateAction<boolean>>Internal function to set isProcessingOnResize state.

VoiceVisualizer Component

A component that visualizes the real-time audio wave during recording.

Props for AudioVisualizer Component

PropsDescriptionDefaultType
controlsProvides the audio recording controls and states required for visualization.-Controls (Required)
heightThe height of the visualization canvas.200string | number (Optional)
widthThe width of the visualization canvas.100%string | number (Optional)
backgroundColorThe background color of the visualization canvas.transparentstring (Optional)
mainBarColorThe color of the main audio wave line.#FFFFFFstring (Optional)
secondaryBarColorThe secondary color of the audio wave line.#5e5e5estring (Optional)
speedThe speed of the audio visualization animation (Integer from 1 to 6, higher number is slower).3number (Optional)
barWidthThe width of each audio wave bar.2number (Optional)
gapThe gap between each audio wave bar.1number (Optional)
roundedThe border radius of the audio wave bars.5number (Optional)
isControlPanelShownWhether to display the audio control panel, including features such as recorded audio duration, current recording time, and control buttons. If you want to create your own UI, set it to false and utilize functions from the useVoiceVisualizer hook to manage audio control.trueboolean (Optional)
isDownloadAudioButtonShownWhether to display the Download audio button.falseboolean (Optional)
fullscreenWhether the visualization should be displayed in fullscreen mode. It begins from the center by default.falseboolean (Optional)
animateCurrentPickWhether to animate the current pick in the visualization.trueboolean (Optional)
onlyRecordingWhether to show the visualization only during voice recording.falseboolean (Optional)
isDefaultUIShownWhether to show a default UI on Canvas before recording. If you want to create your own UI, set it to false.trueboolean (Optional)
mainContainerClassNameThe CSS class name for the main container.-string (Optional)
canvasContainerClassNameThe CSS class name for the container of the visualization canvas.-string (Optional)
isProgressIndicatorShownWhether to show the progress indicator after recording.trueboolean (Optional)
progressIndicatorClassNameThe CSS class name for the progress indicator.-string (Optional)
isProgressIndicatorTimeShownWhether to show the progress indicator time.trueboolean (Optional)
progressIndicatorTimeClassNameThe CSS class name for the progress indicator with time.-string (Optional)
isProgressIndicatorOnHoverShownWhether to show the progress indicator on hover.trueboolean (Optional)
progressIndicatorOnHoverClassNameThe CSS class name for the progress indicator on hover.-string (Optional)
isProgressIndicatorTimeOnHoverShownWhether to show the progress indicator time on hover.trueboolean (Optional)
progressIndicatorTimeOnHoverClassNameThe CSS class name for the progress indicator with time on hover.-string (Optional)
isAudioProcessingTextShownWhether to show the audio processing text.trueboolean (Optional)
audioProcessingTextClassNameThe CSS class name for the audio processing text.-string (Optional)
controlButtonsClassNameThe CSS class name for the Clear Button and Download Audio button components.-string (Optional)

License

This library is distributed under the MIT License.

Issues

If you encounter any bugs or have suggestions for improvements, please report them in the GitHub Issues section.

Support

For support or general questions, you can reach out to zarytskyi222@gmail.com.

If you find my project valuable and would like to support its development, you can buy me a coffee ☕. Your contribution helps keep this project active and growing.

Buy Me A Coffee

Your contribution is greatly appreciated! ❤️🚀

Credits

This library was created by Yurii Zarytskyi

linkedIn LinkedIn

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

react-voice-visualizer

Overview

The react-voice-visualizer library offers a comprehensive and highly customizable solution for capturing, visualizing, and manipulating audio recordings within your web applications. Built with React hook and component, this library simplifies the process of integrating audio recording and visualization functionalities using the Web Audio API.

screenshot

Experience the Demo App: Click here to explore the react-voice-visualizer. Try it out and see it in action!

Key Features:

  • Audio Recording: Easily capture audio recordings with minimal setup using React hook and component.

  • Visualization: Visualize audio data in real-time, making it suitable for applications such as voice recognition, sound analysis, and more.

  • Customization: The library is absolutely customizable, allowing you to tailor the audio recording and visualization components to fit your project's unique requirements.

  • Responsiveness: Create audio applications that adapt seamlessly to various screen sizes and devices, ensuring a consistent user experience across platforms.

This README provides a comprehensive guide to effectively utilizing the library's features.

Installation

To integrate the React Voice Visualizer library into your project, simply install it via npm or yarn:

npm install react-voice-visualizer

or

yarn add react-voice-visualizer

Version 2.x.x Release Notes

Breaking Changes:

  • Ref Handling Update: In this version, the library has been enhanced to manage audio references (audioRef) internally. Users no longer need to pass ref={audioRef} separately to components. This change offers a more seamless and intuitive experience.

New Features:

  • Preloaded Audio Blob Support: Version 2.x.x introduces the capability to set preloaded audio blobs. Users now have the flexibility to load audio blobs from various sources, such as user inputs or files using setPreloadedAudioBlob function, expanding the library's versatility in different scenarios.

For a live demonstration of the React Voice Visualizer library, you can check out the Demo Voice Visualizer App. This app showcases various features and functionalities of the library in action.

Feel free to explore the demo app to see how the React Voice Visualizer can be used in different scenarios. You can refer to the source code of the demo app for additional examples and inspiration for using the library effectively.

Usage

To start using the VoiceVisualizer component, you will need to import the necessary hook and component from the library. Here's an example of how to use this library in your App component:

import{useEffect}from"react";import{useVoiceVisualizer,VoiceVisualizer}from"react-voice-visualizer";constApp=()=>{// Initialize the recorder controls using the hookconstrecorderControls=useVoiceVisualizer();const{// ... (Extracted controls and states, if necessary)
recordedBlob,
error,}=recorderControls;// Get the recorded audio blobuseEffect(()=>{if(!recordedBlob)return;console.log(recordedBlob);},[recordedBlob]);// Get the error when it occursuseEffect(()=>{if(!error)return;console.error(error);},[error]);return(<VoiceVisualizercontrols={recorderControls}/>);};exportdefaultApp;

Getting started

  1. Import the required components and hooks from the library.
  2. Initialize the recorder controls using the useVoiceVisualizer hook.
  3. Use the provided state and functions to manage audio recording and playback.
  4. Render the VoiceVisualizer component to display the real-time audio visualization.
  5. Use the provided buttons to start, pause, stop, and save the audio recording.

Remember to include necessary CSS styles to customize the components and buttons according to your design preferences.

API Reference

useVoiceVisualizer() Hook

A hook that provides recorder controls and state for audio visualization.

Usage
constrecorderControls=useVoiceVisualizer();
Parameters (All parameters are optional)
ParameterTypeDescription
onStartRecording() => voidCallback function triggered when recording starts.
onStopRecording() => voidCallback function triggered when recording stops.
onPausedRecording() => voidCallback function triggered when recording is paused.
onResumedRecording() => voidCallback function triggered when recording is resumed.
onClearCanvas() => voidCallback function triggered when the canvas is cleared.
onEndAudioPlayback() => voidCallback function triggered when audio playback ends.
onStartAudioPlayback() => voidCallback function triggered when audio playback starts.
onPausedAudioPlayback() => voidCallback function triggered when audio playback is paused.
onResumedAudioPlayback() => voidCallback function triggered when audio playback is resumed.
onErrorPlayingAudio(error: Error) => voidCallback function is invoked when an error occurs during the execution of audio.play(). It provides an opportunity to handle and respond to such error.
shouldHandleBeforeUnloadbooleanDetermines whether the beforeunload event handler should be added to the window, preventing page unload if necessary (true by default).
mediaRecorderOptionsMediaRecorderOptionsConfiguration options for the MediaRecorder instance.
Returns
ReturnsTypeDescription
audioRefMutableRefObject
<HTMLAudioElement | null>
Reference to the audio element used for playback.
isRecordingInProgressbooleanIndicates if audio recording is currently in progress.
isPausedRecordingbooleanIndicates if audio recording is currently paused.
audioDataUint8ArrayAudio data for real-time visualization.
recordingTimenumberElapsed time during recording in milliseconds.
mediaRecorderMediaRecorder | nullMediaRecorder instance used for recording audio.
durationnumberDuration of the recorded audio in seconds.
currentAudioTimenumberCurrent playback time of the recorded audio in seconds.
audioSrcstringSource URL of the recorded audio file for playback.
isPausedRecordedAudiobooleanIndicates if recorded audio playback is paused.
isProcessingRecordedAudiobooleanIndicates if the recorded audio is being processed and 'Processing Audio...' text shown.
isClearedbooleanIndicates if the canvas has been cleared.
isAvailableRecordedAudiobooleanIndicates whether recorded audi is available and not currently being processed. This return value can be used to check if it's an appropriate time to work with recorded audio data in your application.
recordedBlobBlob | nullRecorded audio data in Blob format.
bufferFromRecordedBlobAudioBuffer | nullAudio buffer from the recorded Blob.
formattedDurationstringFormatted duration time in format 09:51m.
formattedRecordingTimestringFormatted recording current time in format 09:51.
formattedRecordedAudioCurrentTimestringFormatted recorded audio current time in format 09:51:1.
startRecording() => voidFunction to start audio recording.
togglePauseResume() => voidFunction to toggle pause/resume during recording and playback of recorded audio.
startAudioPlayback() => voidFunction to start/resume playback of recorded audio.
stopAudioPlayback() => voidFunction to pause playback of recorded audio.
stopRecording() => voidFunction to stop audio recording.
saveAudioFile() => voidThis function allows you to save the recorded audio as a webm file format. Please note that it supports saving audio only in the webm format. If you need to save the audio in a different format, you can use external libraries like FFmpeg to convert the Blob to your desired format. This flexibility allows you to tailor the output format according to your specific needs.
clearCanvas() => voidFunction to clear the visualization canvas.
setCurrentAudioTimeDispatch<SetStateAction<number>>Internal function to handle current audio time updates during playback.
errorError | nullError object if any error occurred during recording or playback.
isProcessingOnResizebooleanIndicates whether audio processing is occurring during a resize event when audio is recorded and a blob is present.
isProcessingStartRecordingbooleanWhen set to true, it indicates that the start recording button has been pressed, but either the permission to record has not yet been granted or the recording itself has not yet commenced. This prop serves as a helpful flag to manage the state of the recording process, allowing components to react accordingly to the current stage of recording initiation.
isPreloadedBlobbooleanThis property indicates whether a preloaded audio blob is available for playback or processing.
setPreloadedAudioBlob(blob: Blob) => voidUsers can use this method to set a preloaded audio blob, enabling seamless integration with user inputs, file uploads etc.
_setIsProcessingAudioOnCompleteDispatch<SetStateAction<boolean>>Internal function to set isProcessingAudioOnComplete state.
_setIsProcessingOnResizeDispatch<SetStateAction<boolean>>Internal function to set isProcessingOnResize state.

VoiceVisualizer Component

A component that visualizes the real-time audio wave during recording.

Props for AudioVisualizer Component

PropsDescriptionDefaultType
controlsProvides the audio recording controls and states required for visualization.-Controls (Required)
heightThe height of the visualization canvas.200string | number (Optional)
widthThe width of the visualization canvas.100%string | number (Optional)
backgroundColorThe background color of the visualization canvas.transparentstring (Optional)
mainBarColorThe color of the main audio wave line.#FFFFFFstring (Optional)
secondaryBarColorThe secondary color of the audio wave line.#5e5e5estring (Optional)
speedThe speed of the audio visualization animation (Integer from 1 to 6, higher number is slower).3number (Optional)
barWidthThe width of each audio wave bar.2number (Optional)
gapThe gap between each audio wave bar.1number (Optional)
roundedThe border radius of the audio wave bars.5number (Optional)
isControlPanelShownWhether to display the audio control panel, including features such as recorded audio duration, current recording time, and control buttons. If you want to create your own UI, set it to false and utilize functions from the useVoiceVisualizer hook to manage audio control.trueboolean (Optional)
isDownloadAudioButtonShownWhether to display the Download audio button.falseboolean (Optional)
fullscreenWhether the visualization should be displayed in fullscreen mode. It begins from the center by default.falseboolean (Optional)
animateCurrentPickWhether to animate the current pick in the visualization.trueboolean (Optional)
onlyRecordingWhether to show the visualization only during voice recording.falseboolean (Optional)
isDefaultUIShownWhether to show a default UI on Canvas before recording. If you want to create your own UI, set it to false.trueboolean (Optional)
mainContainerClassNameThe CSS class name for the main container.-string (Optional)
canvasContainerClassNameThe CSS class name for the container of the visualization canvas.-string (Optional)
isProgressIndicatorShownWhether to show the progress indicator after recording.trueboolean (Optional)
progressIndicatorClassNameThe CSS class name for the progress indicator.-string (Optional)
isProgressIndicatorTimeShownWhether to show the progress indicator time.trueboolean (Optional)
progressIndicatorTimeClassNameThe CSS class name for the progress indicator with time.-string (Optional)
isProgressIndicatorOnHoverShownWhether to show the progress indicator on hover.trueboolean (Optional)
progressIndicatorOnHoverClassNameThe CSS class name for the progress indicator on hover.-string (Optional)
isProgressIndicatorTimeOnHoverShownWhether to show the progress indicator time on hover.trueboolean (Optional)
progressIndicatorTimeOnHoverClassNameThe CSS class name for the progress indicator with time on hover.-string (Optional)
isAudioProcessingTextShownWhether to show the audio processing text.trueboolean (Optional)
audioProcessingTextClassNameThe CSS class name for the audio processing text.-string (Optional)
controlButtonsClassNameThe CSS class name for the Clear Button and Download Audio button components.-string (Optional)

License

This library is distributed under the MIT License.

Issues

If you encounter any bugs or have suggestions for improvements, please report them in the GitHub Issues section.

Support

For support or general questions, you can reach out to zarytskyi222@gmail.com.

If you find my project valuable and would like to support its development, you can buy me a coffee ☕. Your contribution helps keep this project active and growing.

Buy Me A Coffee

Your contribution is greatly appreciated! ❤️🚀

Credits

This library was created by Yurii Zarytskyi

linkedIn LinkedIn

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

react-voice-visualizer

Overview

The react-voice-visualizer library offers a comprehensive and highly customizable solution for capturing, visualizing, and manipulating audio recordings within your web applications. Built with React hook and component, this library simplifies the process of integrating audio recording and visualization functionalities using the Web Audio API.

screenshot

Experience the Demo App: Click here to explore the react-voice-visualizer. Try it out and see it in action!

Key Features:

  • Audio Recording: Easily capture audio recordings with minimal setup using React hook and component.

  • Visualization: Visualize audio data in real-time, making it suitable for applications such as voice recognition, sound analysis, and more.

  • Customization: The library is absolutely customizable, allowing you to tailor the audio recording and visualization components to fit your project's unique requirements.

  • Responsiveness: Create audio applications that adapt seamlessly to various screen sizes and devices, ensuring a consistent user experience across platforms.

This README provides a comprehensive guide to effectively utilizing the library's features.

Installation

To integrate the React Voice Visualizer library into your project, simply install it via npm or yarn:

npm install react-voice-visualizer

or

yarn add react-voice-visualizer

Version 2.x.x Release Notes

Breaking Changes:

  • Ref Handling Update: In this version, the library has been enhanced to manage audio references (audioRef) internally. Users no longer need to pass ref={audioRef} separately to components. This change offers a more seamless and intuitive experience.

New Features:

  • Preloaded Audio Blob Support: Version 2.x.x introduces the capability to set preloaded audio blobs. Users now have the flexibility to load audio blobs from various sources, such as user inputs or files using setPreloadedAudioBlob function, expanding the library's versatility in different scenarios.

For a live demonstration of the React Voice Visualizer library, you can check out the Demo Voice Visualizer App. This app showcases various features and functionalities of the library in action.

Feel free to explore the demo app to see how the React Voice Visualizer can be used in different scenarios. You can refer to the source code of the demo app for additional examples and inspiration for using the library effectively.

Usage

To start using the VoiceVisualizer component, you will need to import the necessary hook and component from the library. Here's an example of how to use this library in your App component:

import{useEffect}from"react";import{useVoiceVisualizer,VoiceVisualizer}from"react-voice-visualizer";constApp=()=>{// Initialize the recorder controls using the hookconstrecorderControls=useVoiceVisualizer();const{// ... (Extracted controls and states, if necessary)
recordedBlob,
error,}=recorderControls;// Get the recorded audio blobuseEffect(()=>{if(!recordedBlob)return;console.log(recordedBlob);},[recordedBlob]);// Get the error when it occursuseEffect(()=>{if(!error)return;console.error(error);},[error]);return(<VoiceVisualizercontrols={recorderControls}/>);};exportdefaultApp;

Getting started

  1. Import the required components and hooks from the library.
  2. Initialize the recorder controls using the useVoiceVisualizer hook.
  3. Use the provided state and functions to manage audio recording and playback.
  4. Render the VoiceVisualizer component to display the real-time audio visualization.
  5. Use the provided buttons to start, pause, stop, and save the audio recording.

Remember to include necessary CSS styles to customize the components and buttons according to your design preferences.

API Reference

useVoiceVisualizer() Hook

A hook that provides recorder controls and state for audio visualization.

Usage
constrecorderControls=useVoiceVisualizer();
Parameters (All parameters are optional)
ParameterTypeDescription
onStartRecording() => voidCallback function triggered when recording starts.
onStopRecording() => voidCallback function triggered when recording stops.
onPausedRecording() => voidCallback function triggered when recording is paused.
onResumedRecording() => voidCallback function triggered when recording is resumed.
onClearCanvas() => voidCallback function triggered when the canvas is cleared.
onEndAudioPlayback() => voidCallback function triggered when audio playback ends.
onStartAudioPlayback() => voidCallback function triggered when audio playback starts.
onPausedAudioPlayback() => voidCallback function triggered when audio playback is paused.
onResumedAudioPlayback() => voidCallback function triggered when audio playback is resumed.
onErrorPlayingAudio(error: Error) => voidCallback function is invoked when an error occurs during the execution of audio.play(). It provides an opportunity to handle and respond to such error.
shouldHandleBeforeUnloadbooleanDetermines whether the beforeunload event handler should be added to the window, preventing page unload if necessary (true by default).
mediaRecorderOptionsMediaRecorderOptionsConfiguration options for the MediaRecorder instance.
Returns
ReturnsTypeDescription
audioRefMutableRefObject
<HTMLAudioElement | null>
Reference to the audio element used for playback.
isRecordingInProgressbooleanIndicates if audio recording is currently in progress.
isPausedRecordingbooleanIndicates if audio recording is currently paused.
audioDataUint8ArrayAudio data for real-time visualization.
recordingTimenumberElapsed time during recording in milliseconds.
mediaRecorderMediaRecorder | nullMediaRecorder instance used for recording audio.
durationnumberDuration of the recorded audio in seconds.
currentAudioTimenumberCurrent playback time of the recorded audio in seconds.
audioSrcstringSource URL of the recorded audio file for playback.
isPausedRecordedAudiobooleanIndicates if recorded audio playback is paused.
isProcessingRecordedAudiobooleanIndicates if the recorded audio is being processed and 'Processing Audio...' text shown.
isClearedbooleanIndicates if the canvas has been cleared.
isAvailableRecordedAudiobooleanIndicates whether recorded audi is available and not currently being processed. This return value can be used to check if it's an appropriate time to work with recorded audio data in your application.
recordedBlobBlob | nullRecorded audio data in Blob format.
bufferFromRecordedBlobAudioBuffer | nullAudio buffer from the recorded Blob.
formattedDurationstringFormatted duration time in format 09:51m.
formattedRecordingTimestringFormatted recording current time in format 09:51.
formattedRecordedAudioCurrentTimestringFormatted recorded audio current time in format 09:51:1.
startRecording() => voidFunction to start audio recording.
togglePauseResume() => voidFunction to toggle pause/resume during recording and playback of recorded audio.
startAudioPlayback() => voidFunction to start/resume playback of recorded audio.
stopAudioPlayback() => voidFunction to pause playback of recorded audio.
stopRecording() => voidFunction to stop audio recording.
saveAudioFile() => voidThis function allows you to save the recorded audio as a webm file format. Please note that it supports saving audio only in the webm format. If you need to save the audio in a different format, you can use external libraries like FFmpeg to convert the Blob to your desired format. This flexibility allows you to tailor the output format according to your specific needs.
clearCanvas() => voidFunction to clear the visualization canvas.
setCurrentAudioTimeDispatch<SetStateAction<number>>Internal function to handle current audio time updates during playback.
errorError | nullError object if any error occurred during recording or playback.
isProcessingOnResizebooleanIndicates whether audio processing is occurring during a resize event when audio is recorded and a blob is present.
isProcessingStartRecordingbooleanWhen set to true, it indicates that the start recording button has been pressed, but either the permission to record has not yet been granted or the recording itself has not yet commenced. This prop serves as a helpful flag to manage the state of the recording process, allowing components to react accordingly to the current stage of recording initiation.
isPreloadedBlobbooleanThis property indicates whether a preloaded audio blob is available for playback or processing.
setPreloadedAudioBlob(blob: Blob) => voidUsers can use this method to set a preloaded audio blob, enabling seamless integration with user inputs, file uploads etc.
_setIsProcessingAudioOnCompleteDispatch<SetStateAction<boolean>>Internal function to set isProcessingAudioOnComplete state.
_setIsProcessingOnResizeDispatch<SetStateAction<boolean>>Internal function to set isProcessingOnResize state.

VoiceVisualizer Component

A component that visualizes the real-time audio wave during recording.

Props for AudioVisualizer Component

PropsDescriptionDefaultType
controlsProvides the audio recording controls and states required for visualization.-Controls (Required)
heightThe height of the visualization canvas.200string | number (Optional)
widthThe width of the visualization canvas.100%string | number (Optional)
backgroundColorThe background color of the visualization canvas.transparentstring (Optional)
mainBarColorThe color of the main audio wave line.#FFFFFFstring (Optional)
secondaryBarColorThe secondary color of the audio wave line.#5e5e5estring (Optional)
speedThe speed of the audio visualization animation (Integer from 1 to 6, higher number is slower).3number (Optional)
barWidthThe width of each audio wave bar.2number (Optional)
gapThe gap between each audio wave bar.1number (Optional)
roundedThe border radius of the audio wave bars.5number (Optional)
isControlPanelShownWhether to display the audio control panel, including features such as recorded audio duration, current recording time, and control buttons. If you want to create your own UI, set it to false and utilize functions from the useVoiceVisualizer hook to manage audio control.trueboolean (Optional)
isDownloadAudioButtonShownWhether to display the Download audio button.falseboolean (Optional)
fullscreenWhether the visualization should be displayed in fullscreen mode. It begins from the center by default.falseboolean (Optional)
animateCurrentPickWhether to animate the current pick in the visualization.trueboolean (Optional)
onlyRecordingWhether to show the visualization only during voice recording.falseboolean (Optional)
isDefaultUIShownWhether to show a default UI on Canvas before recording. If you want to create your own UI, set it to false.trueboolean (Optional)
mainContainerClassNameThe CSS class name for the main container.-string (Optional)
canvasContainerClassNameThe CSS class name for the container of the visualization canvas.-string (Optional)
isProgressIndicatorShownWhether to show the progress indicator after recording.trueboolean (Optional)
progressIndicatorClassNameThe CSS class name for the progress indicator.-string (Optional)
isProgressIndicatorTimeShownWhether to show the progress indicator time.trueboolean (Optional)
progressIndicatorTimeClassNameThe CSS class name for the progress indicator with time.-string (Optional)
isProgressIndicatorOnHoverShownWhether to show the progress indicator on hover.trueboolean (Optional)
progressIndicatorOnHoverClassNameThe CSS class name for the progress indicator on hover.-string (Optional)
isProgressIndicatorTimeOnHoverShownWhether to show the progress indicator time on hover.trueboolean (Optional)
progressIndicatorTimeOnHoverClassNameThe CSS class name for the progress indicator with time on hover.-string (Optional)
isAudioProcessingTextShownWhether to show the audio processing text.trueboolean (Optional)
audioProcessingTextClassNameThe CSS class name for the audio processing text.-string (Optional)
controlButtonsClassNameThe CSS class name for the Clear Button and Download Audio button components.-string (Optional)

License

This library is distributed under the MIT License.

Issues

If you encounter any bugs or have suggestions for improvements, please report them in the GitHub Issues section.

Support

For support or general questions, you can reach out to zarytskyi222@gmail.com.

If you find my project valuable and would like to support its development, you can buy me a coffee ☕. Your contribution helps keep this project active and growing.

Buy Me A Coffee

Your contribution is greatly appreciated! ❤️🚀

Credits

This library was created by Yurii Zarytskyi

linkedIn LinkedIn

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

react-voice-visualizer

Overview

The react-voice-visualizer library offers a comprehensive and highly customizable solution for capturing, visualizing, and manipulating audio recordings within your web applications. Built with React hook and component, this library simplifies the process of integrating audio recording and visualization functionalities using the Web Audio API.

screenshot

Experience the Demo App: Click here to explore the react-voice-visualizer. Try it out and see it in action!

Key Features:

  • Audio Recording: Easily capture audio recordings with minimal setup using React hook and component.

  • Visualization: Visualize audio data in real-time, making it suitable for applications such as voice recognition, sound analysis, and more.

  • Customization: The library is absolutely customizable, allowing you to tailor the audio recording and visualization components to fit your project's unique requirements.

  • Responsiveness: Create audio applications that adapt seamlessly to various screen sizes and devices, ensuring a consistent user experience across platforms.

This README provides a comprehensive guide to effectively utilizing the library's features.

Installation

To integrate the React Voice Visualizer library into your project, simply install it via npm or yarn:

npm install react-voice-visualizer

or

yarn add react-voice-visualizer

Version 2.x.x Release Notes

Breaking Changes:

  • Ref Handling Update: In this version, the library has been enhanced to manage audio references (audioRef) internally. Users no longer need to pass ref={audioRef} separately to components. This change offers a more seamless and intuitive experience.

New Features:

  • Preloaded Audio Blob Support: Version 2.x.x introduces the capability to set preloaded audio blobs. Users now have the flexibility to load audio blobs from various sources, such as user inputs or files using setPreloadedAudioBlob function, expanding the library's versatility in different scenarios.

For a live demonstration of the React Voice Visualizer library, you can check out the Demo Voice Visualizer App. This app showcases various features and functionalities of the library in action.

Feel free to explore the demo app to see how the React Voice Visualizer can be used in different scenarios. You can refer to the source code of the demo app for additional examples and inspiration for using the library effectively.

Usage

To start using the VoiceVisualizer component, you will need to import the necessary hook and component from the library. Here's an example of how to use this library in your App component:

import{useEffect}from"react";import{useVoiceVisualizer,VoiceVisualizer}from"react-voice-visualizer";constApp=()=>{// Initialize the recorder controls using the hookconstrecorderControls=useVoiceVisualizer();const{// ... (Extracted controls and states, if necessary)
recordedBlob,
error,}=recorderControls;// Get the recorded audio blobuseEffect(()=>{if(!recordedBlob)return;console.log(recordedBlob);},[recordedBlob]);// Get the error when it occursuseEffect(()=>{if(!error)return;console.error(error);},[error]);return(<VoiceVisualizercontrols={recorderControls}/>);};exportdefaultApp;

Getting started

  1. Import the required components and hooks from the library.
  2. Initialize the recorder controls using the useVoiceVisualizer hook.
  3. Use the provided state and functions to manage audio recording and playback.
  4. Render the VoiceVisualizer component to display the real-time audio visualization.
  5. Use the provided buttons to start, pause, stop, and save the audio recording.

Remember to include necessary CSS styles to customize the components and buttons according to your design preferences.

API Reference

useVoiceVisualizer() Hook

A hook that provides recorder controls and state for audio visualization.

Usage
constrecorderControls=useVoiceVisualizer();
Parameters (All parameters are optional)
ParameterTypeDescription
onStartRecording() => voidCallback function triggered when recording starts.
onStopRecording() => voidCallback function triggered when recording stops.
onPausedRecording() => voidCallback function triggered when recording is paused.
onResumedRecording() => voidCallback function triggered when recording is resumed.
onClearCanvas() => voidCallback function triggered when the canvas is cleared.
onEndAudioPlayback() => voidCallback function triggered when audio playback ends.
onStartAudioPlayback() => voidCallback function triggered when audio playback starts.
onPausedAudioPlayback() => voidCallback function triggered when audio playback is paused.
onResumedAudioPlayback() => voidCallback function triggered when audio playback is resumed.
onErrorPlayingAudio(error: Error) => voidCallback function is invoked when an error occurs during the execution of audio.play(). It provides an opportunity to handle and respond to such error.
shouldHandleBeforeUnloadbooleanDetermines whether the beforeunload event handler should be added to the window, preventing page unload if necessary (true by default).
mediaRecorderOptionsMediaRecorderOptionsConfiguration options for the MediaRecorder instance.
Returns
ReturnsTypeDescription
audioRefMutableRefObject
<HTMLAudioElement | null>
Reference to the audio element used for playback.
isRecordingInProgressbooleanIndicates if audio recording is currently in progress.
isPausedRecordingbooleanIndicates if audio recording is currently paused.
audioDataUint8ArrayAudio data for real-time visualization.
recordingTimenumberElapsed time during recording in milliseconds.
mediaRecorderMediaRecorder | nullMediaRecorder instance used for recording audio.
durationnumberDuration of the recorded audio in seconds.
currentAudioTimenumberCurrent playback time of the recorded audio in seconds.
audioSrcstringSource URL of the recorded audio file for playback.
isPausedRecordedAudiobooleanIndicates if recorded audio playback is paused.
isProcessingRecordedAudiobooleanIndicates if the recorded audio is being processed and 'Processing Audio...' text shown.
isClearedbooleanIndicates if the canvas has been cleared.
isAvailableRecordedAudiobooleanIndicates whether recorded audi is available and not currently being processed. This return value can be used to check if it's an appropriate time to work with recorded audio data in your application.
recordedBlobBlob | nullRecorded audio data in Blob format.
bufferFromRecordedBlobAudioBuffer | nullAudio buffer from the recorded Blob.
formattedDurationstringFormatted duration time in format 09:51m.
formattedRecordingTimestringFormatted recording current time in format 09:51.
formattedRecordedAudioCurrentTimestringFormatted recorded audio current time in format 09:51:1.
startRecording() => voidFunction to start audio recording.
togglePauseResume() => voidFunction to toggle pause/resume during recording and playback of recorded audio.
startAudioPlayback() => voidFunction to start/resume playback of recorded audio.
stopAudioPlayback() => voidFunction to pause playback of recorded audio.
stopRecording() => voidFunction to stop audio recording.
saveAudioFile() => voidThis function allows you to save the recorded audio as a webm file format. Please note that it supports saving audio only in the webm format. If you need to save the audio in a different format, you can use external libraries like FFmpeg to convert the Blob to your desired format. This flexibility allows you to tailor the output format according to your specific needs.
clearCanvas() => voidFunction to clear the visualization canvas.
setCurrentAudioTimeDispatch<SetStateAction<number>>Internal function to handle current audio time updates during playback.
errorError | nullError object if any error occurred during recording or playback.
isProcessingOnResizebooleanIndicates whether audio processing is occurring during a resize event when audio is recorded and a blob is present.
isProcessingStartRecordingbooleanWhen set to true, it indicates that the start recording button has been pressed, but either the permission to record has not yet been granted or the recording itself has not yet commenced. This prop serves as a helpful flag to manage the state of the recording process, allowing components to react accordingly to the current stage of recording initiation.
isPreloadedBlobbooleanThis property indicates whether a preloaded audio blob is available for playback or processing.
setPreloadedAudioBlob(blob: Blob) => voidUsers can use this method to set a preloaded audio blob, enabling seamless integration with user inputs, file uploads etc.
_setIsProcessingAudioOnCompleteDispatch<SetStateAction<boolean>>Internal function to set isProcessingAudioOnComplete state.
_setIsProcessingOnResizeDispatch<SetStateAction<boolean>>Internal function to set isProcessingOnResize state.

VoiceVisualizer Component

A component that visualizes the real-time audio wave during recording.

Props for AudioVisualizer Component

PropsDescriptionDefaultType
controlsProvides the audio recording controls and states required for visualization.-Controls (Required)
heightThe height of the visualization canvas.200string | number (Optional)
widthThe width of the visualization canvas.100%string | number (Optional)
backgroundColorThe background color of the visualization canvas.transparentstring (Optional)
mainBarColorThe color of the main audio wave line.#FFFFFFstring (Optional)
secondaryBarColorThe secondary color of the audio wave line.#5e5e5estring (Optional)
speedThe speed of the audio visualization animation (Integer from 1 to 6, higher number is slower).3number (Optional)
barWidthThe width of each audio wave bar.2number (Optional)
gapThe gap between each audio wave bar.1number (Optional)
roundedThe border radius of the audio wave bars.5number (Optional)
isControlPanelShownWhether to display the audio control panel, including features such as recorded audio duration, current recording time, and control buttons. If you want to create your own UI, set it to false and utilize functions from the useVoiceVisualizer hook to manage audio control.trueboolean (Optional)
isDownloadAudioButtonShownWhether to display the Download audio button.falseboolean (Optional)
fullscreenWhether the visualization should be displayed in fullscreen mode. It begins from the center by default.falseboolean (Optional)
animateCurrentPickWhether to animate the current pick in the visualization.trueboolean (Optional)
onlyRecordingWhether to show the visualization only during voice recording.falseboolean (Optional)
isDefaultUIShownWhether to show a default UI on Canvas before recording. If you want to create your own UI, set it to false.trueboolean (Optional)
mainContainerClassNameThe CSS class name for the main container.-string (Optional)
canvasContainerClassNameThe CSS class name for the container of the visualization canvas.-string (Optional)
isProgressIndicatorShownWhether to show the progress indicator after recording.trueboolean (Optional)
progressIndicatorClassNameThe CSS class name for the progress indicator.-string (Optional)
isProgressIndicatorTimeShownWhether to show the progress indicator time.trueboolean (Optional)
progressIndicatorTimeClassNameThe CSS class name for the progress indicator with time.-string (Optional)
isProgressIndicatorOnHoverShownWhether to show the progress indicator on hover.trueboolean (Optional)
progressIndicatorOnHoverClassNameThe CSS class name for the progress indicator on hover.-string (Optional)
isProgressIndicatorTimeOnHoverShownWhether to show the progress indicator time on hover.trueboolean (Optional)
progressIndicatorTimeOnHoverClassNameThe CSS class name for the progress indicator with time on hover.-string (Optional)
isAudioProcessingTextShownWhether to show the audio processing text.trueboolean (Optional)
audioProcessingTextClassNameThe CSS class name for the audio processing text.-string (Optional)
controlButtonsClassNameThe CSS class name for the Clear Button and Download Audio button components.-string (Optional)

License

This library is distributed under the MIT License.

Issues

If you encounter any bugs or have suggestions for improvements, please report them in the GitHub Issues section.

Support

For support or general questions, you can reach out to zarytskyi222@gmail.com.

If you find my project valuable and would like to support its development, you can buy me a coffee ☕. Your contribution helps keep this project active and growing.

Buy Me A Coffee

Your contribution is greatly appreciated! ❤️🚀

Credits

This library was created by Yurii Zarytskyi

linkedIn LinkedIn

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

react-voice-visualizer

Overview

The react-voice-visualizer library offers a comprehensive and highly customizable solution for capturing, visualizing, and manipulating audio recordings within your web applications. Built with React hook and component, this library simplifies the process of integrating audio recording and visualization functionalities using the Web Audio API.

screenshot

Experience the Demo App: Click here to explore the react-voice-visualizer. Try it out and see it in action!

Key Features:

  • Audio Recording: Easily capture audio recordings with minimal setup using React hook and component.

  • Visualization: Visualize audio data in real-time, making it suitable for applications such as voice recognition, sound analysis, and more.

  • Customization: The library is absolutely customizable, allowing you to tailor the audio recording and visualization components to fit your project's unique requirements.

  • Responsiveness: Create audio applications that adapt seamlessly to various screen sizes and devices, ensuring a consistent user experience across platforms.

This README provides a comprehensive guide to effectively utilizing the library's features.

Installation

To integrate the React Voice Visualizer library into your project, simply install it via npm or yarn:

npm install react-voice-visualizer

or

yarn add react-voice-visualizer

Version 2.x.x Release Notes

Breaking Changes:

  • Ref Handling Update: In this version, the library has been enhanced to manage audio references (audioRef) internally. Users no longer need to pass ref={audioRef} separately to components. This change offers a more seamless and intuitive experience.

New Features:

  • Preloaded Audio Blob Support: Version 2.x.x introduces the capability to set preloaded audio blobs. Users now have the flexibility to load audio blobs from various sources, such as user inputs or files using setPreloadedAudioBlob function, expanding the library's versatility in different scenarios.

For a live demonstration of the React Voice Visualizer library, you can check out the Demo Voice Visualizer App. This app showcases various features and functionalities of the library in action.

Feel free to explore the demo app to see how the React Voice Visualizer can be used in different scenarios. You can refer to the source code of the demo app for additional examples and inspiration for using the library effectively.

Usage

To start using the VoiceVisualizer component, you will need to import the necessary hook and component from the library. Here's an example of how to use this library in your App component:

import{useEffect}from"react";import{useVoiceVisualizer,VoiceVisualizer}from"react-voice-visualizer";constApp=()=>{// Initialize the recorder controls using the hookconstrecorderControls=useVoiceVisualizer();const{// ... (Extracted controls and states, if necessary)
recordedBlob,
error,}=recorderControls;// Get the recorded audio blobuseEffect(()=>{if(!recordedBlob)return;console.log(recordedBlob);},[recordedBlob]);// Get the error when it occursuseEffect(()=>{if(!error)return;console.error(error);},[error]);return(<VoiceVisualizercontrols={recorderControls}/>);};exportdefaultApp;

Getting started

  1. Import the required components and hooks from the library.
  2. Initialize the recorder controls using the useVoiceVisualizer hook.
  3. Use the provided state and functions to manage audio recording and playback.
  4. Render the VoiceVisualizer component to display the real-time audio visualization.
  5. Use the provided buttons to start, pause, stop, and save the audio recording.

Remember to include necessary CSS styles to customize the components and buttons according to your design preferences.

API Reference

useVoiceVisualizer() Hook

A hook that provides recorder controls and state for audio visualization.

Usage
constrecorderControls=useVoiceVisualizer();
Parameters (All parameters are optional)
ParameterTypeDescription
onStartRecording() => voidCallback function triggered when recording starts.
onStopRecording() => voidCallback function triggered when recording stops.
onPausedRecording() => voidCallback function triggered when recording is paused.
onResumedRecording() => voidCallback function triggered when recording is resumed.
onClearCanvas() => voidCallback function triggered when the canvas is cleared.
onEndAudioPlayback() => voidCallback function triggered when audio playback ends.
onStartAudioPlayback() => voidCallback function triggered when audio playback starts.
onPausedAudioPlayback() => voidCallback function triggered when audio playback is paused.
onResumedAudioPlayback() => voidCallback function triggered when audio playback is resumed.
onErrorPlayingAudio(error: Error) => voidCallback function is invoked when an error occurs during the execution of audio.play(). It provides an opportunity to handle and respond to such error.
shouldHandleBeforeUnloadbooleanDetermines whether the beforeunload event handler should be added to the window, preventing page unload if necessary (true by default).
mediaRecorderOptionsMediaRecorderOptionsConfiguration options for the MediaRecorder instance.
Returns
ReturnsTypeDescription
audioRefMutableRefObject
<HTMLAudioElement | null>
Reference to the audio element used for playback.
isRecordingInProgressbooleanIndicates if audio recording is currently in progress.
isPausedRecordingbooleanIndicates if audio recording is currently paused.
audioDataUint8ArrayAudio data for real-time visualization.
recordingTimenumberElapsed time during recording in milliseconds.
mediaRecorderMediaRecorder | nullMediaRecorder instance used for recording audio.
durationnumberDuration of the recorded audio in seconds.
currentAudioTimenumberCurrent playback time of the recorded audio in seconds.
audioSrcstringSource URL of the recorded audio file for playback.
isPausedRecordedAudiobooleanIndicates if recorded audio playback is paused.
isProcessingRecordedAudiobooleanIndicates if the recorded audio is being processed and 'Processing Audio...' text shown.
isClearedbooleanIndicates if the canvas has been cleared.
isAvailableRecordedAudiobooleanIndicates whether recorded audi is available and not currently being processed. This return value can be used to check if it's an appropriate time to work with recorded audio data in your application.
recordedBlobBlob | nullRecorded audio data in Blob format.
bufferFromRecordedBlobAudioBuffer | nullAudio buffer from the recorded Blob.
formattedDurationstringFormatted duration time in format 09:51m.
formattedRecordingTimestringFormatted recording current time in format 09:51.
formattedRecordedAudioCurrentTimestringFormatted recorded audio current time in format 09:51:1.
startRecording() => voidFunction to start audio recording.
togglePauseResume() => voidFunction to toggle pause/resume during recording and playback of recorded audio.
startAudioPlayback() => voidFunction to start/resume playback of recorded audio.
stopAudioPlayback() => voidFunction to pause playback of recorded audio.
stopRecording() => voidFunction to stop audio recording.
saveAudioFile() => voidThis function allows you to save the recorded audio as a webm file format. Please note that it supports saving audio only in the webm format. If you need to save the audio in a different format, you can use external libraries like FFmpeg to convert the Blob to your desired format. This flexibility allows you to tailor the output format according to your specific needs.
clearCanvas() => voidFunction to clear the visualization canvas.
setCurrentAudioTimeDispatch<SetStateAction<number>>Internal function to handle current audio time updates during playback.
errorError | nullError object if any error occurred during recording or playback.
isProcessingOnResizebooleanIndicates whether audio processing is occurring during a resize event when audio is recorded and a blob is present.
isProcessingStartRecordingbooleanWhen set to true, it indicates that the start recording button has been pressed, but either the permission to record has not yet been granted or the recording itself has not yet commenced. This prop serves as a helpful flag to manage the state of the recording process, allowing components to react accordingly to the current stage of recording initiation.
isPreloadedBlobbooleanThis property indicates whether a preloaded audio blob is available for playback or processing.
setPreloadedAudioBlob(blob: Blob) => voidUsers can use this method to set a preloaded audio blob, enabling seamless integration with user inputs, file uploads etc.
_setIsProcessingAudioOnCompleteDispatch<SetStateAction<boolean>>Internal function to set isProcessingAudioOnComplete state.
_setIsProcessingOnResizeDispatch<SetStateAction<boolean>>Internal function to set isProcessingOnResize state.

VoiceVisualizer Component

A component that visualizes the real-time audio wave during recording.

Props for AudioVisualizer Component

PropsDescriptionDefaultType
controlsProvides the audio recording controls and states required for visualization.-Controls (Required)
heightThe height of the visualization canvas.200string | number (Optional)
widthThe width of the visualization canvas.100%string | number (Optional)
backgroundColorThe background color of the visualization canvas.transparentstring (Optional)
mainBarColorThe color of the main audio wave line.#FFFFFFstring (Optional)
secondaryBarColorThe secondary color of the audio wave line.#5e5e5estring (Optional)
speedThe speed of the audio visualization animation (Integer from 1 to 6, higher number is slower).3number (Optional)
barWidthThe width of each audio wave bar.2number (Optional)
gapThe gap between each audio wave bar.1number (Optional)
roundedThe border radius of the audio wave bars.5number (Optional)
isControlPanelShownWhether to display the audio control panel, including features such as recorded audio duration, current recording time, and control buttons. If you want to create your own UI, set it to false and utilize functions from the useVoiceVisualizer hook to manage audio control.trueboolean (Optional)
isDownloadAudioButtonShownWhether to display the Download audio button.falseboolean (Optional)
fullscreenWhether the visualization should be displayed in fullscreen mode. It begins from the center by default.falseboolean (Optional)
animateCurrentPickWhether to animate the current pick in the visualization.trueboolean (Optional)
onlyRecordingWhether to show the visualization only during voice recording.falseboolean (Optional)
isDefaultUIShownWhether to show a default UI on Canvas before recording. If you want to create your own UI, set it to false.trueboolean (Optional)
mainContainerClassNameThe CSS class name for the main container.-string (Optional)
canvasContainerClassNameThe CSS class name for the container of the visualization canvas.-string (Optional)
isProgressIndicatorShownWhether to show the progress indicator after recording.trueboolean (Optional)
progressIndicatorClassNameThe CSS class name for the progress indicator.-string (Optional)
isProgressIndicatorTimeShownWhether to show the progress indicator time.trueboolean (Optional)
progressIndicatorTimeClassNameThe CSS class name for the progress indicator with time.-string (Optional)
isProgressIndicatorOnHoverShownWhether to show the progress indicator on hover.trueboolean (Optional)
progressIndicatorOnHoverClassNameThe CSS class name for the progress indicator on hover.-string (Optional)
isProgressIndicatorTimeOnHoverShownWhether to show the progress indicator time on hover.trueboolean (Optional)
progressIndicatorTimeOnHoverClassNameThe CSS class name for the progress indicator with time on hover.-string (Optional)
isAudioProcessingTextShownWhether to show the audio processing text.trueboolean (Optional)
audioProcessingTextClassNameThe CSS class name for the audio processing text.-string (Optional)
controlButtonsClassNameThe CSS class name for the Clear Button and Download Audio button components.-string (Optional)

License

This library is distributed under the MIT License.

Issues

If you encounter any bugs or have suggestions for improvements, please report them in the GitHub Issues section.

Support

For support or general questions, you can reach out to zarytskyi222@gmail.com.

If you find my project valuable and would like to support its development, you can buy me a coffee ☕. Your contribution helps keep this project active and growing.

Buy Me A Coffee

Your contribution is greatly appreciated! ❤️🚀

Credits

This library was created by Yurii Zarytskyi

linkedIn LinkedIn

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

react-voice-visualizer

Overview

The react-voice-visualizer library offers a comprehensive and highly customizable solution for capturing, visualizing, and manipulating audio recordings within your web applications. Built with React hook and component, this library simplifies the process of integrating audio recording and visualization functionalities using the Web Audio API.

screenshot

Experience the Demo App: Click here to explore the react-voice-visualizer. Try it out and see it in action!

Key Features:

  • Audio Recording: Easily capture audio recordings with minimal setup using React hook and component.

  • Visualization: Visualize audio data in real-time, making it suitable for applications such as voice recognition, sound analysis, and more.

  • Customization: The library is absolutely customizable, allowing you to tailor the audio recording and visualization components to fit your project's unique requirements.

  • Responsiveness: Create audio applications that adapt seamlessly to various screen sizes and devices, ensuring a consistent user experience across platforms.

This README provides a comprehensive guide to effectively utilizing the library's features.

Installation

To integrate the React Voice Visualizer library into your project, simply install it via npm or yarn:

npm install react-voice-visualizer

or

yarn add react-voice-visualizer

Version 2.x.x Release Notes

Breaking Changes:

  • Ref Handling Update: In this version, the library has been enhanced to manage audio references (audioRef) internally. Users no longer need to pass ref={audioRef} separately to components. This change offers a more seamless and intuitive experience.

New Features:

  • Preloaded Audio Blob Support: Version 2.x.x introduces the capability to set preloaded audio blobs. Users now have the flexibility to load audio blobs from various sources, such as user inputs or files using setPreloadedAudioBlob function, expanding the library's versatility in different scenarios.

For a live demonstration of the React Voice Visualizer library, you can check out the Demo Voice Visualizer App. This app showcases various features and functionalities of the library in action.

Feel free to explore the demo app to see how the React Voice Visualizer can be used in different scenarios. You can refer to the source code of the demo app for additional examples and inspiration for using the library effectively.

Usage

To start using the VoiceVisualizer component, you will need to import the necessary hook and component from the library. Here's an example of how to use this library in your App component:

import{useEffect}from"react";import{useVoiceVisualizer,VoiceVisualizer}from"react-voice-visualizer";constApp=()=>{// Initialize the recorder controls using the hookconstrecorderControls=useVoiceVisualizer();const{// ... (Extracted controls and states, if necessary)
recordedBlob,
error,}=recorderControls;// Get the recorded audio blobuseEffect(()=>{if(!recordedBlob)return;console.log(recordedBlob);},[recordedBlob]);// Get the error when it occursuseEffect(()=>{if(!error)return;console.error(error);},[error]);return(<VoiceVisualizercontrols={recorderControls}/>);};exportdefaultApp;

Getting started

  1. Import the required components and hooks from the library.
  2. Initialize the recorder controls using the useVoiceVisualizer hook.
  3. Use the provided state and functions to manage audio recording and playback.
  4. Render the VoiceVisualizer component to display the real-time audio visualization.
  5. Use the provided buttons to start, pause, stop, and save the audio recording.

Remember to include necessary CSS styles to customize the components and buttons according to your design preferences.

API Reference

useVoiceVisualizer() Hook

A hook that provides recorder controls and state for audio visualization.

Usage
constrecorderControls=useVoiceVisualizer();
Parameters (All parameters are optional)
ParameterTypeDescription
onStartRecording() => voidCallback function triggered when recording starts.
onStopRecording() => voidCallback function triggered when recording stops.
onPausedRecording() => voidCallback function triggered when recording is paused.
onResumedRecording() => voidCallback function triggered when recording is resumed.
onClearCanvas() => voidCallback function triggered when the canvas is cleared.
onEndAudioPlayback() => voidCallback function triggered when audio playback ends.
onStartAudioPlayback() => voidCallback function triggered when audio playback starts.
onPausedAudioPlayback() => voidCallback function triggered when audio playback is paused.
onResumedAudioPlayback() => voidCallback function triggered when audio playback is resumed.
onErrorPlayingAudio(error: Error) => voidCallback function is invoked when an error occurs during the execution of audio.play(). It provides an opportunity to handle and respond to such error.
shouldHandleBeforeUnloadbooleanDetermines whether the beforeunload event handler should be added to the window, preventing page unload if necessary (true by default).
mediaRecorderOptionsMediaRecorderOptionsConfiguration options for the MediaRecorder instance.
Returns
ReturnsTypeDescription
audioRefMutableRefObject
<HTMLAudioElement | null>
Reference to the audio element used for playback.
isRecordingInProgressbooleanIndicates if audio recording is currently in progress.
isPausedRecordingbooleanIndicates if audio recording is currently paused.
audioDataUint8ArrayAudio data for real-time visualization.
recordingTimenumberElapsed time during recording in milliseconds.
mediaRecorderMediaRecorder | nullMediaRecorder instance used for recording audio.
durationnumberDuration of the recorded audio in seconds.
currentAudioTimenumberCurrent playback time of the recorded audio in seconds.
audioSrcstringSource URL of the recorded audio file for playback.
isPausedRecordedAudiobooleanIndicates if recorded audio playback is paused.
isProcessingRecordedAudiobooleanIndicates if the recorded audio is being processed and 'Processing Audio...' text shown.
isClearedbooleanIndicates if the canvas has been cleared.
isAvailableRecordedAudiobooleanIndicates whether recorded audi is available and not currently being processed. This return value can be used to check if it's an appropriate time to work with recorded audio data in your application.
recordedBlobBlob | nullRecorded audio data in Blob format.
bufferFromRecordedBlobAudioBuffer | nullAudio buffer from the recorded Blob.
formattedDurationstringFormatted duration time in format 09:51m.
formattedRecordingTimestringFormatted recording current time in format 09:51.
formattedRecordedAudioCurrentTimestringFormatted recorded audio current time in format 09:51:1.
startRecording() => voidFunction to start audio recording.
togglePauseResume() => voidFunction to toggle pause/resume during recording and playback of recorded audio.
startAudioPlayback() => voidFunction to start/resume playback of recorded audio.
stopAudioPlayback() => voidFunction to pause playback of recorded audio.
stopRecording() => voidFunction to stop audio recording.
saveAudioFile() => voidThis function allows you to save the recorded audio as a webm file format. Please note that it supports saving audio only in the webm format. If you need to save the audio in a different format, you can use external libraries like FFmpeg to convert the Blob to your desired format. This flexibility allows you to tailor the output format according to your specific needs.
clearCanvas() => voidFunction to clear the visualization canvas.
setCurrentAudioTimeDispatch<SetStateAction<number>>Internal function to handle current audio time updates during playback.
errorError | nullError object if any error occurred during recording or playback.
isProcessingOnResizebooleanIndicates whether audio processing is occurring during a resize event when audio is recorded and a blob is present.
isProcessingStartRecordingbooleanWhen set to true, it indicates that the start recording button has been pressed, but either the permission to record has not yet been granted or the recording itself has not yet commenced. This prop serves as a helpful flag to manage the state of the recording process, allowing components to react accordingly to the current stage of recording initiation.
isPreloadedBlobbooleanThis property indicates whether a preloaded audio blob is available for playback or processing.
setPreloadedAudioBlob(blob: Blob) => voidUsers can use this method to set a preloaded audio blob, enabling seamless integration with user inputs, file uploads etc.
_setIsProcessingAudioOnCompleteDispatch<SetStateAction<boolean>>Internal function to set isProcessingAudioOnComplete state.
_setIsProcessingOnResizeDispatch<SetStateAction<boolean>>Internal function to set isProcessingOnResize state.

VoiceVisualizer Component

A component that visualizes the real-time audio wave during recording.

Props for AudioVisualizer Component

PropsDescriptionDefaultType
controlsProvides the audio recording controls and states required for visualization.-Controls (Required)
heightThe height of the visualization canvas.200string | number (Optional)
widthThe width of the visualization canvas.100%string | number (Optional)
backgroundColorThe background color of the visualization canvas.transparentstring (Optional)
mainBarColorThe color of the main audio wave line.#FFFFFFstring (Optional)
secondaryBarColorThe secondary color of the audio wave line.#5e5e5estring (Optional)
speedThe speed of the audio visualization animation (Integer from 1 to 6, higher number is slower).3number (Optional)
barWidthThe width of each audio wave bar.2number (Optional)
gapThe gap between each audio wave bar.1number (Optional)
roundedThe border radius of the audio wave bars.5number (Optional)
isControlPanelShownWhether to display the audio control panel, including features such as recorded audio duration, current recording time, and control buttons. If you want to create your own UI, set it to false and utilize functions from the useVoiceVisualizer hook to manage audio control.trueboolean (Optional)
isDownloadAudioButtonShownWhether to display the Download audio button.falseboolean (Optional)
fullscreenWhether the visualization should be displayed in fullscreen mode. It begins from the center by default.falseboolean (Optional)
animateCurrentPickWhether to animate the current pick in the visualization.trueboolean (Optional)
onlyRecordingWhether to show the visualization only during voice recording.falseboolean (Optional)
isDefaultUIShownWhether to show a default UI on Canvas before recording. If you want to create your own UI, set it to false.trueboolean (Optional)
mainContainerClassNameThe CSS class name for the main container.-string (Optional)
canvasContainerClassNameThe CSS class name for the container of the visualization canvas.-string (Optional)
isProgressIndicatorShownWhether to show the progress indicator after recording.trueboolean (Optional)
progressIndicatorClassNameThe CSS class name for the progress indicator.-string (Optional)
isProgressIndicatorTimeShownWhether to show the progress indicator time.trueboolean (Optional)
progressIndicatorTimeClassNameThe CSS class name for the progress indicator with time.-string (Optional)
isProgressIndicatorOnHoverShownWhether to show the progress indicator on hover.trueboolean (Optional)
progressIndicatorOnHoverClassNameThe CSS class name for the progress indicator on hover.-string (Optional)
isProgressIndicatorTimeOnHoverShownWhether to show the progress indicator time on hover.trueboolean (Optional)
progressIndicatorTimeOnHoverClassNameThe CSS class name for the progress indicator with time on hover.-string (Optional)
isAudioProcessingTextShownWhether to show the audio processing text.trueboolean (Optional)
audioProcessingTextClassNameThe CSS class name for the audio processing text.-string (Optional)
controlButtonsClassNameThe CSS class name for the Clear Button and Download Audio button components.-string (Optional)

License

This library is distributed under the MIT License.

Issues

If you encounter any bugs or have suggestions for improvements, please report them in the GitHub Issues section.

Support

For support or general questions, you can reach out to zarytskyi222@gmail.com.

If you find my project valuable and would like to support its development, you can buy me a coffee ☕. Your contribution helps keep this project active and growing.

Buy Me A Coffee

Your contribution is greatly appreciated! ❤️🚀

Credits

This library was created by Yurii Zarytskyi

linkedIn LinkedIn

Releases

Packages

Used by

Contributors

Languages