[免费配音软件]语音合成,让阿里云小姐姐为你的视频配音


轻松实现语音合成,让阿里云小姐姐为你的视频配音
本次调用的是阿里云的语音合成SDK,调用接口进行语音合成。
下面来看看具体实现步骤以及两种利用python进行语音的代码。

一、注册登录阿里云获取appkey

1.登入阿里云:https://www.aliyun.com/
2.需要实名认证才行哟
3.点击控制台
4.在搜索界面搜索智能语音交互,进入智能语音交互控制台

5.点击进入后点击我的项目–创建项目


6.随便输入项目名词和描述即可

7.即可得到项目appkey

8.点击总览,点击获取AccessToken

在其中还有很多音频可以试听,可以选择自己喜欢的声音。
这是语音合成的接口说明,不同的声音又不用的voice参数值。
https://help.aliyun.com/document_detail/84435.html?spm=a2c4g.11186623.6.591.73831e0duk4FNT

二、普通方式获得语音合成

通过将网址放入浏览器获取语音,修改自己的appkey和accessToken和需要语音合成的语句即可。

https://nls-gateway.cn-shanghai.aliyuncs.com/stream/v1/tts?appkey=你的appkey&token=你的accesstoken&format=mp3&voice=Aixia&speech_rate=0&volume=100&text=你好呀,小姐姐

下面是各个参数说明

将你的语句修改即可,这种方式最多300个字符,如果需要更多的话,就需要利用python来解决了。

配音软件已开发成功

网址:https://blog.csdn.net/LeeGe666/article/details/106604378

三、利用python调用SDK进行语音合成

有两种方式

1.官方SDK

第一种是调用阿里云SDK,大家可以到https://help.aliyun.com/document_detail/120699.html?spm=a2c4g.11186623.6.594.3e86259esNOsnh中了解详情及配制相关包。
下面铺上代码:

# -*- coding: utf-8 -*-
import threading
import ali_speech
from ali_speech.callbacks import SpeechSynthesizerCallback
from ali_speech.constant import TTSFormat
from ali_speech.constant import TTSSampleRate

class MyCallback(SpeechSynthesizerCallback):
    # 参数name用于指定保存音频的文件
    def __init__(self, name):
        self._name = name
        self._fout = open(name, 'wb')
    def on_binary_data_received(self, raw):
        print('MyCallback.on_binary_data_received: %s' % len(raw))
        self._fout.write(raw)
    def on_completed(self, message):
        print('MyCallback.OnRecognitionCompleted: %s' % message)
        self._fout.close()
    def on_task_failed(self, message):
        print('MyCallback.OnRecognitionTaskFailed-task_id:%s, status_text:%s' % (
            message['header']['task_id'], message['header']['status_text']))
        self._fout.close()
    def on_channel_closed(self):
        print('MyCallback.OnRecognitionChannelClosed')

def process(client, appkey, token, text, audio_name, voice):
    callback = MyCallback(audio_name)
    synthesizer = client.create_synthesizer(callback)
    synthesizer.set_appkey(appkey)
    synthesizer.set_token(token)
    synthesizer.set_voice(voice)
    synthesizer.set_text(text)
    synthesizer.set_format(TTSFormat.WAV)
    synthesizer.set_sample_rate(TTSSampleRate.SAMPLE_RATE_16K)
    synthesizer.set_volume(50)
    synthesizer.set_speech_rate(0)
    synthesizer.set_pitch_rate(0)
    try:
        ret = synthesizer.start()
        if ret < 0:
            return ret
        synthesizer.wait_completed()
    except Exception as e:
        print(e)
    finally:
        synthesizer.close()

def process_multithread(client, appkey, token, number):
    thread_list = []
    for i in range(0, number):
        text = "这是线程" + str(i) + "的合成。"
        audio_name = "sy_audio_" + str(i) + ".wav"
        thread = threading.Thread(target=process, args=(client, appkey, token, text, audio_name))
        thread_list.append(thread)
        thread.start()
    for thread in thread_list:
        thread.join()

if __name__ == "__main__":
    client = ali_speech.NlsClient()
    client.set_log_level('INFO')
    voice = 'Aixia'
    appkey = '你的appkey'
    token = '你的token'
    text = "哼!都怪你,也不哄哄人家,人家超想哭的,捶你胸口,大坏蛋!捶你胸口你好讨厌!要抱抱嘤嘤嘤哼,人家拿小拳拳捶你胸口!大坏蛋,打死你..."
    audio_name = 'audio.mp3'
    process(client, appkey, token, text, audio_name, voice)
    # 多线程示例
    # process_multithread(client, appkey, token, 2)

2.访问url获取

这种方式唯一的好处就是不用安装SDK,pip中有requests即可。
这里我自己做了一个根据句号的中文字符串切割算法,限制结束符为句号"。",同时一段文字只能小于300字符(免费的情况下),进行循环获取每段语音的音频文件(voice1.mp3, voice2.mp3,·····)。
代码如下:

# encoding:utf-8
import requests
from requests.exceptions import RequestException
import urllib.parse
import urllib.request
import re
import os

headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"}


def request_url(url, name):
    response = requests.get(url, headers=headers)
    print('状态码: ' ,response.status_code)
    try:
        if response.status_code == 200:
            download_voice(url, name)
        return None
    except RequestException:
        return None


def download_voice(url, name):
    if not os.path.exists('./audioFiles'):
        os.makedirs('./audioFiles')
    file_path = r'./audioFiles/{}.mp3'.format(name)
    print('正在下载:', name, '.mp3\n')
    urllib.request.urlretrieve(url, file_path)
    logging.info(name, '.mp3下载完成!!!!!!!!!')


def not_empty(s):
    return s and s.strip()


def cut_text(text, length):
    text = re.sub('[\r\n\t]', '', text)
    text_array = list(filter(not_empty, text.split('。')))
    text_i = [0]
    text_len = 0
    list_1 = []
    for i in range(len(text_array)):
        list_1.append(i)
        text_len = text_len + len(text_array[i])
        # print(text_len)
        if text_len > length:
            text_len = 0
            text_len = text_len + len(text_array[i])
            # print(text_len)
            text_i.append(i-1)
            list_1.clear()

    if text_i[-1] < (len(text_array) -1):
        text_i.append(len(text_array) -1)

    # print(text_i)
    new_text_i = []
    for i in range(len(text_i) - 1):
        list1 = []
        for a in range(text_i[i] + 1, text_i[i+1] + 1):
            list1.append(a)
        new_text_i.append(list1)
    new_text_i[0].insert(0, 0)
    # print(new_text_i)

    new_text_array = []
    for t in new_text_i:
        x = ''
        for t1 in range(len(t)):
            x += text_array[t[t1]] + '。'
        new_text_array.append(x)

    return new_text_array


def get_voice(appkey, token, voice, speech_rate, format, volume, file_name, text, id):
    url = 'https://nls-gateway.cn-shanghai.aliyuncs.com/stream/v1/tts?appkey=' + appkey \
          + '&token=' + token + '&format=' + format + '&voice=' + voice + '&speech_rate=' + \
          str(speech_rate) + '&volume=' + str(volume) + '&text=' + text
    request_url(url, file_name + str(id))


def get_network():
    response = requests.get('https://www.baidu.com')
    return response.status_code


def get_token_expire(appkey, token):
    url = 'https://nls-gateway.cn-shanghai.aliyuncs.com/stream/v1/tts?appkey=' + appkey \
          + '&token=' + token + '&text=你好'
    response = requests.get(url, headers=headers)
    return response.status_code


def compose(appkey, token, voice, speech_rate, format, volume, file_name, text):
    if get_network() == 200:
        res = get_token_expire(appkey, token)
        if res != 400:
            if len(text) < 300:
                get_voice(appkey, token, voice, speech_rate, format, volume, file_name, urllib.parse.quote(text), 0)
            else:
                text_array = cut_text(text, 300)
                # print(text_array)
                for id in range(len(text_array)):
                    get_voice(appkey, token, voice, speech_rate, format, volume, file_name, urllib.parse.quote(text_array[id]), id)
            return 'success'
        else:
            return 'token expired'

    else:
        return 'network fail'


if __name__ == '__main__':
    voice = 'Aixia'
    appkey = 'VNSQETOK5RRVSeRH'
    token = '0f3947bec58446c581dc46544bb3224e'
    speech_rate = -200
    format = 'mp3'
    volume = 100
    file_name = 'audio'
    # text = '''岁月匆匆而过,悄悄回首,我已走进小学生活近六年了,念及往事,不生唏嘘。那人生道路上的无数个第一次就像波涛起伏的海浪,荡漾在我的心头。是那样的亲切而有熟悉,又是那样的美好而和谐。第一次上台表演的经历就一直使我不能忘怀。那是我在五岁第一次上台时,在上台前,我的心忐忑不安,总是无法调整出好的情绪。开始表演了,强烈的镁光灯直射下来,就像一双犀利的眼睛,盯着我喘不过气来。我就更紧张了。当我看到台下这么多人的目光聚集在我的身上,原来就担心的我一下子忘了自己的动作,傻呆呆的站在幕布旁。那一刹那,我听到的音乐就像奔驰的野马,嗡嗡作响;镁光灯则是一把锋利而尖锐的箭,射进了我的内心深处。好在这时,老师在幕布旁不断地鼓励我,小声地说:“你一定能行!”我深深的吸了一口气,很快镇静下来。我微笑着自信地走上了舞台。一上台,我就好像置于一池碧水中,身体变得那样的舒展,跳的每一个动作都是那么娴熟而自然。那音乐如潺潺的溪水,镁光灯也如正午的暖阳。我的舞姿犹如一只傲气的白天鹅在湖面上游动;又像一缕纯洁的阳光,干净而温暖;更像一直蓬勃的向日葵,正努力地向上生长。终于,我在观众们的掌声中退了场。事后,我一直在想:有自信不一定能成功。但是,如果你充满自信,就有成功的希望。自信是飞向蓝天的翅膀,是航行的船桨。在任何时候,自信都会助你一臂之力,助你到达成功的彼岸。让自己成为一个充满自信的人吧!我爱第一次,他教会了我成功的秘笈:充满自信,挑战自信。*'''
    text = '''是这样的,欠款相关的情况呢,可以在您的支付宝查看,您记得处理一下这个事情。'''
    res = compose(appkey, token, voice, speech_rate, format, volume, file_name, text)
    print(res)

总结

通过语音合成,经常做视频配音的人压力可以小点了,阿里云的语音技术拟人化也比较高,声音也比较甜美,听起来也舒服,也不会出错,确实是一种很好的配音选择。
用第二种方法文本的字数都没有限制,大家可以放心使用。

token隔几个小时就会失效,尽量自己注册阿里云账户获取自己的!!!

这里是看到b站@JOKER鹏少的视频来的灵感,看到有这么好的语音合成技术,便把免费语音合成的代码写出来与大家分享。
同时也可以到知乎@NH4L看看语音合成的具体效果:https://zhuanlan.zhihu.com/p/123930042
参考链接:https://help.aliyun.com/document_detail/120699.html?spm=a2c4g.11174283.6.594.59e87275VzZhum
https://www.bilibili.com/video/BV1MV411f7Uc

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
当前,市场上有很多通过AI人工智能技术实现文字转语音的配音软件可供下载。这些软件利用先进的语音合成技术,能够将文字准确、清晰地转化为自然流畅的人声发音。这种技术的应用范围相当广泛,比如可以用于配音电影、广告、动画、游戏等各种媒体制作中。 真人发音效果的AI人工智能文字转语音配音软件,通常具有以下特点和优势。首先,这些软件能够模拟真实人声,表现出非常自然的发音效果,几乎难以与真人声音区分。其次,配音员可以通过调整软件设置,实现个性化的发音风格和语调,以满足不同项目的需求。再者,这些软件通常带有优秀的语音合成引擎和智能音频处理技术,能够准确还原各种语音细节,提供高质量的音效。此外,AI人工智能技术使得这些软件具备较强的学习能力和自适应能力,可以根据用户的反馈和数据不断优化发音效果。 为了获得这样的AI人工智能文字转语音配音软件,用户可以在各大应用商店、网站或专业软件平台上进行搜索和下载。一般来说,这些软件提供免费试用或付费购买的方式,用户可以根据自己的需求和预算选择适合的软件。在选择软件时,用户可以参考其他用户的评价和专业评测,选择声音质量好、功能强大且操作便捷的软件。 总结来说,AI人工智能文字转语音配音软件借助先进技术提供真实、优质的发音效果,为配音工作提供了便利和可能性。随着AI技术的不断发展,相信这类软件的性能将越来越出色,为配音员和媒体制作人士带来更好的体验和效果。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值