You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何借助Bing Speech API在Azure中创建基于TXT的有声书?

Azure 生成有声书(TXT输入)的通用解决方案

嘿,这个问题我之前帮朋友梳理过,Azure这边完全有对应的通用方案来实现类似AWS Polly+Batch的自动化有声书生成!针对原Bing Speech API(现在已经整合到Azure Speech Service中)的1024字符限制,咱们可以通过「拆分文本+批量调用+音频合并」的思路搞定,具体步骤和进阶方案如下:

核心实现思路

Azure Speech Service的文本转语音(TTS)单请求确实有字符数上限,但我们可以把大TXT文件拆分成语义完整的小片段,批量生成音频后再合并,同时还能借助Azure的其他服务实现全流程自动化。

1. 拆分TXT为合规文本片段

首先写个简单脚本(以Python为例),把大TXT拆成每个不超过1024字符的片段,关键是要保证语义完整——比如按段落、句号、换行符拆分,别把完整句子硬生生砍断:

def split_text_into_chunks(text, max_chunk_size=1024):
    chunks = []
    current_chunk = ""
    # 按句号拆分句子,尽量保证语义完整
    for sentence in text.split('. '):
        if len(current_chunk) + len(sentence) + 1 <= max_chunk_size:
            current_chunk += sentence + '. '
        else:
            chunks.append(current_chunk.strip())
            current_chunk = sentence + '. '
    # 把最后一段加入列表
    if current_chunk:
        chunks.append(current_chunk.strip())
    return chunks

# 读取本地TXT文件
with open("your_book.txt", "r", encoding="utf-8") as f:
    book_text = f.read()

text_chunks = split_text_into_chunks(book_text)

2. 批量调用Azure Speech TTS生成音频

用Azure Speech Service的SDK循环处理每个文本片段,生成独立音频文件。先安装Python SDK:

pip install azure-cognitiveservices-speech

然后编写批量生成代码:

import azure.cognitiveservices.speech as speechsdk

# 替换成你的Azure Speech Service密钥和区域
speech_key = "你的服务密钥"
service_region = "你的服务区域(比如eastus)"
speech_config = speechsdk.SpeechConfig(subscription=speech_key, region=service_region)
# 选择神经语音,比如中文女声xiaoxiao
speech_config.speech_synthesis_voice_name = "zh-CN-XiaoxiaoNeural"

for i, chunk in enumerate(text_chunks):
    audio_config = speechsdk.audio.AudioOutputConfig(filename=f"audio_chunk_{i}.wav")
    synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=audio_config)
    result = synthesizer.speak_text_async(chunk).get()
    
    if result.reason == speechsdk.ResultReason.SynthesizingAudioCompleted:
        print(f"已生成音频片段 {i+1}")
    else:
        print(f"生成片段 {i+1} 失败: {result.reason}")

3. 合并所有音频片段

最后用音频工具把零散的音频文件合并成完整有声书,推荐两种方式:

  • ffmpeg命令行工具(简单高效):
# 先生成包含所有音频路径的列表文件
ls audio_chunk_*.wav > audio_list.txt
# 合并成完整音频
ffmpeg -f concat -safe 0 -i audio_list.txt -c copy full_audiobook.wav
  • 用Python的pydub库(代码可控):
from pydub import AudioSegment

full_audio = AudioSegment.empty()
for i in range(len(text_chunks)):
    chunk_audio = AudioSegment.from_wav(f"audio_chunk_{i}.wav")
    full_audio += chunk_audio

full_audio.export("full_audiobook.wav", format="wav")

自动化进阶(类似AWS Batch)

如果想要实现全流程自动化(比如上传TXT到存储后自动生成有声书),可以组合Azure的这些服务:

  • Azure Blob Storage:存放输入TXT和输出音频文件
  • Azure Functions:当Blob Storage有新TXT上传时,自动触发拆分、TTS调用、音频合并的逻辑
  • Azure Logic Apps:可视化编排整个工作流,不用写太多代码就能实现「TXT上传→拆分→TTS生成→音频合并→存储成品」的全流程

注意事项

  • 确保你的Azure Speech Service资源有足够的调用额度,避免触发速率限制
  • 拆分文本时尽量保证语义完整,提升有声书的收听体验
  • 优先选择Azure的神经语音(Neural Voices),生成的音频更自然流畅

内容的提问来源于stack exchange,提问作者moarra

火山引擎 最新活动