国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
使用javascript切分錄音的blob流並生成5秒的wav文件
首頁 web前端 js教程 如何使用JavaScript將錄音的Blob流切分成多個5秒的WAV文件並確保其正常播放?

如何使用JavaScript將錄音的Blob流切分成多個5秒的WAV文件並確保其正常播放?

Apr 04, 2025 pm 02:39 PM
nodejs 瀏覽器 ai

使用javascript切分錄音的blob流並生成5秒的wav文件

在使用react-mic進(jìn)行錄音時,遇到一個需求:需要將錄音的blob流切分成多個5秒的wav文件。然而,嘗試之後發(fā)現(xiàn)只有第一個切分的wav文件能夠正常播放,其余文件均提示文件損壞。

在前端實(shí)現(xiàn)這個需求時,主要面臨兩個挑戰(zhàn):一是如何正確切分blob流,二是如何確保每個切分後的片段能夠正確生成並播放wav文件。以下是代碼示例和解決思路:

 import React, { useRef, useState } from 'react'
import { ReactMic, ReactMicStopEvent } from 'react-mic'
import { Button } from 'antd'

const AudioRecorder = () => {
    const [record, setRecord] = useState(false)
    const resRef = useRef<blob>([])
    const audioChunksRef = useRef<blob>([])
    const intervalRef = useRef<nodejs.timer null>(null)
    const firstBlob = useRef<blob undefined>(undefined)

    const createWavHeader = (numChannels, sampleRate, byteLength) => {
        const header = new ArrayBuffer(44);
        const view = new DataView(header);

        view.setUint32(0, 1380533830, false); // "RIFF"
        view.setUint32(4, byteLength 36, false);
        view.setUint32(8, 1718449184, false); // "WAVE"
        view.setUint32(12, 1684108385, false); // "fmt "
        view.setUint32(16, 16, true); // 16 for 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); // "data"
        view.setUint32(40, byteLength, true);

        return header;
    };

    const saveFile = async () => {
        const chunksList = resRef.current;
        for (let i = 0; i  {
        setRecord(true)
        audioChunksRef.current = [] // 清空之前的錄音數(shù)據(jù)// 每5秒分割一次錄音intervalRef.current = setInterval(() => {
            const curBlob = new Blob(audioChunksRef.current, { type: 'audio/wav' })
            const startIndex = audioChunksRef.current.indexOf(firstBlob.current as Blob)
            const blob = curBlob.slice(startIndex === -1 ? 0 : startIndex, -1, 'audio/wav')
            firstBlob.current = audioChunksRef.current.at(-1)
            // 處理當(dāng)前錄音數(shù)據(jù)console.log('分割當(dāng)前錄音數(shù)據(jù):', blob)
            resRef.current.push(blob)
        }, 5000)
    }

    const stopRecording = () => {
        setRecord(false)
        intervalRef.current && clearInterval(intervalRef.current) // 清除定時器}

    const onData = (recordedBlob: Blob) => {
        audioChunksRef.current.push(recordedBlob) // 保存錄音數(shù)據(jù)}

    const onStop = (recordedBlob: ReactMicStopEvent) => {
        console.log('錄音完成:', recordedBlob)
    }

    const saveFile1 = () => {
        const chunksList = resRef.current
        chunksList.map(async (v, i) => {
            const fileName = 'aaa.wav'
            const file: File = new File([v], fileName, { type: 'audio/wav' })
            const fileSize = file.size

            console.log('fileSize', fileSize)
            // 創(chuàng)建下載鏈接const url = URL.createObjectURL(file)
            const a = document.createElement('a')
            a.href = url
            a.download = `recording${i}.wav` // 設(shè)置下載文件的名稱a.click() // 觸發(fā)下載// 釋放URL資源URL.revokeObjectURL(url)
        })
    }

    const saveFinalResult = () => {
        const fileName = 'aaa.wav'
        const file: File = new File(audioChunksRef.current, fileName, { type: 'audio/wav' })
        const fileSize = file.size

        console.log('fileSize', fileSize)
        // 創(chuàng)建下載鏈接const url = URL.createObjectURL(file)
        const a = document.createElement('a')
        a.href = url
        a.download = `recording${Date.now()}.wav` // 設(shè)置下載文件的名稱a.click() // 觸發(fā)下載// 釋放URL資源URL.revokeObjectURL(url)
    }

    return (
        <div>
            <reactmic record="{record}" onstop="{onStop}" ondata="{onData}" mimetype="audio/wav"></reactmic>
            <button onclick="{startRecording}">開始錄音</button>
            <button onclick="{stopRecording}">停止錄音</button>
            <button onclick="{saveFile}">下載</button>
            <button onclick="{saveFinalResult}">下載Final</button>
        </div>
    )
}

export default AudioRecorder</blob></nodejs.timer></blob></blob>

在嘗試切分blob流和生成wav文件的過程中,發(fā)現(xiàn)手動添加wav頭信息並不能解決問題。其原因在於wav文件的結(jié)構(gòu)比較嚴(yán)格,切分後如果不正確地添加頭部信息,文件可能會損壞。

解決這個問題的一個建議是使用ffmpeg的wasm版本,這是一個可以在瀏覽器中運(yùn)行的音視頻處理庫。通過它,你可以輕鬆地對音頻進(jìn)行切分並生成正確的wav文件格式??梢钥紤]使用ffmpeg.wasm項(xiàng)目來實(shí)現(xiàn)這個功能。

以上是如何使用JavaScript將錄音的Blob流切分成多個5秒的WAV文件並確保其正常播放?的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

鏈上資金流向大曝光:聰明錢正在下注哪些新代幣? 鏈上資金流向大曝光:聰明錢正在下注哪些新代幣? Jul 16, 2025 am 10:15 AM

普通投資者可通過追蹤“聰明錢”發(fā)現(xiàn)潛力代幣,其為高盈利地址,關(guān)注其動向能提供領(lǐng)先指標(biāo)。 1.使用Nansen、Arkham Intelligence等工具分析鏈上數(shù)據(jù),查看聰明錢的買入與持倉情況;2.通過Dune Analytics獲取社區(qū)創(chuàng)建的儀表板,監(jiān)測資金流向;3.關(guān)注Lookonchain等平臺獲取實(shí)時情報。近期聰明錢正佈局再質(zhì)押與LRT賽道、DePIN項(xiàng)目、模塊化生態(tài)及RWA協(xié)議,如某LRT協(xié)議獲大量早期存款,某DePIN項(xiàng)目被持續(xù)積累,某遊戲公鏈獲產(chǎn)業(yè)金庫支持,某RWA協(xié)議吸引機(jī)構(gòu)入場

穩(wěn)定幣DAI適合什麼人使用_去中心化穩(wěn)定幣使用場景解析 穩(wěn)定幣DAI適合什麼人使用_去中心化穩(wěn)定幣使用場景解析 Jul 15, 2025 pm 11:27 PM

DAI適合重視去中心化理念、積極參與DeFi生態(tài)、需要跨鏈資產(chǎn)流動性及追求資產(chǎn)透明與自治的用戶。 1. 去中心化理念支持者信任智能合約與社區(qū)治理;2. DeFi用戶可用於借貸、質(zhì)押、流動性挖礦;3. 跨鏈用戶可實(shí)現(xiàn)多鏈資產(chǎn)靈活轉(zhuǎn)移;4. 治理參與者可通過投票影響系統(tǒng)決策。其主要場景包括去中心化借貸、資產(chǎn)避險、流動性挖礦、跨境支付及社區(qū)治理,同時需注意系統(tǒng)風(fēng)險、抵押波動風(fēng)險和技術(shù)門檻問題。

如何辨別假山寨幣?教你避免幣圈騙局 如何辨別假山寨幣?教你避免幣圈騙局 Jul 15, 2025 pm 10:36 PM

要辨別假山寨幣需從六個方面入手。一、查驗(yàn)證明材料與項(xiàng)目背景,包括白皮書、官網(wǎng)、代碼開源地址及團(tuán)隊透明度;二、觀察上線平臺,優(yōu)先選擇主流交易所;三、警惕高額回報與拉人頭模式,避免資金盤陷阱;四、分析合約代碼與代幣機(jī)制,檢查是否存在惡意函數(shù);五、審查社群與媒體運(yùn)營,識別虛假熱度;六、遵循防騙實(shí)戰(zhàn)建議,如不輕信推薦、使用專業(yè)錢包。通過以上步驟可有效規(guī)避騙局,保護(hù)資產(chǎn)安全。

比特幣、Chainlink、RWA共振上漲:加密市場進(jìn)入機(jī)構(gòu)邏輯? 比特幣、Chainlink、RWA共振上漲:加密市場進(jìn)入機(jī)構(gòu)邏輯? Jul 16, 2025 am 10:03 AM

比特幣、Chainlink與RWA的聯(lián)動上漲標(biāo)誌著加密市場正轉(zhuǎn)向機(jī)構(gòu)敘事主導(dǎo)。比特幣作為機(jī)構(gòu)配置的宏觀對沖資產(chǎn),為市場提供穩(wěn)定基礎(chǔ);Chainlink通過預(yù)言機(jī)和跨鏈技術(shù)成為連接現(xiàn)實(shí)與數(shù)字世界的關(guān)鍵橋樑;RWA則為傳統(tǒng)資本入場提供合規(guī)路徑。三者共同構(gòu)建了機(jī)構(gòu)入場的完整邏輯閉環(huán):1)配置BTC穩(wěn)定資產(chǎn)負(fù)債表;2)通過RWA拓展鏈上資產(chǎn)管理;3)依賴Chainlink建設(shè)底層基礎(chǔ)設(shè)施,預(yù)示市場進(jìn)入由真實(shí)需求驅(qū)動的新階段。

穩(wěn)定幣DAI和USDC哪個好_DAI適合長期持有嗎 穩(wěn)定幣DAI和USDC哪個好_DAI適合長期持有嗎 Jul 15, 2025 pm 11:18 PM

DAI適合長期持有嗎?答案取決於個人需求與風(fēng)險偏好。 1.DAI是去中心化穩(wěn)定幣,由加密資產(chǎn)超額抵押生成,適合追求抗審查和透明度的用戶;2.其穩(wěn)定性略遜於USDC,可能因抵押品波動出現(xiàn)輕微脫錨;3.適用於DeFi生態(tài)中的借貸、質(zhì)押及治理場景;4.需關(guān)注MakerDAO系統(tǒng)升級與治理風(fēng)險。若追求高穩(wěn)定性與合規(guī)保障,建議選擇USDC;若重視去中心化理念並積極參與DeFi應(yīng)用,則DAI具備長期持有價值。兩者結(jié)合使用亦可提升資產(chǎn)配置的安全性與靈活性。

以太坊智能合約的作用 以太坊智能合約的作用 Jul 15, 2025 pm 09:18 PM

以太坊智能合約的作用是實(shí)現(xiàn)去中心化、自動化和透明的協(xié)議執(zhí)行,其核心功能包括:1. 作為DApp的核心邏輯層,支持代幣發(fā)行、DeFi、NFT等功能;2. 通過代碼自動執(zhí)行合約,減少人為乾預(yù)與欺詐風(fēng)險;3. 構(gòu)建DeFi生態(tài),使用戶可直接進(jìn)行借貸、交易等金融操作;4. 創(chuàng)建與管理數(shù)字資產(chǎn),確保唯一性與可驗(yàn)證性;5. 提升供應(yīng)鏈與身份驗(yàn)證的透明度與安全性;6. 支持DAO治理,實(shí)現(xiàn)去中心化決策。

一個穩(wěn)定幣多少美元 一個穩(wěn)定幣多少美元 Jul 15, 2025 pm 09:57 PM

穩(wěn)定幣的價值通常與美元1:1掛鉤,但受市場供需、投資者信心及儲備資產(chǎn)狀況等因素影響會出現(xiàn)小幅波動。例如USDT曾在2018年跌至0.87美元,USDC在2023年也因矽谷銀行危機(jī)短暫跌至0.87美元左右。穩(wěn)定幣的錨定機(jī)制主要包括:1.法幣儲備型(如USDT、USDC),依賴發(fā)行方儲備金;2.加密貨幣抵押型(如DAI),通過超額抵押其他加密貨幣維持穩(wěn)定;3.算法穩(wěn)定幣(如UST),依靠算法調(diào)整供應(yīng)量,但風(fēng)險較高。常見交易平臺推薦包括:1.Binance,提供豐富交易產(chǎn)品和強(qiáng)大流動性;2.OKX,以

山寨幣最新行情預(yù)測_哪些幣種有爆發(fā)潛力? 山寨幣最新行情預(yù)測_哪些幣種有爆發(fā)潛力? Jul 15, 2025 pm 11:03 PM

2025年哪些山寨幣具備爆發(fā)潛力?答案如下:1. Layer2擴(kuò)容賽道中,Arbitrum (ARB) 因生態(tài)擴(kuò)張迅速、日活躍用戶增長明顯,以及 Optimism (OP) 作為以太坊優(yōu)化協(xié)議持續(xù)獲大型協(xié)議採用,均值得關(guān)注;2. DeFi協(xié)議類山寨幣中,Aave (AAVE) 因新版本增強(qiáng)借貸邏輯、吸引穩(wěn)定資金流入,以及 Curve (CRV) 在穩(wěn)定幣兌換賽道保持優(yōu)勢地位,具備較強(qiáng)競爭力;3. 人工智能結(jié)合項(xiàng)目中,F(xiàn)etch.ai (FET) 憑藉AI與區(qū)塊鏈融合提升關(guān)注度,Ocean Pro

See all articles