最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript音視頻之通過(guò)輸入的文字自動(dòng)計(jì)算機(jī)讀時(shí)長(zhǎng)

 更新時(shí)間:2026年02月06日 09:15:13   作者:博客zhu虎康  
這篇文章主要介紹了一個(gè)計(jì)算文本轉(zhuǎn)語(yǔ)音時(shí)長(zhǎng)的JavaScript函數(shù),該函數(shù)支持中英文混合文本,通過(guò)區(qū)分中文(按字?jǐn)?shù))和英文(按單詞數(shù))分別計(jì)算時(shí)長(zhǎng),感興趣的小伙伴可以了解下

需求

通過(guò)輸入的文字,自動(dòng)計(jì)算機(jī)讀時(shí)長(zhǎng)

分析

核心設(shè)計(jì)思路

  • 區(qū)分中文(單音節(jié)字) 和英文(多音節(jié)詞) 的語(yǔ)速邏輯(中文按 “字 / 分鐘”,英文按 “詞 / 分鐘”);
  • 提供默認(rèn)語(yǔ)速(自然舒適的中速),支持自定義調(diào)整;
  • 計(jì)算結(jié)果保留兩位小數(shù),符合實(shí)際使用場(chǎng)景;
  • 兼容空字符串、全空格等邊界情況。
  • 時(shí)長(zhǎng) = 字符數(shù) × (60 ÷ 語(yǔ)速值)(中文按字,英文按詞)
  • 預(yù)設(shè)了最貼合實(shí)際的語(yǔ)速值(中速 200 字 / 分鐘),開(kāi)箱即用
  • 支持雙語(yǔ)、自定義語(yǔ)速,適配不同 TTS 工具和業(yè)務(wù)場(chǎng)景

封裝函數(shù)

/**
 * method: calculateTtsDuration
 * description: 計(jì)算文本轉(zhuǎn)機(jī)讀的時(shí)長(zhǎng)
 */
/**
 * 計(jì)算字符串機(jī)讀時(shí)長(zhǎng)(支持中文/英文,適配不同語(yǔ)速)
 * @param {string} text - 要朗讀的字符串
 * @param {Object} [options] - 可選配置項(xiàng)
 * @param {number} [options.speedType='normal'] - 語(yǔ)速類型:slow(慢速)/normal(中速)/fast(快速),也可傳自定義語(yǔ)速值
 * @param {Object} [options.speedConfig] - 自定義語(yǔ)速配置(字/分鐘,中文)|(詞/分鐘,英文)
 * @param {number} [options.speedConfig.zhSlow=135] - 中文慢速(默認(rèn)135字/分鐘)
 * @param {number} [options.speedConfig.zhNormal=200] - 中文中速(默認(rèn)200字/分鐘,最舒適)
 * @param {number} [options.speedConfig.zhFast=270] - 中文快速(默認(rèn)270字/分鐘)
 * @param {number} [options.speedConfig.enSlow=120] - 英文慢速(默認(rèn)120詞/分鐘)
 * @param {number} [options.speedConfig.enNormal=150] - 英文中速(默認(rèn)150詞/分鐘)
 * @param {number} [options.speedConfig.enFast=180] - 英文快速(默認(rèn)180詞/分鐘)
 * @returns {number} 朗讀時(shí)長(zhǎng)(秒),保留兩位小數(shù)
 */
export function calculateTtsDuration(text, options = {}) {
  // 1. 處理邊界:空字符串/全空格直接返回0
  if (!text || text.trim() === '') {
    return 0
  }

  // 2. 默認(rèn)配置
  const defaultConfig = {
    speedType: 'normal',
    speedConfig: {
      zhSlow: 135, // 中文慢速:≈0.44秒/字(60/135)
      zhNormal: 200, // 中文中速:≈0.3秒/字(60/200)
      zhFast: 270, // 中文快速:≈0.22秒/字(60/270)
      enSlow: 120, // 英文慢速:0.5秒/詞
      enNormal: 150, // 英文中速:0.4秒/詞
      enFast: 180 // 英文快速:≈0.33秒/詞
    }
  }

  // 合并配置
  const config = { ...defaultConfig, ...options }
  const { speedType, speedConfig } = config

  // 3. 區(qū)分中文/英文,計(jì)算有效長(zhǎng)度
  // 中文:匹配中文字符(包括繁體),統(tǒng)計(jì)字?jǐn)?shù);非中文按英文單詞統(tǒng)計(jì)
  const zhCharRegex =
    /[\u4e00-\u9fa5\u3400-\u4dbf\u{20000}-\u{2a6df}\u{2a700}-\u{2b73f}\u{2b740}-\u{2b81f}\u{2b820}-\u{2ceaf}\u{2ceb0}-\u{2ebef}\u{30000}-\u{3134f}]/gu
  const zhChars = text.match(zhCharRegex) || [] // 中文字符數(shù)組
  const zhLength = zhChars.length // 中文字?jǐn)?shù)

  // 英文:提取非中文字符,按空格分割成單詞(過(guò)濾空字符串)
  const nonZhText = text.replace(zhCharRegex, ' ').trim()
  const enWords = nonZhText.split(/\s+/).filter((word) => word !== '') // 英文單詞數(shù)組
  const enLength = enWords.length // 英文單詞數(shù)

  // 4. 獲取對(duì)應(yīng)語(yǔ)速值
  let zhSpeed, enSpeed
  // 支持直接傳自定義語(yǔ)速值(如傳 250 表示中文250字/分鐘)
  if (typeof speedType === 'number') {
    zhSpeed = speedType
    enSpeed = speedType * 0.75 // 英文語(yǔ)速≈中文的75%(經(jīng)驗(yàn)值)
  } else {
    zhSpeed =
      speedConfig[`zh${speedType.charAt(0).toUpperCase() + speedType.slice(1)}`] ||
      speedConfig.zhNormal
    enSpeed =
      speedConfig[`en${speedType.charAt(0).toUpperCase() + speedType.slice(1)}`] ||
      speedConfig.enNormal
  }

  // 5. 計(jì)算總時(shí)長(zhǎng):中文時(shí)長(zhǎng) + 英文時(shí)長(zhǎng)(秒)
  const zhDuration = zhLength * (60 / zhSpeed) // 中文字?jǐn)?shù) × 單字時(shí)長(zhǎng)
  const enDuration = enLength * (60 / enSpeed) // 英文單詞數(shù) × 單詞時(shí)長(zhǎng)
  const totalDuration = zhDuration + enDuration

  // 6. 保留兩位小數(shù)返回
  return Number(totalDuration.toFixed(2))
}

使用示例

// // -------------------------- 使用示例 --------------------------
// // 示例1:純中文,默認(rèn)中速
// const text1 = '今天天氣很好'
// console.log(`"${text1}" 朗讀時(shí)長(zhǎng):${calculateTtsDuration(text1)} 秒`)
// // 輸出:"今天天氣很好" 朗讀時(shí)長(zhǎng):1.5 秒(5字 × 0.3秒/字)

// // 示例2:純中文,慢速
// console.log(`"${text1}" 慢速朗讀時(shí)長(zhǎng):${calculateTtsDuration(text1, { speedType: 'slow' })} 秒`)
// // 輸出:"今天天氣很好" 慢速朗讀時(shí)長(zhǎng):2.22 秒(5字 × 0.44秒/字)

// // 示例3:中英混合,快速
// const text2 = 'Hello 世界,今天吃了嗎?'
// console.log(`"${text2}" 快速朗讀時(shí)長(zhǎng):${calculateTtsDuration(text2, { speedType: 'fast' })} 秒`)
// // 中文:5字 × 0.22秒/字 = 1.1秒;英文:1詞 × 0.33秒/詞 = 0.33秒;總計(jì)≈1.43秒

// // 示例4:自定義語(yǔ)速(250字/分鐘)
// console.log(`"${text1}" 自定義語(yǔ)速時(shí)長(zhǎng):${calculateTtsDuration(text1, { speedType: 250 })} 秒`)
// // 輸出:"今天天氣很好" 自定義語(yǔ)速時(shí)長(zhǎng):1.2 秒(5字 × 0.24秒/字)

// // 示例5:空字符串
// console.log(`空字符串時(shí)長(zhǎng):${calculateTtsDuration('')} 秒`) // 輸出:0 秒

到此這篇關(guān)于JavaScript音視頻之通過(guò)輸入的文字自動(dòng)計(jì)算機(jī)讀時(shí)長(zhǎng)的文章就介紹到這了,更多相關(guān)JavaScript計(jì)算文本轉(zhuǎn)語(yǔ)音時(shí)長(zhǎng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 微信小程序?qū)崿F(xiàn)上傳圖片的功能

    微信小程序?qū)崿F(xiàn)上傳圖片的功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)上傳圖片的功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • js實(shí)現(xiàn)人民幣大寫(xiě)金額形式轉(zhuǎn)換

    js實(shí)現(xiàn)人民幣大寫(xiě)金額形式轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)人民幣大寫(xiě)金額形式轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • Javascript 多物體運(yùn)動(dòng)的實(shí)現(xiàn)

    Javascript 多物體運(yùn)動(dòng)的實(shí)現(xiàn)

    這篇文章主要介紹了Javascript 多物體運(yùn)動(dòng)的實(shí)現(xiàn),需要的朋友可以參考下
    2014-12-12
  • 微信小程序?qū)崿F(xiàn)多選功能

    微信小程序?qū)崿F(xiàn)多選功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)多選功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 前端請(qǐng)求后端接口報(bào)錯(cuò)blockedmixed-content的原因以及解決辦法

    前端請(qǐng)求后端接口報(bào)錯(cuò)blockedmixed-content的原因以及解決辦法

    blocked:mixed-content是一個(gè)安全警告,表示當(dāng)前頁(yè)面加載的資源存在混合內(nèi)容,這篇文章主要介紹了前端請(qǐng)求后端接口報(bào)錯(cuò)blockedmixed-content的原因以及解決辦法,需要的朋友可以參考下
    2025-06-06
  • javascript中alert()與console.log()的區(qū)別

    javascript中alert()與console.log()的區(qū)別

    我們?cè)谧鰆s調(diào)試的時(shí)候使用 alert 可以顯示信息,調(diào)試程序,alert 彈出窗口會(huì)中斷程序, 如果要在循環(huán)中顯示信息,手點(diǎn)擊關(guān)閉窗口都累死。而且 alert 顯示對(duì)象永遠(yuǎn)顯示為[object ]。 自己寫(xiě)的 log 雖然可以顯示一些 object 信息,但很多功能支持都沒(méi)有 console 好
    2015-08-08
  • JavaScript倒計(jì)時(shí)不準(zhǔn)的原因與精準(zhǔn)實(shí)現(xiàn)方法

    JavaScript倒計(jì)時(shí)不準(zhǔn)的原因與精準(zhǔn)實(shí)現(xiàn)方法

    JavaScript 中實(shí)現(xiàn)精確的倒計(jì)時(shí)是一個(gè)常見(jiàn)的挑戰(zhàn),其不準(zhǔn)確性主要源于 JavaScript 的單線程特性、瀏覽器的優(yōu)化策略以及設(shè)備本地時(shí)間可能被修改等因素,下面我會(huì)詳細(xì)解釋原因,并提供幾種方法來(lái)實(shí)現(xiàn)更精準(zhǔn)倒計(jì)時(shí)的策略,需要的朋友可以參考下
    2025-10-10
  • 微信網(wǎng)頁(yè)登錄邏輯與實(shí)現(xiàn)方法

    微信網(wǎng)頁(yè)登錄邏輯與實(shí)現(xiàn)方法

    這篇文章主要介紹了微信網(wǎng)頁(yè)登錄邏輯與實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04
  • javascript Demo模態(tài)窗口

    javascript Demo模態(tài)窗口

    不多介紹了,應(yīng)該見(jiàn)很多了,見(jiàn)過(guò)很多網(wǎng)站用的是Jquery的插件,個(gè)人覺(jué)得不夠靈活。
    2009-12-12
  • 微信小程序?qū)崿F(xiàn)文本輸入彈窗

    微信小程序?qū)崿F(xiàn)文本輸入彈窗

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)文本輸入彈窗,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評(píng)論

虎林市| 南雄市| 温州市| 巴林左旗| 阳西县| 美姑县| 华宁县| 高台县| 庆阳市| 顺昌县| 辽阳县| 鲜城| 龙川县| 盐池县| 宁强县| 钦州市| 淅川县| 突泉县| 奇台县| 青神县| 溧水县| 贵德县| 南昌市| 那坡县| 卢龙县| 齐齐哈尔市| 金华市| 顺义区| 调兵山市| 浦北县| 梧州市| 迁西县| 行唐县| 香港 | 新建县| 怀化市| 左贡县| 邢台县| 噶尔县| 双牌县| 句容市|