C#文字转语音,实时播放以及mp3,wav文件保存

源码下载地址:https://download.csdn.net/download/horseroll/10500847

调用方法:

new SpeechDemo().Tts("要播放的内容");

调用后直接播放参数内容,mp3文件和wav默认保存在D盘,在方法中可以进行路径更改

封装的SpeechDemo类

using System;
using System.Collections.Generic;
using System.IO;
using Baidu.Aip.Speech;
using System.Web;
using NAudio.Wave;
using System.Media;

namespace 读取语音
{
    public class SpeechDemo
    {
        private readonly Asr _asrClient;
        private readonly Tts _ttsClient;
        //App ID: 7948081

        //API Key: 1G4dOtYNSCud03x5CKM77grtCPTky2z4

        //Secret Key: vluE1PUsviXuoXgNaADUKgfO7kl402YG
        public SpeechDemo()
        {
            _asrClient = new Asr("1G4dOtYNSCud03x5CKM77grtCPTky2z4", "vluE1PUsviXuoXgNaADUKgfO7kl402YG");
            _ttsClient = new Tts("1G4dOtYNSCud03x5CKM77grtCPTky2z4", "vluE1PUsviXuoXgNaADUKgfO7kl402YG");
        }

        // 识别本地文件
        //public void AsrData()
        //{
        //    var data = File.ReadAllBytes("语音pcm文件地址");
        //    var result = _asrClient.Recognize(data, "pcm", 16000);
        //    Console.Write(result);
        //}

        //// 识别URL中的语音文件
        //public void AsrUrl()
        //{
        //    var result = _asrClient.Recoginze(
        //        "http://xxx.com/待识别的pcm文件地址",
        //        "http://xxx.com/识别结果回调地址",
        //        "pcm",
        //        16000);
        //    Console.WriteLine(result);
        //}
        List<string> listdata = new List<string>();
        /// <summary>
        /// 语音文件的生成
        /// </summary>
        /// <param name="str">需要生成的语音字符</param>
        /// <returns></returns>
        public string Tts(string str)
        {
            lock (this)
            {
                string pathwave = @"D:\3.mp3";
                // 可选参数
                var option = new Dictionary<string, object>()                                                            
                {
                    {"spd", 5}, // 语速
                    {"vol", 10}, // 音量
                    {"per", 0}  // 发音人,4:情感度丫丫童声
                };
                var result = _ttsClient.Synthesis(str, option);
                if (result.ErrorCode == 0)  // 或 result.Success
                {
                    //  System.Web.HttpApplication.
                    File.WriteAllBytes(pathwave, result.Data);
                    var mp3FileName = pathwave;
                    var outputFileName = mp3FileName.Substring(0, mp3FileName.Length - 3) + "wav";
                    Mp3ToWav(mp3FileName, outputFileName);//mp3转wav文件
                    SoundPlayer player = new SoundPlayer();//进行语音文件播放
                    player.SoundLocation = outputFileName;
                    player.Load(); //同步加载声音  
                    player.Play(); //启用新线程播放  
                }
                return "";
            }
        }
        /// <summary>
        /// MP3文件转WAV
        /// </summary>
        /// <param name="mp3File">MP3文件路径</param>
        /// <param name="outputFile">WAV文件输出目录</param>
        /// <returns></returns>
        public static string Mp3ToWav(string mp3File, string outputFile)
        {
            using (Mp3FileReader reader = new Mp3FileReader(mp3File))
            {
                var newFormat = new WaveFormat(8000, 8, 1); // 8kHz, 8bit
                using (var conversionStream = new WaveFormatConversionStream(newFormat, reader))
                {
                    WaveFileWriter.CreateWaveFile(outputFile, conversionStream);
                }
                return outputFile;
            }
        }

        /// <summary>
        /// 将.mp3或者其他.wav文件转为16kHz,16bit的.wav(by NAudio)
        /// </summary>
        /// <param name="filePath">转换前音频文件的路径</param>
        /// <returns>转换后音频文件的路径</returns>
        public static string Convert2Wav(string filePath)
        {
            string directoryName = Path.GetDirectoryName(filePath);
            string fileName = Path.GetFileName(filePath);
            string tempDir = directoryName + "\\temp" + DateTime.Now.ToString("yyyyMMddHHmmss") + "\\";

            if (!Directory.Exists(tempDir))
            {
                Directory.CreateDirectory(tempDir);
            }

            if (filePath.EndsWith(".wav", StringComparison.CurrentCultureIgnoreCase))
            {
                using (var reader = new WaveFileReader(filePath))
                {
                    var newFormat = new WaveFormat(8000, 8, 1); // 8kHz, 8bit
                    using (var conversionStream = new WaveFormatConversionStream(newFormat, reader))
                    {
                        WaveFileWriter.CreateWaveFile(tempDir + fileName, conversionStream);
                    }
                }
            }
            else if (filePath.EndsWith(".mp3", StringComparison.CurrentCultureIgnoreCase))
            {
                using (Mp3FileReader reader = new Mp3FileReader(filePath))
                {
                    var newFormat = new WaveFormat(8000, 8, 1); // 8kHz, 8bit
                    using (var conversionStream = new WaveFormatConversionStream(newFormat, reader))
                    {
                        WaveFileWriter.CreateWaveFile(tempDir + fileName, conversionStream);
                    }
                }
            }

            return tempDir + fileName;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/horseroll/article/details/80817735