Kompletan ciklus snimanja
Pokrenite, pauzirajte, nastavite, završite, otkažite i resetujte snimanje zvuka putem dosljednog i potpuno tipiziranog API-ja.
Moderna biblioteka za snimanje zvuka prilagođena za Vue, Nuxt, React i Vanilla TypeScript.
Biblioteka nudi framework-nezavisni core za snimanje, potpuno tipizirane integracije za moderne frontend frameworke i gotove recorder komponente koje se mogu prilagoditi individualnom dizajnu aplikacije.
jamit-audio-recorder je modularno rješenje za snimanje zvuka u modernim web aplikacijama. Framework-nezavisni core sadrži kompletnu logiku snimanja, dok posebni paketi pružaju praktične integracije za Vue, Nuxt i React.
Developeri mogu koristiti headless API za izradu potpuno individualnog korisničkog interfejsa ili gotove recorder komponente za Vue i React s dobro odabranim početnim postavkama, responzivnim stilovima i brojnim mogućnostima prilagođavanja.
Modularna osnova za snimanje s tipiziranim API-jima, framework integracijama, gotovim komponentama i pouzdanim upravljanjem resursima preglednika.
Pokrenite, pauzirajte, nastavite, završite, otkažite i resetujte snimanje zvuka putem dosljednog i potpuno tipiziranog API-ja.
Centralna logika snimanja ne zavisi od Vuea, Reacta ili Nuxta i može se direktno koristiti s Vanilla TypeScriptom.
Posebni composables i hookovi pružaju reaktivno upravljanje stanjem, tipizirane recorder akcije i automatsko čišćenje lifecycle resursa za Vue, Nuxt i React.
Koristite profesionalne recorder komponente za Vue i React ili prilagodite pojedine dijelove putem propsa, Vue slotova, React render propsa i CSS varijabli.
Podesite maksimalno trajanje snimanja i maksimalnu veličinu datoteke. Prekoračenja se prikazuju kroz tipizirana stanja greške.
Biblioteka provjerava formate koje trenutni preglednik podržava, bira odgovarajući MIME tip i kreira odgovarajuću ekstenziju datoteke.
Završeni snimci dostupni su kao Blob, File i object URL te se mogu odmah reproducirati, poslati ili preuzeti.
Media streamovi, timeri, object URL-ovi, resursi za Web Audio analizu i subscriptions pouzdano se čiste, uključujući framework unmount i React Strict Mode.
Normalizovani live nivo mikrofona između 0 i 1 pruža direktan vizuelni prikaz tokom snimanja, uz zaglađivanje, pravilno ponašanje pri pauzi i automatsko čišćenje resursa.
Koristite gotovu recorder komponentu direktno u pregledniku i isprobajte stanja snimanja, live nivo zvuka, kontrole reprodukcije i preuzimanje datoteke.
Pokrenite snimanje, pratite live nivo mikrofona, pauzirajte ga ili nastavite te reproducirajte ili preuzmite završenu audio datoteku.
Projekt je organizovan kao pnpm monorepo s odvojenim paketima za recording core i njegove framework integracije.
@codeplayer71/audio-recorder-coreFramework-nezavisni TypeScript core koji sadrži logiku snimanja, live analizu nivoa zvuka, prepoznavanje audio formata preglednika, upravljanje stanjem, ograničenja snimanja, tipizirane greške i čišćenje resursa.
@codeplayer71/audio-recorder-vueVue integracija s useAudioRecorder composableom i gotovom JamItAudioRecorder komponentom.
@codeplayer71/audio-recorder-reactReact integracija s useAudioRecorder hookom i gotovom JamItAudioRecorder komponentom, uključujući lifecycle upravljanje sigurno za Strict Mode.
@codeplayer71/audio-recorder-nuxtNuxt modul koji automatski omogućava useAudioRecorder, registruje JamItAudioRecorder i uključuje zadane stilove komponente.
Instalirajte samo paket koji je potreban vašoj aplikaciji.
pnpm add @codeplayer71/audio-recorder-corepnpm add @codeplayer71/audio-recorder-vuepnpm add @codeplayer71/audio-recorder-nuxtpnpm add @codeplayer71/audio-recorder-reactInstalirajte framework paket koji je potreban vašoj aplikaciji ili direktno koristite framework-nezavisni core.
Koristite integraciju koja odgovara vašoj aplikaciji ili radite direktno s framework-nezavisnim coreom.
Vue aplikacije mogu koristiti gotovu JamItAudioRecorder komponentu s ugrađenim live nivoom zvuka ili izraditi vlastiti interfejs pomoću useAudioRecorder composablea.
<script setup lang="ts">
import { JamItAudioRecorder } from '@codeplayer71/audio-recorder-vue';
import '@codeplayer71/audio-recorder-vue/style.css';
</script>
<template>
<JamItAudioRecorder />
</template>Registrujte Nuxt modul jednom kako bi recorder komponenta, composable, zadani stilovi i podrška za live nivo zvuka bili dostupni u cijeloj aplikaciji.
export default defineNuxtConfig({
modules: ['@codeplayer71/audio-recorder-nuxt'],
});<template>
<JamItAudioRecorder />
</template>Modul automatski importuje useAudioRecorder, registruje JamItAudioRecorder i uključuje zadane stilove Vue komponente.
React aplikacije mogu koristiti gotovu JamItAudioRecorder komponentu s ugrađenim live nivoom zvuka ili izraditi vlastiti interfejs pomoću useAudioRecorder hooka.
import { JamItAudioRecorder } from '@codeplayer71/audio-recorder-react';
import '@codeplayer71/audio-recorder-react/style.css';
export function Recorder() {
return <JamItAudioRecorder />;
}Framework-nezavisni core može se direktno koristiti u bilo kojoj browser aplikaciji bez Vuea, Reacta ili drugog frontend frameworka.
import { createAudioRecorder } from '@codeplayer71/audio-recorder-core';
const recorder = createAudioRecorder({
maxDurationMs: 120_000,
maxFileSizeBytes: 10_000_000,
});
const unsubscribe = recorder.subscribe((snapshot) => {
console.log(snapshot.state);
console.log(snapshot.durationMs);
console.log(snapshot.recording);
console.log(snapshot.error);
});
await recorder.start();
const recording = await recorder.stop();
console.log(recording.file);
console.log(recording.url);
unsubscribe();
recorder.destroy();Gotove komponente nisu obavezne. Aplikacije kojima je potreban potpuno individualan interfejs mogu direktno koristiti Vue composable, React hook ili framework-nezavisni core API.
Svaka integracija omogućava pristup trenutnom recorder snapshotu, normalizovanom live nivou zvuka, trajanju snimanja, završenom snimku, tipiziranim greškama i kompletnom skupu recorder akcija.
const {
snapshot,
start,
pause,
resume,
stop,
cancel,
reset,
} = useAudioRecorder();Gotove komponente za Vue i React pružaju profesionalan i responzivan interfejs bez nametanja fiksnog vizuelnog stila aplikaciji.
Nazivi, ograničenja snimanja, browser constraints i vidljivi dijelovi interfejsa, poput live nivoa zvuka, mogu se podesiti putem tipiziranih component propsa.
<JamItAudioRecorder
title="Record a voice message"
start-label="Start"
stop-label="Finish"
download-label="Save recording"
:max-duration-ms="60_000"
:max-file-size-bytes="5_000_000"
:show-cancel="false"
/>Boje, razmaci, border radius, veličine ikona i izgled indikatora nivoa zvuka mogu se prilagoditi bez zamjene strukture komponente.
.custom-recorder {
--jamit-recorder-background: #0f172a;
--jamit-recorder-color: #ffffff;
--jamit-recorder-primary: #2dd4bf;
--jamit-recorder-primary-hover: #14b8a6;
--jamit-recorder-border-radius: 20px;
--jamit-recorder-button-radius: 10px;
--jamit-recorder-spacing: 28px;
--jamit-recorder-icon-size: 20px;
}<JamItAudioRecorder class="custom-recorder" />Pojedini dijelovi Vue komponente mogu se zamijeniti putem named slotova, dok stanje snimanja i akcije ostaju dostupni.
<JamItAudioRecorder>
<template #header>
<h2>Voice message</h2>
</template>
<template #controls="{ start, stop, isRecording }">
<button
v-if="!isRecording"
type="button"
@click="start"
>
Record
</button>
<button
v-else
type="button"
@click="stop"
>
Finish
</button>
</template>
</JamItAudioRecorder>Dostupni slotovi uključuju header, status, trajanje, nivo zvuka, kontrole, poruku o grešci, player, download akciju i footer. React komponenta nudi odgovarajuće mogućnosti prilagođavanja putem render propsa, uključujući renderAudioLevel.
Snimanje zvuka zasniva se na MediaRecorder API-ju preglednika. Rezultirajući format zavisi od MIME tipova koje podržavaju preglednik, operativni sistem i uređaj.
Preglednici zasnovani na Chromiumu najčešće kreiraju WebM datoteke s Opus kodekom, dok Safari najčešće koristi MP4 audio. Firefox može koristiti Ogg ili WebM, zavisno od dostupne podrške preglednika.
Biblioteka ne mijenja samo naziv snimljene datoteke. Ona tokom izvođenja provjerava podržane formate i dodjeljuje odgovarajući MIME tip i ekstenziju datoteke.
Recording core, direktno korištenje s Vanilla TypeScriptom, Vue i React integracije, gotove recorder komponente i Nuxt modul potpuno su funkcionalni i spremni za produkcijsku upotrebu.
Projekt uključuje tipizirane API-je, live nivo zvuka, lifecycle upravljanje prilagođeno pojedinim frameworkovima, browser-aware odabir formata, podesiva ograničenja snimanja, pouzdano čišćenje resursa, automatizovane testove i detaljnu dokumentaciju za instalaciju, korištenje i prilagođavanje.
Kompletan izvorni kod, implementacije paketa, primjeri, dokumentacija i historija izdanja dostupni su u javnom GitHub repozitoriju.