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

JavaScript音視頻之通過輸入的文字自動計算機讀時長

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

需求

通過輸入的文字,自動計算機讀時長

分析

核心設(shè)計思路

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

封裝函數(shù)

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

  // 2. 默認配置
  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ū)分中文/英文,計算有效長度
  // 中文:匹配中文字符(包括繁體),統(tǒng)計字數(shù);非中文按英文單詞統(tǒng)計
  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 // 中文字數(shù)

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

  // 4. 獲取對應(yīng)語速值
  let zhSpeed, enSpeed
  // 支持直接傳自定義語速值(如傳 250 表示中文250字/分鐘)
  if (typeof speedType === 'number') {
    zhSpeed = speedType
    enSpeed = speedType * 0.75 // 英文語速≈中文的75%(經(jīng)驗值)
  } 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. 計算總時長:中文時長 + 英文時長(秒)
  const zhDuration = zhLength * (60 / zhSpeed) // 中文字數(shù) × 單字時長
  const enDuration = enLength * (60 / enSpeed) // 英文單詞數(shù) × 單詞時長
  const totalDuration = zhDuration + enDuration

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

使用示例

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

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

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

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

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

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

相關(guān)文章

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

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

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

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

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

    Javascript 多物體運動的實現(xiàn)

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

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

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

    前端請求后端接口報錯blockedmixed-content的原因以及解決辦法

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

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

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

    JavaScript倒計時不準的原因與精準實現(xiàn)方法

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

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

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

    javascript Demo模態(tài)窗口

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

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

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

最新評論

南宁市| 武川县| 宣威市| 宁国市| 侯马市| 南漳县| 泸溪县| 阿荣旗| 荣昌县| 军事| 成武县| 海阳市| 台前县| 尤溪县| 滁州市| 扎鲁特旗| 杭州市| 容城县| 梁河县| 扶绥县| 东安县| 越西县| 华容县| 沛县| 开江县| 大连市| 东兰县| 富蕴县| 乐昌市| 漯河市| 闵行区| 鲁甸县| 体育| 威海市| 孟州市| 锡林浩特市| 屯留县| 麟游县| 达孜县| 西华县| 交城县|