Table des matières
Utilisez JavaScript pour diviser le flux blob enregistré et générer un fichier WAV de 5 secondes
Maison interface Web js tutoriel Comment diviser un flux blob enregistré en plusieurs fichiers WAV de 5 secondes à l'aide de JavaScript et s'assurer qu'il joue normalement?

Comment diviser un flux blob enregistré en plusieurs fichiers WAV de 5 secondes à l'aide de JavaScript et s'assurer qu'il joue normalement?

Apr 04, 2025 pm 02:39 PM
nodejs 浏览器 ai

Utilisez JavaScript pour diviser le flux blob enregistré et générer un fichier WAV de 5 secondes

Lors de l'enregistrement à l'aide de React-MIC, j'ai rencontré une exigence: j'ai besoin de diviser le flux BLOB enregistré en plusieurs fichiers WAV de 5 secondes. Cependant, après avoir essayé, j'ai constaté que seul le premier fichier WAV divisé peut être lu normalement et que le reste des fichiers est invité à être corrompu.

Lors de la mise en œuvre de cette exigence dans le frontal, nous sommes principalement confrontés à deux défis: l'un est de savoir comment segmenter correctement le flux blob, et l'autre est de savoir comment s'assurer que chaque clip segmenté peut générer et lire correctement les fichiers WAV. Voici des exemples de code et des solutions:

 Importer React, {useref, useState} de 'react'
import {reactmic, reactMicStoPevent} à partir de 'react-mic'
import {bouton} de 'antd'

const AudioreCrorder = () => {
    const [enregistrement, setRecord] = UseState (false)
    const resref = useref <blob> ([])
    const AudiochunksRef = useref <blob> ([])
    const interalref = useref <nodejs.timer null> (null)
    const premierblob = useref <blob non d> (indéfini)

    const CreateWavheader = (numChannels, samplerate, bytelngth) => {
        constant const = new ArrayBuffer (44);
        const View = new DataView (en-tête);

        View.SetUint32 (0, 1380533830, false); // "riff"
        View.SetUint32 (4, bytelngth 36, false);
        View.SetUint32 (8, 1718449184, false); // "VAGUE"
        View.SetUint32 (12, 1684108385, false); // "FMT"
        View.SetUint32 (16, 16, true); // 16 pour PCM
        View.SetUint16 (20, 1, true); // pcm
        View.SetUint16 (22, numChannels, true);
        View.SetUint32 (24, Samplerate, true);
        View.SetUint32 (28, samplerate * numChannels * 2, true);
        View.SetUint16 (32, numChannels * 2, true);
        View.SetUint16 (34, 16, true); // 16 bits
        View.SetUint32 (36, 1684108385, false); // "données"
        View.SetUint32 (40, bytelngth, true);

        En-tête de retour;
    };

    const SaveFile = async () => {
        const chunkslist = resref.current;
        pour (que i = 0; i <chunkslist.length i const audiobuffer="new" uint8array chunkslist .arraybuffer header="CreateWavheader" audiobuffer.length supposons mono et wavblob="new" blob wav url="url.createObjectUrl" a="document.CreateElement" a.href="url;" a.download="`Enregistrement" .wav a.click url.revokeobjecturl startrecording="()"> {
        setRecord (true)
        AudioChunksRef.Current = [] // Effacer les données d'enregistrement précédentes // Diviser l'intervalle d'enregistrement.
            const CurBlob = new Blob (AudiochunksRef.current, {type: 'audio / wav'})
            const startIndex = AudiochunksRef.current.indexof (FirstBlob.current comme blob)
            const blob = curblob.slice (startIndex === -1? 0: startIndex, -1, 'audio / wav')
            FirstBlob.Current = AudiochunksRef.current.at (-1)
            // traite la console de données d'enregistrement actuelle.log ('segment des données d'enregistrement actuelles:', blob)
            resref.current.push (blob)
        }, 5000)
    }

    const stopRecording = () => {
        setRecord (false)
        interalref.current && clearInterval (interalref.current) // timiner claire}

    const Odata = (enregistréblob: blob) => {
        AudiochunksRef.current.push (enregistréblob) // Enregistrer les données d'enregistrement}

    const Onstop = (enregistréblob: reactMicStOnevent) => {
        Console.log ('enregistré terminé:', RecordedBlob)
    }

    const SaveFile1 = () => {
        const chunkslist = resref.current
        chunkslist.map (async (v, i) => {
            const filename = 'aaa.wav'
            const File: file = nouveau fichier ([v], nom de fichier, {type: 'audio / wav'})
            const FileSize = file.size

            Console.log ('Files Size', FileSize)
            // Créer un lien de téléchargement const url = url.createObjectUrl (fichier)
            const a = document.createelement ('a')
            a.href = URL
            A.Download = `Enregistrement $ {i} .wav` // Définissez le nom du fichier de téléchargement a.click () // Trigger Download // Release URL Resource url.RevokeObjectUrl (URL)
        })
    }

    const SaveFinalResult = () => {
        const filename = 'aaa.wav'
        const File: file = nouveau fichier (AudiochunksRef.current, nom de fichier, {type: 'audio / wav'})
        const FileSize = file.size

        Console.log ('Files Size', FileSize)
        // Créer un lien de téléchargement const url = url.createObjectUrl (fichier)
        const a = document.createelement ('a')
        a.href = URL
        A.Download = `Enregistrement $ {date.now ()}. wav` // Définissez le nom du fichier de téléchargement a.click () // Trigger Download // Release URL Resource url.RevokeObjectUrl (URL)
    }

    Retour (
        <div>
            <reactmic enregistre="{disques}" onstop="{onstop}" ondata="{ondata}" mimetype="Audio / wav"></reactmic>
            <button onclick="{starTrecording}"> Démarrer l'enregistrement <button onclick="{stopRecording}"> Arrêtez d'enregistrer 
            <button onclick="{SaveFile}"> Télécharger 
            <button onclick="{SavefinalResult}"> Télécharger Final 
        </button></button></button></button>
</div>
    )
}

exportation par défaut audioritor</chunkslist.length></blob></nodejs.timer></blob></blob>
Copier après la connexion

Pendant le processus d'essai de diviser le flux Blob et de générer le fichier WAV, il a été constaté que l'ajout manuellement les informations de l'en-tête WAV ne résoudrait pas le problème. La raison en est que la structure du fichier WAV est relativement stricte. Si les informations d'en-tête ne sont pas correctement ajoutées après la segmentation, le fichier peut être corrompu.

Une suggestion pour résoudre ce problème consiste à utiliser la version WASM de FFMPEG, une bibliothèque de traitement audio et vidéo qui peut être exécutée dans le navigateur. Avec lui, vous pouvez facilement segmenter l'audio et générer le format de fichier WAV correct. Vous pouvez envisager d'utiliser le projet FFMPEG.WASM pour implémenter cette fonction.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment enregistrer un compte sur le tutoriel d'enregistrement d'échange Oryi Exchange Ouyi Comment enregistrer un compte sur le tutoriel d'enregistrement d'échange Oryi Exchange Ouyi Apr 24, 2025 pm 02:06 PM

Les étapes pour enregistrer un compte OUYI sont les suivantes: 1. Préparez un e-mail ou un numéro de téléphone portable valide et stabiliser le réseau. 2. Visitez le site officiel d'Ouyi. 3. Entrez la page d'inscription. 4. Sélectionnez un e-mail ou un numéro de téléphone mobile pour vous inscrire et remplir les informations. 5. Obtenez et remplissez le code de vérification. 6. Acceptez l'accord d'utilisateur. 7. Compléter l'enregistrement et connecter, effectuer KYC et mettre en place des mesures de sécurité.

Binance Téléchargement de téléchargement Binance Téléchargement Path Binance Téléchargement de téléchargement Binance Téléchargement Path Apr 24, 2025 pm 02:12 PM

Pour télécharger en toute sécurité l'application Binance, vous devez passer par les chaînes officielles: 1. Visitez le site officiel de Binance, 2. Trouver et cliquer sur le portail de téléchargement de l'application, 3. Choisissez de scanner le code QR, l'App Store ou télécharger directement le fichier APK pour télécharger pour protéger la sécurité du compte.

Comment enregistrer un compte sur Sesame Open Exchange? Tutoriel sur l'inscription de Sesame Open Exchange Comment enregistrer un compte sur Sesame Open Exchange? Tutoriel sur l'inscription de Sesame Open Exchange Apr 24, 2025 pm 02:00 PM

L'enregistrement d'un compte ouvert de porte sésame nécessite 7 étapes: 1. Préparer un e-mail ou un numéro de téléphone mobile valide et un réseau stable; 2. Visitez le site officiel; 3. Entrez la page d'inscription; 4. Sélectionnez et remplissez la méthode d'enregistrement; 5. Obtenir et remplir le code de vérification; 6. Acceptez l'accord d'utilisateur; 7. Compléter l'enregistrement et se connecter, il est recommandé d'effectuer KYC et de définir des mesures de sécurité.

Comment enregistrer un compte sur Binance Exchange Binance Exchange Registration Tutoriel Comment enregistrer un compte sur Binance Exchange Binance Exchange Registration Tutoriel Apr 24, 2025 pm 02:03 PM

Les étapes pour enregistrer un compte Binance comprennent: 1. Préparez un e-mail ou un numéro de téléphone mobile valide et un réseau stable; 2. Visitez le site officiel de Binance; 3. Entrez la page d'inscription; 4. Sélectionnez la méthode d'enregistrement; 5. Remplissez les informations d'enregistrement; 6. Acceptez l'accord d'utilisateur; 7. Vérification complète; 8. Obtenir et remplir le code de vérification; 9. Inscription complète.

OUYI Télécharger le lien OUYI Télécharger le chemin OUYI Télécharger le lien OUYI Télécharger le chemin Apr 24, 2025 pm 02:09 PM

Les méthodes pour télécharger en toute sécurité l'application OKX incluent: 1. Utilisez un moteur de recherche de confiance pour rechercher et vérifier le nom de domaine; 2. Vérifiez le compte officiel des médias sociaux et identifiez le logo de certification; 3. Consultez le service client officiel pour confirmer l'authenticité du lien; 4. Utilisez un site Web de navigation de confiance pour obtenir un lien de téléchargement vérifié. Grâce à ces étapes, vous pouvez télécharger en toute sécurité l'application OUYI et commencer votre parcours de trading de crypto-monnaie.

Bitcoin Prix aujourd'hui Bitcoin Prix aujourd'hui Apr 28, 2025 pm 07:39 PM

Les fluctuations des prix de Bitcoin aujourd'hui sont affectées par de nombreux facteurs tels que la macroéconomie, les politiques et le sentiment du marché. Les investisseurs doivent prêter attention à une analyse technique et fondamentale pour prendre des décisions éclairées.

Quelles sont les dix principales applications de trading de devises virtuelles? Le dernier classement de change de monnaie numérique Quelles sont les dix principales applications de trading de devises virtuelles? Le dernier classement de change de monnaie numérique Apr 28, 2025 pm 08:03 PM

Les dix premiers échanges de devises numériques tels que Binance, OKX, Gate.io ont amélioré leurs systèmes, des transactions diversifiées efficaces et des mesures de sécurité strictes.

Le bitcoin peut-il briser les sommets historiques cette année Le bitcoin peut-il briser les sommets historiques cette année Apr 24, 2025 pm 01:51 PM

À la mi-avril 2025, le prix du bitcoin était d'environ 85 688 $, légèrement en dessous de son sommet de tous les temps. Les prévisions montrent: 1) prédit de manière conservatrice 100 000 $ d'ici la fin de l'année; 2) Radical prédit 200 000 à 225 000 $; 3) prédit extrêmement 700 000 $, affecté par la macroéconomie, l'investissement institutionnel et le sentiment du marché.

See all articles