{"_id":"@agus-eal/expo-audio-studio","_rev":"4-1f3a7f63b414ff83f4e59346f1b6696f","name":"@agus-eal/expo-audio-studio","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@agus-eal/expo-audio-studio","version":"1.0.0","keywords":["react-native","expo","audio","recording","audio-analysis","audio-processing","audio-visualization","waveform","spectrogram","mel-spectrogram","mfcc","audio-features","audio-compression","opus","aac","pcm","wav","cross-platform","background-recording","audio-trimming","dual-stream"],"author":{"url":"https://github.com/agus-eal","name":"Agustín Núñez","email":"agustin@edgeaudiolabs.com"},"license":"MIT","_id":"@agus-eal/expo-audio-studio@1.0.0","maintainers":[{"name":"agus-eal","email":"agustin@edgeaudiolabs.com"}],"homepage":"https://github.com/agus-eal/expo-audio-stream/blob/main/packages/expo-audio-studio/README.md","bugs":{"url":"https://github.com/agus-eal/expo-audio-stream/issues"},"dist":{"shasum":"7d7d3d8363bdada51a749c4ee85537ae3dd13a9a","tarball":"https://registry.npmjs.org/@agus-eal/expo-audio-studio/-/expo-audio-studio-1.0.0.tgz","fileCount":320,"integrity":"sha512-w95vmrlLZ7yqCM/5gGcMRTppZbfPvqO0DpfhIaBE8MBuwZcZ2x+JN93nx8BvzhYcYG5o9piKEcXJGRNf2WEXTA==","signatures":[{"sig":"MEUCIAxzwNCHUFtT3uHL/N0QDSyjrcQT2stvEf9Lb5e7pCVHAiEAhHTc1DHa02ovJ70AgAr2zQ1XEfqPy5EJ8urx3Zy6SwQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7013504},"expo":{"plugin":"./app.plugin.js"},"main":"./build/cjs/index.js","type":"commonjs","types":"./build/types/index.d.ts","module":"./build/esm/index.js","gitHead":"067ebfe3b6ad3c506e64c3988b67ea90dc894c18","scripts":{"lint":"expo-module lint","size":"bundle-size && size-limit","test":"expo-module test","build":"rimraf build && yarn build:types && yarn build:cjs && yarn build:esm && yarn build:plugin","clean":"expo-module clean && rimraf build plugin/build","docgen":"typedoc src/index.ts --plugin typedoc-plugin-markdown --readme none --out ../../documentation_site/docs/api-reference/API","prepare":"yarn build && node -e \"require('fs').renameSync('./plugin/build/index.d.ts', './plugin/build/index.d.cts')\"","release":"./publish.sh","lint:fix":"expo-module lint --fix","open:ios":"open -a \"Xcode\" ../../apps/playground/ios","test:ios":"cd ../../apps/playground/ios && xcodebuild -workspace AudioDevPlayground.xcworkspace -scheme AudioDevPlayground -destination 'platform=iOS Simulator,name=iPhone 15' build","build:cjs":"tsc -p tsconfig.cjs.json","build:dev":"expo-module build","build:esm":"tsc -p tsconfig.esm.json","typecheck":"tsc --noEmit","build:types":"tsc -p tsconfig.types.json","expo-module":"expo-module","build:plugin":"tsc --project plugin/tsconfig.json && cp plugin/build/index.js plugin/build/index.cjs","open:android":"open -a \"Android Studio\" ../../apps/playground/android","test:android":"yarn test:android:unit && yarn test:android:instrumented","test:coverage":"cd ../../apps/playground/android && ./gradlew :siteed-expo-audio-studio:jacocoTestReport","agent:validate":"cd ../../apps/playground && yarn agent:validate","agent:test:unit":"yarn test:android:unit","build:plugin:dev":"expo-module build plugin","test:android:unit":"cd ../../apps/playground/android && ./gradlew :siteed-expo-audio-studio:test","agent:test:integration":"yarn test:android:instrumented","agent:compilation:check":"yarn typecheck && yarn build","prepublishOnly.disabled":"expo-module prepublishOnly","test:android:unit:watch":"cd ../../apps/playground/android && ./gradlew :siteed-expo-audio-studio:test --continuous","test:android:instrumented":"cd ../../apps/playground/android && ./gradlew :siteed-expo-audio-studio:connectedAndroidTest"},"_npmUser":{"name":"agus-eal","email":"agustin@edgeaudiolabs.com"},"repository":{"url":"git+https://github.com/agus-eal/expo-audio-stream.git","type":"git","directory":"packages/expo-audio-studio"},"_npmVersion":"11.4.2","description":"Comprehensive audio processing library for React Native and Expo with recording, analysis, visualization, and streaming capabilities across iOS, Android, and web","directories":{},"_nodeVersion":"24.4.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"expo":"^53.0.9","jest":"^29.7.0","react":"19.0.0","eslint":"^8.56.0","rimraf":"^6.0.1","ts-node":"^10.9.2","typedoc":"^0.27.4","prettier":"^3.2.5","size-limit":"^11.1.4","typescript":"~5.8.3","@types/jest":"^29.5.12","@types/node":"^20.12.7","bundle-size":"^1.1.5","@types/react":"~19.0.10","react-native":"0.79.3","@siteed/publisher":"^0.4.18","expo-modules-core":"2.4.0","@expo/npm-proofread":"^1.0.1","eslint-plugin-react":"^7.34.1","expo-module-scripts":"^4.1.7","@expo/config-plugins":"~10.0.0","eslint-plugin-import":"^2.29.1","eslint-plugin-promise":"^6.1.1","eslint-config-prettier":"^9.1.0","eslint-config-universe":"^12.0.0","eslint-plugin-prettier":"^5.1.3","typedoc-plugin-markdown":"~4.4.2","@typescript-eslint/parser":"^7.7.0","@size-limit/preset-big-lib":"^11.1.4","@typescript-eslint/eslint-plugin":"^7.7.0"},"peerDependencies":{"expo":"*","react":"*","react-native":"*","expo-modules-core":"~2.4.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-audio-studio_1.0.0_1765803590893_0.6969300630281736","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@agus-eal/expo-audio-studio","version":"1.1.0","description":"Comprehensive audio processing library for React Native and Expo with recording, analysis, visualization, and streaming capabilities across iOS, Android, and web","license":"MIT","type":"commonjs","main":"./build/cjs/index.js","module":"./build/esm/index.js","types":"./build/types/index.d.ts","expo":{"plugin":"./app.plugin.js"},"author":{"name":"Agustín Núñez","email":"agustin@edgeaudiolabs.com","url":"https://github.com/agus-eal"},"homepage":"https://github.com/agus-eal/expo-audio-stream/blob/main/packages/expo-audio-studio/README.md","repository":{"type":"git","url":"git+https://github.com/agus-eal/expo-audio-stream.git","directory":"packages/expo-audio-studio"},"bugs":{"url":"https://github.com/agus-eal/expo-audio-stream/issues"},"keywords":["react-native","expo","audio","recording","audio-analysis","audio-processing","audio-visualization","waveform","spectrogram","mel-spectrogram","mfcc","audio-features","audio-compression","opus","aac","pcm","wav","cross-platform","background-recording","audio-trimming","dual-stream"],"scripts":{"build":"rimraf build && yarn build:types && yarn build:cjs && yarn build:esm && yarn build:plugin","build:cjs":"tsc -p tsconfig.cjs.json","build:esm":"tsc -p tsconfig.esm.json","build:types":"tsc -p tsconfig.types.json","build:plugin":"tsc --project plugin/tsconfig.json && cp plugin/build/index.js plugin/build/index.cjs","build:plugin:dev":"expo-module build plugin","build:dev":"expo-module build","clean":"expo-module clean && rimraf build plugin/build","lint":"expo-module lint","lint:fix":"expo-module lint --fix","test":"expo-module test","test:android":"yarn test:android:unit && yarn test:android:instrumented","test:android:unit":"cd ../../apps/playground/android && ./gradlew :siteed-expo-audio-studio:test","test:android:instrumented":"cd ../../apps/playground/android && ./gradlew :siteed-expo-audio-studio:connectedAndroidTest","test:android:unit:watch":"cd ../../apps/playground/android && ./gradlew :siteed-expo-audio-studio:test --continuous","test:ios":"cd ../../apps/playground/ios && xcodebuild -workspace AudioDevPlayground.xcworkspace -scheme AudioDevPlayground -destination 'platform=iOS Simulator,name=iPhone 15' build","test:coverage":"cd ../../apps/playground/android && ./gradlew :siteed-expo-audio-studio:jacocoTestReport","typecheck":"tsc --noEmit","docgen":"typedoc src/index.ts --plugin typedoc-plugin-markdown --readme none --out ../../documentation_site/docs/api-reference/API","prepare":"yarn build && node -e \"require('fs').renameSync('./plugin/build/index.d.ts', './plugin/build/index.d.cts')\"","prepublishOnly.disabled":"expo-module prepublishOnly","expo-module":"expo-module","open:ios":"open -a \"Xcode\" ../../apps/playground/ios","open:android":"open -a \"Android Studio\" ../../apps/playground/android","size":"bundle-size && size-limit","release":"./publish.sh","agent:validate":"cd ../../apps/playground && yarn agent:validate","agent:test:unit":"yarn test:android:unit","agent:test:integration":"yarn test:android:instrumented","agent:compilation:check":"yarn typecheck && yarn build"},"devDependencies":{"@expo/config-plugins":"~10.0.0","@expo/npm-proofread":"^1.0.1","@siteed/publisher":"^0.4.18","@size-limit/preset-big-lib":"^11.1.4","@types/jest":"^29.5.12","@types/node":"^20.12.7","@types/react":"~19.0.10","@typescript-eslint/eslint-plugin":"^7.7.0","@typescript-eslint/parser":"^7.7.0","bundle-size":"^1.1.5","eslint":"^8.56.0","eslint-config-prettier":"^9.1.0","eslint-config-universe":"^12.0.0","eslint-plugin-import":"^2.29.1","eslint-plugin-prettier":"^5.1.3","eslint-plugin-promise":"^6.1.1","eslint-plugin-react":"^7.34.1","expo":"^53.0.9","expo-module-scripts":"^4.1.7","expo-modules-core":"2.4.0","jest":"^29.7.0","prettier":"^3.2.5","react":"19.0.0","react-native":"0.79.3","rimraf":"^6.0.1","size-limit":"^11.1.4","ts-node":"^10.9.2","typedoc":"^0.27.4","typedoc-plugin-markdown":"~4.4.2","typescript":"~5.8.3"},"peerDependencies":{"expo":"*","expo-modules-core":"~2.4.0","react":"*","react-native":"*"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_id":"@agus-eal/expo-audio-studio@1.1.0","gitHead":"3df4a148d24f8e8b01a446cdae1123672126b036","_nodeVersion":"24.4.1","_npmVersion":"11.4.2","dist":{"integrity":"sha512-Z8jiAqDx2/aB9px1SKAZeyF4TqeacLVoRhG6hAGBAlddbXmVlBcF4zcG9+wq4fsQ7SkpyfWsAY6EQNTF6v/qbw==","shasum":"6766ec8fc2a772fa14528d13a24a660bbd051326","tarball":"https://registry.npmjs.org/@agus-eal/expo-audio-studio/-/expo-audio-studio-1.1.0.tgz","fileCount":320,"unpackedSize":7014519,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHMbuwF2EtkMyNsutbwzIwaPpxvg6LykT2XEtSesNpRoAiEA8ti2yoiYsk/NNXZ0rkO+pP63EaX7C4Q7OYdBrcsXVD0="}]},"_npmUser":{"name":"agus-eal","email":"agustin@edgeaudiolabs.com"},"directories":{},"maintainers":[{"name":"agus-eal","email":"agustin@edgeaudiolabs.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expo-audio-studio_1.1.0_1765804489095_0.05445451238654364"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-15T12:59:50.822Z","modified":"2025-12-15T13:14:49.599Z","2.18.1":"2025-12-10T15:15:01.930Z","1.0.0":"2025-12-15T12:59:51.196Z","1.1.0":"2025-12-15T13:14:49.392Z"},"bugs":{"url":"https://github.com/agus-eal/expo-audio-stream/issues"},"author":{"name":"Agustín Núñez","email":"agustin@edgeaudiolabs.com","url":"https://github.com/agus-eal"},"license":"MIT","homepage":"https://github.com/agus-eal/expo-audio-stream/blob/main/packages/expo-audio-studio/README.md","keywords":["react-native","expo","audio","recording","audio-analysis","audio-processing","audio-visualization","waveform","spectrogram","mel-spectrogram","mfcc","audio-features","audio-compression","opus","aac","pcm","wav","cross-platform","background-recording","audio-trimming","dual-stream"],"repository":{"type":"git","url":"git+https://github.com/agus-eal/expo-audio-stream.git","directory":"packages/expo-audio-studio"},"description":"Comprehensive audio processing library for React Native and Expo with recording, analysis, visualization, and streaming capabilities across iOS, Android, and web","maintainers":[{"name":"agus-eal","email":"agustin@edgeaudiolabs.com"}],"readme":"# @siteed/expo-audio-studio\n\n[![kandi X-Ray](https://kandi.openweaver.com/badges/xray.svg)](https://kandi.openweaver.com/typescript/siteed/expo-audio-studio)\n[![Version](https://img.shields.io/npm/v/@siteed/expo-audio-studio.svg)](https://www.npmjs.com/package/@siteed/expo-audio-studio)\n[![Dependency Status](https://img.shields.io/npm/dt/@siteed/expo-audio-studio.svg)](https://www.npmjs.com/package/@siteed/expo-audio-studio)\n[![License](https://img.shields.io/npm/l/@siteed/expo-audio-studio.svg)](https://www.npmjs.com/package/@siteed/expo-audio-studio)\n\n<div align=\"center\">\n  <p align=\"center\">\n    <strong>Comprehensive audio studio library for React Native and Expo with recording, analysis, visualization, and streaming capabilities across iOS, Android, and web platforms.</strong>\n  </p>\n\n  <div style=\"display: flex; justify-content: center; gap: 20px; margin: 30px 0;\">\n    <div>\n      <h3>iOS Demo</h3>\n      <img src=\"../../docs/ios.gif\" alt=\"iOS Demo\" width=\"280\" />\n    </div>\n    <div>\n      <h3>Android Demo</h3>\n      <img src=\"../../docs/android.gif\" alt=\"Android Demo\" width=\"280\" />\n    </div>\n  </div>\n\n  <div style=\"display: flex; flex-direction: column; align-items: center; margin-bottom: 20px;\">\n    <p><strong>Try AudioPlayground: Complete audio processing app built with this library</strong></p>\n    <div style=\"display: flex; justify-content: center; gap: 20px; margin: 10px 0;\">\n      <a href=\"https://apps.apple.com/app/audio-playground/id6739774966\">\n        <img src=\"https://developer.apple.com/app-store/marketing/guidelines/images/badge-download-on-the-app-store.svg\" alt=\"Download on the App Store\" height=\"40\" />\n      </a>\n      <a href=\"https://play.google.com/store/apps/details?id=net.siteed.audioplayground\">\n        <img src=\"https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png\" alt=\"Get it on Google Play\" height=\"40\" />\n      </a>\n    </div>\n  </div>\n\n  <a href=\"https://deeeed.github.io/expo-audio-stream/playground\" style=\"text-decoration:none;\">\n    <div style=\"display:inline-block; padding:10px 20px; background-color:#007bff; color:white; border-radius:5px; font-size:16px;\">\n      Try it in the Playground\n    </div>\n  </a>\n</div>\n\n**Give it a GitHub star 🌟, if you found this repo useful.**\n[![GitHub stars](https://img.shields.io/github/stars/deeeed/expo-audio-stream.svg?style=social&label=Star&maxAge=2592000)](https://github.com/deeeed/expo-audio-stream)\n\n> **Note:** This package was formerly known as `@siteed/expo-audio-stream`. The name has been changed to better reflect the expanded capabilities beyond just audio streaming.\n\n## Features\n\n- Real-time audio streaming across iOS, Android, and web.\n- Audio input device detection and selection:\n  - List and select from available audio input devices\n  - View detailed device capabilities (sample rates, channels, bit depths)\n  - Support for Bluetooth, USB, and wired devices\n  - Automatic device management with fallback options\n  - Intelligent detection refresh for Bluetooth devices\n- Dual-stream recording capabilities:\n  - Simultaneous raw PCM and compressed audio recording\n  - Compression formats: OPUS or AAC\n  - Configurable bitrate for compressed audio\n  - Optimized storage for both high-quality and compressed formats\n- Intelligent interruption handling:\n  - Automatic pause/resume during phone calls\n  - Configurable automatic resumption\n  - Detailed interruption event callbacks\n- Configurable intervals for audio buffer receipt.\n- Automated microphone permissions setup in managed Expo projects.\n- Background audio recording on iOS.\n- Audio features extraction during recording.\n- Consistent WAV PCM recording format across all platforms.\n- Keep recording active while app is in background\n- Zero-latency recording with preparation API:\n  - Pre-initialize audio recording to eliminate startup delay\n  - Prepare permissions, audio buffers, and sessions in advance\n  - Start recording instantly when needed\n- Rich notification system for recording status:\n  - Android: Live waveform visualization in notifications\n  - Android: Fully customizable notification appearance and actions\n  - iOS: Media player integration\n- Advanced audio analysis capabilities:\n  - Mel spectrogram generation for machine learning and visualization\n  - Comprehensive audio feature extraction (MFCC, spectral features, etc.)\n  - Lightweight waveform preview generation\n- Precision audio manipulation:\n  - Advanced audio splitting and trimming API\n  - Support for trimming multiple segments in a single operation\n  - Ability to keep or remove specific time ranges\n- Complete ecosystem:\n  - Full-featured AudioPlayground application showcasing advanced API usage\n  - Ready-to-use UI components via [@siteed/expo-audio-ui](https://github.com/deeeed/expo-audio-stream/tree/main/packages/expo-audio-ui) package\n  - Visualizations, waveforms, and audio controls that can be directly incorporated into your app\n\n## Audio Analysis Features\n\nExtract powerful audio features for advanced audio processing and visualization:\n\n```typescript\n// Extract audio analysis with specific features enabled\nconst analysis = await extractAudioAnalysis({\n  fileUri: 'path/to/recording.wav',\n  features: {\n    energy: true,     // Overall energy of the audio\n    rms: true,        // Root mean square (amplitude)\n    zcr: true,        // Zero-crossing rate\n    mfcc: true,       // Mel-frequency cepstral coefficients\n    spectralCentroid: true,  // Brightness of sound\n    tempo: true,      // Estimated BPM\n  }\n});\n```\n\n### Available Audio Features\n\n- **Basic Analysis**: RMS, energy, amplitude range, zero-crossing rate\n- **Spectral Features**: Spectral centroid, flatness, rolloff, bandwidth\n- **Advanced Analysis**: \n  - MFCC (Mel-frequency cepstral coefficients)\n  - Chromagram (pitch class representation)\n  - Mel Spectrogram\n  - Harmonics-to-noise ratio\n  - Tempo estimation\n  - Pitch detection\n\n### Use Cases\n\n- Visualize audio waveforms with detailed metrics\n- Implement speech recognition preprocessing\n- Create music analysis applications\n- Build audio fingerprinting systems\n- Develop voice activity detection\n\n## API Overview\n\nThe library provides several specialized APIs for different audio processing needs:\n\n### Recording and Playback\n\n- **useAudioRecorder**: Hook for recording audio with configurable quality settings\n- **AudioRecorderProvider**: Context provider for sharing recording state across components\n- **useSharedAudioRecorder**: Hook to access shared recording state from any component\n\n```typescript\n// Start a new recording with configuration\nconst { startRecording, stopRecording, isRecording, recordingUri } = useAudioRecorder({\n  audioQuality: 'high',\n  sampleRate: 44100,\n  numberOfChannels: 2,\n  bitDepth: 16,\n  outputFormat: 'wav',\n});\n\n// Use the prepare API for zero-latency recording\nconst { prepareRecording, startRecording, stopRecording } = useSharedAudioRecorder();\n\n// First prepare the recording - this initializes all resources\nawait prepareRecording({\n  sampleRate: 44100,\n  channels: 2,\n  encoding: 'pcm_16bit'\n});\n\n// Later when needed, start instantly with no delay\nawait startRecording(/* same config as prepare */);\n\n// Share recording state across components\nconst AudioApp = () => (\n  <AudioRecorderProvider>\n    <RecordButton />\n    <AudioVisualizer />\n  </AudioRecorderProvider>\n);\n```\n\n### Audio Analysis\n\n- **extractAudioAnalysis**: Extract comprehensive audio features for detailed analysis\n- **extractPreview**: Generate lightweight waveform data for visualization\n- **extractAudioData**: Extract raw PCM data for custom processing\n- **extractRawWavAnalysis**: Analyze WAV files without decoding, preserving original PCM values\n\n```typescript\n// Extract detailed audio analysis with feature extraction\nconst analysis = await extractAudioAnalysis({\n  fileUri: 'path/to/recording.wav',\n  features: { rms: true, zcr: true, mfcc: true }\n});\n\n// Generate a lightweight waveform preview\nconst preview = await extractPreview({\n  fileUri: 'path/to/recording.wav',\n  pointsPerSecond: 50\n});\n\n// Extract raw PCM data for custom processing\nconst audioData = await extractAudioData({\n  fileUri: 'path/to/recording.wav',\n  includeWavHeader: true\n});\n```\n\n#### Choosing the Right Audio Analysis Method\n\n| Method | Purpose | Performance | Use When |\n|--------|---------|-------------|----------|\n| `extractAudioAnalysis` | Comprehensive audio feature extraction | Medium-Heavy | You need detailed audio features like MFCC, spectral features |\n| `extractPreview` | Lightweight waveform visualization | Very Light | You only need amplitude data for visualization |\n| `extractAudioData` | Raw PCM data extraction | Medium | You need the raw audio data for custom processing |\n| `extractRawWavAnalysis` | WAV analysis without decoding | Light | You want to analyze WAV files while preserving original values |\n| `extractMelSpectrogram` | Mel spectrogram generation | Heavy | You need frequency-domain representation for ML or visualization |\n\n### Specialized Audio Processing\n\n- **extractMelSpectrogram**: Generate mel spectrogram for audio visualization or ML models\n- **trimAudio**: Trim audio files with precision, supporting multiple segments and formats\n\n```typescript\n// Generate mel spectrogram for audio visualization or ML models\nconst melSpectrogram = await extractMelSpectrogram({\n  fileUri: 'path/to/recording.wav',\n  windowSizeMs: 25,\n  hopLengthMs: 10,\n  nMels: 40\n});\n\n// Trim audio files with precision\nconst trimmedAudio = await trimAudio({\n  fileUri: 'path/to/recording.wav',\n  startTimeMs: 1000,\n  endTimeMs: 5000,\n  outputFormat: { format: 'wav' }\n});\n\n// Trim multiple segments from an audio file\nconst compiledAudio = await trimAudio({\n  fileUri: 'path/to/recording.wav',\n  mode: 'keep',\n  ranges: [\n    { startTimeMs: 1000, endTimeMs: 5000 },\n    { startTimeMs: 10000, endTimeMs: 15000 }\n  ]\n});\n```\n\n### Utility Functions\n\n- **convertPCMToFloat32**: Convert PCM data to Float32Array for processing\n- **getWavFileInfo**: Extract metadata from WAV files\n- **writeWavHeader**: Create WAV headers for raw PCM data\n\n### Low-Level Access\n\nFor advanced use cases, the library provides direct access to the native module:\n\n```typescript\nimport { ExpoAudioStreamModule } from '@siteed/expo-audio-studio';\n\n// Access platform-specific functionality\nconst status = await ExpoAudioStreamModule.status();\nconst permissions = await ExpoAudioStreamModule.getPermissionsAsync();\n```\n\n## Documentation\n\nFor detailed documentation, please refer to the [Getting Started Guide](https://deeeed.github.io/expo-audio-stream/docs/).\n\nFor developers interested in contributing or debugging the library, please see the [Contribution Guide](./CONTRIBUTE.md).\n\n## Companion Resources\n\n### AudioPlayground Application\n\nThe repository includes a complete AudioPlayground application that demonstrates advanced usage of the API. This playground serves as both a demonstration and a learning resource:\n\n- Interactive examples of all major API features\n- Real-time audio visualization and analysis\n- Code samples you can directly reference for your own implementation\n\nTry it online at [https://deeeed.github.io/expo-audio-stream/playground](https://deeeed.github.io/expo-audio-stream/playground) or run it locally from the repository.\n\n### UI Components Package\n\nThe [@siteed/expo-audio-ui](https://github.com/deeeed/expo-audio-stream/tree/main/packages/expo-audio-ui) package provides ready-to-use UI components for audio applications:\n\n```bash\n# Install the UI components package\nnpm install @siteed/expo-audio-ui\n\n# or with yarn\nyarn add @siteed/expo-audio-ui\n```\n\nThis package includes:\n- Waveform visualizers\n- Audio recording controls\n- Playback components\n- Spectrogram displays\n- And more!\n\nAll components are built with React Native, Reanimated, and Skia for optimal performance across platforms.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n<sub>Created by [Arthur Breton](https://siteed.net) • See more projects at [siteed.net](https://siteed.net)</sub>\n","readmeFilename":"README.md"}