A real-time pitch detection library for React Native.
- Install the library using a package manager of your choice:
npm install react-native-pitchy- Linking (iOS only):
npx pod-install- Rebuild your app after installing the package.
On iOS simulators, pitch detection may not work as expected due to the lack of microphone support. Make sure to test on a real device.
Microphone permissions are required for pitch detection to work. Make sure to request the necessary permissions before starting pitch detection. You can use a library like react-native-permissions to request permissions.
Microphone
RECORD_AUDIO
- Import the library:
import Pitchy, { PitchyConfig, PitchyEventCallback } from 'react-native-pitchy';- (Optional) Configure Pitchy before initialization:
const config: PitchyConfig = {
bufferSize: 4096, // Adjust buffer size for performance vs accuracy
minVolume: -60, // Minimum volume threshold for pitch detection (in dB)
};- Initialize Pitchy with the optional configuration:
Pitchy.init(config);- Start pitch detection:
Pitchy.start().then(() => {
console.log('Pitch detection started!');
});- Listen to pitch events:
const handlePitchDetected: PitchyEventCallback = (data) => {
console.log('Pitch detected:', data.pitch);
};
const subscription = Pitchy.addListener(handlePitchDetected);
// Remember to unsubscribe later to avoid memory leaks
subscription.remove();- Stop pitch detection:
Pitchy.stop().then(() => {
console.log('Pitch detection stopped!');
});- Check if pitch detection is running:
Pitchy.isRecording().then((isRecording) => {
console.log('Pitch detection is recording:', isRecording);
});PitchyAlgorithm: String representing the pitch detection algorithm (currently only supports"ACF2+")PitchyConfig: Configuration object for Pitchy.initbufferSize: (optional) Number representing the audio buffer size (default: 4096)minVolume: (optional) Number representing the minimum volume threshold (default: -60)algorithm: (optional)PitchyAlgorithmused for detection (default: "ACF2+")
PitchyEventCallback: Function called when pitch is detected. Receives an object with apitchproperty (number)
Pitchy.init(config?: PitchyConfig): Initializes Pitchy with an optional configuration.Pitchy.start(): Starts pitch detection and returns a Promise.Pitchy.stop(): Stops pitch detection and returns a Promise.Pitchy.isRecording(): Checks if pitch detection is currently running and returns a Promise resolving to a boolean.Pitchy.addListener(callback: PitchyEventCallback): Adds a listener for theonPitchDetectedevent.
- Fix example app (permissions issue related to builder-bob)
- Add FFT for ACF2+ algorithm (currently uses a naive implementation)
- Add more pitch detection algorithms
Check out the example app for a simple implementation of pitch detection using Pitchy.
See the contributing guide to learn how to contribute to the repository and the development workflow.
MIT