精华内容
下载资源
问答
  • Android本人想实现一个像唱吧那样的放着伴奏进行录音,最后合成一个音频的例子。应该学习哪些知识,最好给一个demo
  • 背景:IOS中实现视频和语音的同步播放(视频静音情况下),安卓实现不了audio与video的同时播放,所以出此下策,如果能实现求告知! ... 技术实现步骤: 1.后台通过微信多媒体接口...把下载的语音合成一个语音 3...

    背景:IOS中实现视频和语音的同步播放(视频静音情况下),安卓实现不了audio与video的同时播放,所以出此下策,如果能实现求告知!

    因为安卓微信用的x5 video标签与原来的video不同,在聊天框输入debugx5.qq.com 点击清除tbs后,安卓浏览器可同步播放,不利于客户操作。

    技术实现步骤:

    1.后台通过微信多媒体接口下载多个音频文件

    2。把下载的语音合成一个语音

    3.把合成的语音添加到视频中

    代码:

    1.下载

                    List<string> pathList = new List<string>(); //下载的录音文件地址集合
                    for (int i = 0; i < mediaList.Length; i++)
                    {
                        string stUrl = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=" + Token + "&media_id=" + mediaList[i];//mediaList是微信录音upload的id集合
                        string savepath = Path.Combine(basePath, "part", openid + i.ToString() + ".amr"); //basePath 是服务器路径 openid + i 的方式区分第几段录音
                        HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(stUrl);
                        req.Method = "GET";
                        using (WebResponse wr = req.GetResponse())
                        {
                            HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse();
                            strpath = myResponse.ResponseUri.ToString(); 
                            WebClient mywebclient = new WebClient();
                            try
                            {
                                //下载多个录音文件
                                mywebclient.DownloadFile(strpath, savepath); //下载到savepath
                                pathList.Add(savepath); 记录集合,为了之后的合成一段录音
                            }
                            catch (Exception ex)
                            {
                                Log.Error("bug1", ex.ToString().Substring(0, 2000));
    
                            }
                        }
                    }

    2.拼接

    微信接口下的都是amr文件,用ffmpeg转成mp3(应该可以不转直接放入视频中,我是因为一开始打算让video+audio同步播放所以才转成mp3的,后来为了实现功能这部分就没改)

    类:

    public class CombineFile
        {
            private List<string> files = new List<string>();
            // 需要合并的文件
            public List<string> Files
            {
                get
                {
                    return files;
                }
            }
            public CombineFile()
            {
            }
            public CombineFile(List<string> filePath)
            {
                this.files = filePath;
            }
            public void Combine(string fullName)
            {
                if (!(this.files.Count > 0))
                {
                    throw new Exception("文件列表为空");
                }
                foreach (string item in this.files)
                {
                    if (!File.Exists(item))
                    {
                        throw new Exception(string.Format("文件{0}不存在", item));
                    }
                }
                byte[] buffer = new byte[1024 * 100];
                using (FileStream outStream = new FileStream(fullName, FileMode.Create))
                {
                    int readedLen = 0;
                    FileStream srcStream = null;
                    for (int i = 0; i < files.Count; i++)
                    {
                        srcStream = new FileStream(files[i], FileMode.Open);
                        while ((readedLen = srcStream.Read(buffer, 0, buffer.Length)) > 0)
                        {
                            outStream.Write(buffer, 0, readedLen);
                        }
                        srcStream.Close();
                    }
                }
            }
        }

    使用方法:

    //list是上面pathList 把string[]转成list<string>放进去
      CombineFile cf = new CombineFile(list);
    //
      cf.Combine("合成的文件路径"); 

    3.转换

    filename是原地址,targetFilName是生成的目标地址  少了个e。。

    G:\toolsZ\ffmpeg64\bin是我服务器的ffmpeg文件地址,改成你的

    下载地址:https://ffmpeg.zeranoe.com/builds/ 如果是windows的选中间windows 64 或32位的

    public void ConvertToAmr(string fileName, string targetFilName)
            {        
                string c1 = @"G:\toolsZ\ffmpeg64\bin" + @"\ffmpeg.exe -i " + fileName + "  -codec:a libmp3lame -qscale:a 320k  " + targetFilName;
                c1 = c1.Replace("//", "\\").Replace("/", "\\");
    
                string c2 = @"G:\toolsZ\ffmpeg64\bin" + @"\ffmpeg.exe -i F:\pro_other\file\DubIn\base\defaultN.mp4 -i " + targetFilName + " " + targetFilName.Replace("mp3", "mp4").Replace("//", "\\").Replace("/", "\\");
                Cmd(c1 + " && " + c2);
                //Thread.Sleep(2000);
                //Cmd1(c2);
            }

    c1的意思是 把原来合成的amr文件转成mp3,码率参考https://www.cnblogs.com/coolbear/p/8758527.html

    c2的意思是把生成的mp3加入到mp4中 defaultN.mp4是我要合成的视频模版,改成你们用的固定的或者对应的。

    cmd中“&&” 代表前面一句完成后执行下一句

    private void Cmd(string c1)
            {
                try
                {
                    Process[] myproc = Process.GetProcesses();
                    foreach (Process item in myproc)
                    {
                        if (item.ProcessName == "cmd")
                        {
                            item.Kill();
                        }
                    }
    
                    System.Diagnostics.Process process = new System.Diagnostics.Process();
                    process.StartInfo.FileName = "cmd.exe";
                    process.StartInfo.UseShellExecute = false;
                    process.StartInfo.CreateNoWindow = true;
                    process.StartInfo.RedirectStandardOutput = true;
                    process.StartInfo.RedirectStandardInput = true;
                    process.Start();
                    process.StandardInput.WriteLine(c1 + "&& exit");
                    process.StandardInput.AutoFlush = true;
                    //process.StandardInput.WriteLine("exit");
                    StreamReader reader = process.StandardOutput;//截取输出流
                    Log.Info("end", "end1");
                    //process.StandardInput.Flush();
                    //process.StandardInput.Close();
                    process.WaitForExit(10000);
                    process.Close();
                    Log.Info("end", "end2");
                    //process.Kill();
                    //Log.Info("end", "end3");
    
    
                }
                catch(Exception ex)
                {
                    Log.Info("cmdBUG","cmdBUG");
                    Log.Info("cmdBUG",ex.ToString());
                }
            }

     

    展开全文
  • python把千万个语音文件合成一

    千次阅读 2019-11-21 21:13:16
    比如,某天要把100个pcm格式的音频文件合成一个连续的整体。 妈耶,一个一个拖到软件里面操作简直要命。万一下次是一千个、一万个呢? 科技因为懒人才进步,所以,今天用知识来解放双手。 直接上代码了: # ...

    (本文已经同步到公众号)

    讲真,世界上奇葩的事情真多。比如,某天要把100个pcm格式的音频文件合成一个连续的整体。

    妈耶,一个一个拖到软件里面操作简直要命。万一下次是一千个、一万个呢?

    科技因为懒人才进步,所以,今天用知识来解放双手。

    直接上代码了:

    # python 音频文件处理
    
    from pydub import AudioSegment
    import os
    import shutil
    import time
    #import sort
    
    AudioSegment.converter = "D:\\Program Files (x86)\\ffmpeg-4.1-win64-static\\bin\\ffmpeg.exe" 
    
    now_dir = os.getcwd()   #当前文件夹
    new_dir = now_dir + '\\voicepcm\\'  #语音文件所在文件夹
    list_voice_dir = os.listdir('./voicepcm')
    list_voice_dir.sort(key=lambda x:int(x[:-4]))  #倒着数第四位'.'为分界线,按照‘.'左边的数字从小到大
    
    
    def voice_unit():
        n=0
        
        #list_voice_dir_length = len(list_voice_dir)
        playlist = AudioSegment.empty()
        second_5_silence = AudioSegment.silent(duration=5000)  #产生一个持续时间为5s的无声AudioSegment对象
        for i in list_voice_dir:
            #sound = AudioSegment.from_wav(list_voice_dir[n])
            #sound = AudioSegment.from_file(new_dir+list_voice_dir[n],format="wav") #  wav
            #raw pcm  # 2 byte (16 bit) samples 采样sample, channels = 1为单声道,2为立体声
            sound = AudioSegment.from_file(new_dir+list_voice_dir[n],sample_width=2,frame_rate=16000,channels=1)
            playlist = playlist + sound + second_5_silence
    
            n+=1
        #playlist.export(new_dir+'playlist.pcm',format="pcm") #wav
        playlist.export(new_dir+'playlist100.pcm') 
        print("语音合成完成,合成文件放在:",new_dir,"目录下")        
    def testlist():
        n=0  
        for i in list_voice_dir:
            voicename = list_voice_dir[n]
            print("对比文件顺序是否改变:",voicename)
            n+=1
    
    def main():
        try:
            os.remove(new_dir+'playlist.pcm')
        except:
            print("")
        testlist()
        voice_unit()
    
    if __name__ == "__main__":
        main()

    将文件夹中 100 个 pcm 格式的语音文件合成一个,同时每个语音文件中有 5 秒的空白间隔。这些参数都是可以调的。

    此代码仅仅支持 pcm 音频文件,更多的比如 wav,mp3格式下次继续分享。

    代码的注释还是很详细。

    白浪介绍:

    (1)关于射频、微波、天线、无线通信、智能硬件、软件编程、渗透安全、人工智能、区块链,Java、Android、C/C++、python等综合能力的培养提升。

    (2)各种学习资料、学习软件分享。

    1. 长按扫码关注公众号(Geekxiaobai)

                                   

    2. 如在后台发送“Python高级编程”“Python Graphics”或者“2003”,即可免费获得电子书籍。仅供学习之用。

    3. 扫码关注后,查看往期内容,会有各种资料惊喜等着你来拿哦!  

      想要更多相关学习资料,可以在文章后面留言哦,后期将会根据留言需求免费分享学习资料哦。

    ========******=========******========******=========******==========

     

    展开全文
  • 怎么把几音频文件合并成一个

    千次阅读 2019-08-13 10:36:11
    有时当我们在录制了几音频文件,但是因为某种需求现在要将这几音频合并在一起变成个完整的音频文件,这时应该怎么办呢?其实方法还是简单的,安装款音频转换器就能轻松解决此问题。 操作步骤: 首先,...

    有时当我们在录制了几段音频文件,但是因为某种需求现在要将这几段音频合并在一起变成一个完整的音频文件,这时应该怎么办呢?其实方法还是简单的,安装一款音频转换器就能轻松解决此问题。

    操作步骤:

    首先,我们需要把录制好的音频文件保存到电脑当中,然后打开软件,也就是刚刚所说的音频转换器,打开软件之后,我们可以看到软件的主界面。

    然后点击上方导航栏上的“音频合并”就可以添加需要合并的视频了。再点击界面下方的“添加文件”和“添加文件夹”将我们需要合并的音频文件给导入进来。

    此时这些音频可以按照自己的意愿更改合并顺序位置,只要点击界面中的“上移”和“下移”即可快速做到。

    接着在每个音频后面有个“编辑”里面有“平均分割”、“时间分割”、“手动分割”三种方法,我们可以任意选择一种方法来分割我们的音频,当所以音频分割好后,我们点击“确定”来保存我们的更改。

    设置完成后点击软件右下角的“开始合并”按钮,此时就可以看到文件合并的进度条了,只需要等待音频进度条达到100%后我们就可以欣赏合并好的音频了。

    软件的操作就是这么简单,不过你有多少音频文件,使用这款软件都可以非常完美的把这些音频给合并成完整的一个,对这类软件感兴趣的朋快去安装试试吧。

    展开全文
  • Android中的录音与音频合成

    千次阅读 2018-01-18 11:07:10
    原文:...你可以使用Audio Unit 和它提供的方法但是你想要个类似的功能在Android上?Android的音频框架层并不支持这个。所以我用了几天时间在Google群和StackOverflow上边,去阅读上边的未答

    原文:http://blog.csdn.net/u013676055/article/details/50440893

    IOS的框架层有许多有趣的特性,使得它可以将多条音轨合并成一条音轨。你可以使用Audio Unit 和它提供的方法

    但是你想要一个类似的功能在Android上?Android的音频框架层并不支持这个。所以我用了几天时间在Google群和StackOverflow上边,去阅读上边的未答问题、搜索一些谷歌手机上边类似的方法或由第三方开发并发布的贡献者和外部开发者。

    但是我发现并没有什么可用的信息。

    所以我不得不去研究这些问题和工具来解决这个问题。首先我们先来看看平台提供的播放文件的发展性。

     

    Android 音频框架的音频播放层包含这些主要的类:

    • MediaPlayer:主要播放压缩过的文件(m4a,mp3…)和没有被压缩过但是格式化的(wav)。不能同时播放多个文件。
    • SoundPool:可以同时播放多个原生声音文件。
    • AudioTrack:可以当做SoundPool使用,但是同时播放多个文件时需要开启线程。

    我发现AudioTrack在播放未压缩文件时表现的很好,如果你想同时播放多个文件,你可以创建不同的线程然后开始异步播放。

    不幸的是这会出现一些问题:有时候你会发现在播放音频之前会有一些延迟,这导致这个方法不可行。

    另一个想法是在播放之前将音频混合。这个还有一个好处:你会获得一个已经混合好的混音文件。如果你用SoundPool实例混音,当你播放的时候,你就只能将音频输出到硬件上(耳机或者扬声器),而不能将之重定向到文件描述。

    就像最开始提及的,这个问题还没有解决方案。但是事实上,我们会看见一些琐碎的解决方案。

    在研究具体两个音频如何混合到一起之前,我们先看一下在Android上的录音。主要的类有:

    • MediaRecorder:MediaPlayer的兄弟类,可以录制不同个是的一品文件(arm,aac)
    • AudioRecord:AudioTrack的兄弟类。它录制PCM格式的音频。它是用于CD的未压缩数字音频格式,和wav很相似。
    • AudioRecord 提供了所有我们想要控制的东西,我们可以特定它的频率,声道数量等等

    [java]  view plain  copy
    1. public static final int FREQUENCY = 44100;  
    2. public static final int CHANNEL_CONFIGURATION = AudioFormat.CHANNEL_CONFIGURATION_MONO;  
    3. public static final int AUDIO_ENCODING =  AudioFormat.ENCODING_PCM_16BIT;  
    4.   
    5.   
    6.     private void recordSound(){  
    7.         File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/"+RECORDE                              D_FILENAME);  
    8.         // Delete any previous recording.  
    9.         if (file.exists())  
    10.             file.delete();  
    11.   
    12.         try {  
    13.             file.createNewFile();  
    14.   
    15.             // Create a DataOuputStream to write the audio data into the saved file.  
    16.             OutputStream os = new FileOutputStream(file);  
    17.             BufferedOutputStream bos = new BufferedOutputStream(os);  
    18.             DataOutputStream dos = new DataOutputStream(bos);  
    19.   
    20.   
    21.   
    22.             // Create a new AudioRecord object to record the audio.  
    23.             int bufferSize = AudioRecord.getMinBufferSize(FREQUENCY, CHANNEL_CONFIGURATION, AUDIO_                                   ENCODING);  
    24.             AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, FREQUENCY, CH                                            ANNEL_CONFIGURATION, AUDIO_ENCODING, bufferSize);  
    25.   
    26.             short[] buffer = new short[bufferSize];  
    27.             audioRecord.startRecording();  
    28.   
    29.   
    30.             while (isRecording) {  
    31.                 int bufferReadResult = audioRecord.read(buffer, 0, bufferSize);  
    32.                 for (int i = 0; i < bufferReadResult; i++)  
    33.                 dos.writeShort(buffer[i]);  
    34.             }  
    35.   
    36.             audioRecord.stop();  
    37.             audioRecord.release();  
    38.             dos.close();  
    39.         } catch (FileNotFoundException e) {  
    40.             e.printStackTrace();  
    41.         } catch (IllegalArgumentException e) {  
    42.             e.printStackTrace();  
    43.         } catch (IllegalStateException e) {  
    44.             e.printStackTrace();  
    45.         } catch (IOException e) {  
    46.             e.printStackTrace();  
    47.         }  
    48.   
    49.     }  


    在上边贴出来的代码段里,有一个简单的函数,可以用来录44.1 khz 16位PCM音频并保存在SD卡上。这个方法是阻塞的,所以必须在次级线程上运行;它会一直录制,直到isRecording变成false(比如超时或者用户点击按钮停止)

    现在是最有趣的部分了:怎么能让两个声音混合到一起呢?

    如果两个数字音频有同样的特性(同样的声道数,同样的采样率等)那么将他们混合是比较容易的。这是最简单的也是这篇文章中我唯一涵盖的方案。
    在这里每个样本是一个16位数字。在java中一个短整型可以用来代表16位数字,事实上AudioRecord和AudioTrack都是以short数组工作的,它构成了我们的声音。

    这是用来合成三个音频的主要方法:
    [java]  view plain  copy
    1. private void mixFiles() {  
    2.         try {  
    3.             InputStream is1 = getResources().openRawResource(R.raw.test1);  
    4.             List<Short> music1 = createMusicArray(is1);  
    5.   
    6.             InputStream is2 = getResources().openRawResource(R.raw.test2);  
    7.             List<Short> music2 = createMusicArray(is2);  
    8.   
    9.             InputStream is3 = getResources().openRawResource(R.raw.test3);  
    10.             List<Short> music3 = createMusicArray(is3);  
    11.   
    12.             completeStreams(music1, music2, music3);  
    13.             short[] music1Array = buildShortArray(music1);  
    14.             short[] music2Array = buildShortArray(music2);  
    15.             short[] music3Array = buildShortArray(music3);  
    16.   
    17.             short[] output = new short[music1Array.length];  
    18.             for (int i = 0; i < output.length; i++) {  
    19.   
    20.                 float samplef1 = music1Array[i] / 32768.0f;  
    21.                 float samplef2 = music2Array[i] / 32768.0f;  
    22.                 float samplef3 = music3Array[i] / 32768.0f;  
    23.   
    24.                 float mixed = samplef1 + samplef2 + samplef3;  
    25.                 // reduce the volume a bit:  
    26.                 mixed *= 0.8;  
    27.                 // hard clipping  
    28.                 if (mixed > 1.0f) mixed = 1.0f;  
    29.                 if (mixed < -1.0f) mixed = -1.0f;  
    30.                 short outputSample = (short) (mixed * 32768.0f);  
    31.                 output[i] = outputSample;  
    32.             }  
    33.             saveToFile(output);  
    34.         } catch (NotFoundException e) {  
    35.             e.printStackTrace();  
    36.         } catch (IOException e) {  
    37.             e.printStackTrace();  
    38.         }  
    39.     }  

    还有一些其它补充的代码,因为帖子现在已经太长了我没有贴出来,但是关于它们实现了什么有一些小提示:
    创建
    • createMusicArray 读取流并且返回一个List<Short>
    • completeStreams 通过给尾部添加一系列'0'使得较小的文件正常化。最重三个文件会有同样的长度。
    • buildShortArray 将List<Short>转为short[]
    • saveToFile 保存文件 :)
    这个方法中的重点就是我们把所有样本求和。使short转为float[-1,1],这样就不会出现溢出的问题。在最后我们减少了一点音量,然后我们把它保存到一个新的数组。这样就完成了!

    当然,这只是最简单的方案。如果样本不是这样的话我们就需要其他的计算。但我认为大多我们要混音的时候,我们可以控制它的录制方式从而减少其复杂性。

    一旦我们有了一个合成的PCM文件,我们就可以让它转为.wav文件这样每个播放器就都可以播放它了。补充:很多人都曾问我要更多的帮助,那么下边就是从原生流文件创建short array 的代码。

    [java]  view plain  copy
    1. /** 
    2.      * Dealing with big endian streams 
    3.      * 
    4.      * @param byte0 
    5.      * @param byte1 
    6.      * @return a shrt with the two bytes swapped 
    7.      */  
    8.     private static short swapBytes(byte byte0, byte byte1) {  
    9.         return (short) ((byte1 & 0xff) << 8 | (byte0 & 0xff));  
    10.     }  
    11.   
    12.     /** 
    13.      * From file to byte[] array 
    14.      * 
    15.      * @param sample 
    16.      * @param swap   should swap bytes? 
    17.      * @return 
    18.      * @throws IOException 
    19.      */  
    20.     public static byte[] sampleToByteArray(File sample, boolean swap) throws IOException {  
    21.         ByteArrayOutputStream baos = new ByteArrayOutputStream();  
    22.   
    23.         BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sample));  
    24.         int BUFFERSIZE = 4096;  
    25.         byte[] buffer = new byte[BUFFERSIZE];  
    26.         while (bis.read(buffer) != -1) {  
    27.             baos.write(buffer);  
    28.         }  
    29.         byte[] outputByteArray = baos.toByteArray();  
    30.         bis.close();  
    31.         baos.close();  
    32.   
    33.         if (swap) {  
    34.             for (int i = 0; i < outputByteArray.length - 1; i = i + 2) {  
    35.                 byte byte0 = outputByteArray[i];  
    36.                 outputByteArray[i] = outputByteArray[i + 1];  
    37.                 outputByteArray[i + 1] = byte0;  
    38.             }  
    39.         }  
    40.   
    41.         return outputByteArray;  
    42.     }  
    43.   
    44.     /** 
    45.      * Read a file and returns its contents as array of shorts 
    46.      * 
    47.      * @param sample the sample file 
    48.      * @param swap   true if we should swap the bytes of short (reading a little-endian file), false otherwise (readin        g a big-endian file) 
    49.      * @return 
    50.      * @throws IOException 
    51.      */  
    52.     public static short[] sampleToShortArray(File sample, boolean swap) throws IOException {  
    53.         short[] outputArray = new short[(int) sample.length() / 2];  
    54.   
    55.   
    56.         byte[] outputByteArray = sampleToByteArray(sample, false);  
    57.   
    58.   
    59.         for (int i = 0, j = 0; i < outputByteArray.length; i += 2, j++) {  
    60.             if (swap) {  
    61.                 outputArray[j] = swapBytes(outputByteArray[i], outputByteArray[i + 1]);  
    62.             } else {  
    63.                 outputArray[j] = swapBytes(outputByteArray[i + 1], outputByteArray[i]);  
    64.             }  
    65.         }  
    66.         return outputArray;  
    67.     }  


    原文链接


    展开全文
  • Android MediaRecorder录音录像 暂停 继续录音 播放 ARM格式(音频) https://blog.csdn.net/WHB20081815/article/details/88778605 Android 录音机小米商业项目开源代码 AudioRecord录音暂停 播放 Wav格式...
  • 基于MATLAB的语音信号处理

    万次阅读 多人点赞 2018-07-15 01:21:20
    基于MATLAB的语音信号处理摘要:语音信号处理是目前发展最为迅速的信息科学研究领域中的个,是目前极为活跃和热门的研究领域,其研究成果具有重要的学术及应用价值。语音信号处理的研究,对于机器语言、语音识别、...
  • 项目中有个分段朗读课文、朗读完成后合成一段音频播放的需求,三下五除二写完发现不少坑,记录一下。 先放录音代码 //录音 -(void)startRecordWithPath:(NSString *)path{ //如果在录音,停止 if (_audioRecord....
  • – 音频拼接:一段音频连接着另一段音频,两段音频不会同时播放,有先后顺序。 – 音频混合:一段音频和另一段音频存在相同的区间,两者会有同时播放的区间。 下面是音频拼接,音频混合的效果图: 音频拼接 如果...
  • 但是android本身不带续录功能,决定采用多语音合成最终文件的方式。音频文件和txt不一样,必须把后面的片段的头文件,去掉。头是多少就seek到多少续写合成音频格式 /** * @param voiceFiles 需要合成的语音片段 ....
  • 般来说,我们要将一段文字转换为一个 wav 的语音文件主要是 靠录音,就电脑上装一个录音软件,然后人一边念一边录。但这样做 太麻烦了,效率太低。现在一般都是用语音合成软件,直接把文字变 成 wav 格式的语音文件...
  • 方兴未艾的语音合成技术与应用

    千次阅读 2018-11-01 08:35:10
    amp;mid=2247498490&amp;idx=2&amp;sn=a995453c626c1df20899986f46e0561f&amp;scene=21#wechat_redirect   ...方兴未艾的语音合成技术与应用   https://mp.weixin.qq.com/s?__...
  • 讯飞录音,把几个pcm合成为wav

    千次阅读 2015-11-03 11:13:01
    由于讯飞录音是不能把一段很长的话录音出来,只能是一段一段的录,所以要把录出来的pcm数据合成wav文件,录音的采样率是8k, 比特率是16bit,双声道,合并的代码如下: public static boolean mergePCMFilesToWAVFile...
  • python录音

    千次阅读 2019-05-23 18:49:01
    PyAudio 实现录音 自动化交互实现问答 Python 很强大其原因就是因为它庞大的三方库 , 资源是非常的丰富 , 当然也不会缺少关于音频的库 关于音频, PyAudio 这个库, 可以实现开启麦克风录音, 可以播放音频文件等等,...
  • linux命令大全

    千次阅读 2015-12-24 08:44:14
    在Red Hat Linux中,adduser指令则是useradd指令的符号连接,两者实际上是同个指令。 chfn(change finger information) 功能说明: 改变finger指令显示的信息。 语 法: chfn [-f <真实姓名>][-h...
  • 录音: //音频会话 AVAudioSession *session = [AVAudioSession sharedInstance]; NSError *sessionError; /* AVAudioSessionCategoryPlayAndRecord :录制和播放 AVAudioSessionCategoryAmbient :用于非以语音为主...
  • 语音合成工具

    2019-01-16 15:20:28
    一般来说,我们要将一段文字转换为一个 wav 的语音文件主要是 靠录音,就电脑上装一个录音软件,然后人一边念一边录。但这样做 太麻烦了,效率太低。现在一般都是用语音合成软件,直接把文字变 成 wav 格式的语音...
  • 背景音乐合成专家

    2013-07-19 11:47:45
    可指定音乐播放一段时间后再进行语音播放,随意调整合成方式 支持在播放语音时,自动降低背景音乐音量 支持背景音乐的“淡入”、“淡出”效果,让制作效果更专业 完美支持 Windows 2000/XP/Vista/7/8 操作系统 背景...
  • iOS 录音踩坑之旅

    2019-09-02 19:16:34
    公司产品需求做录音功能,要求可以添加背景音乐,支持边录边播,录音试听、暂停录音、实时绘制音波图、以mp3格式上传服务端等功能。 1、使用iOS自带API:AVAudioRecorder录音wav格式音频,存储到本地,录音暂停...
  • 语音合成概述

    千次阅读 2020-01-12 14:16:15
    、语音合成概述 语音合成,又称文语转换(Text To Speech, TTS),是种可以将任意输入文本转换成相应语音的技术。 传统的语音合成系统通常包括前端和后端两个模块。前端模块主要是对输入文本进行分析,提取后端...
  • 基于树莓派的语音识别和语音合成

    千次阅读 热门讨论 2019-11-20 22:33:08
    基于树莓派的语音识别和语音合成 摘要 语音识别技术即Automatic Speech Recognition(简称ASR),是指将人说话的语音信号转换为可被计算机程序所识别的信息,从而识别说话人的语音指令及文字内容的技术。目前语音...
  • 安卓实现录音机的录音功能

    千次阅读 2017-11-01 18:09:50
    安卓实现录音机的录音功能
  • 语音识别与合成

    2020-10-27 16:48:00
    模式识别实验室语音识别与音频检索组技术简介主要研究包括语音识别、语音合成、音频检索。1. 语音识别a. 关键词识别可以识别用户话音中的关键词,完成相应的信息服务,如命令控制、信息查询等,关键词信息可以订制...
  • 嘴巴 = 扬声器 = 语音合成 TTS Text To Speech 眼睛 = 摄像头 = 图像识别 IR 思考 = 逻辑处理 = 自然语言处理 NLP Natural Language Processing if else .... 用自然语言处理,用模型计算相似度 大数据和人工智能...
  • 可指定音乐播放一段时间后再进行语音播放,随意调整合成方式 支持在播放语音时,自动降低背景音乐音量 支持背景音乐的“淡入”、“淡出”效果,让制作效果更专业 完美支持 Windows 2000/XP/Vista/7/8 操作系统 ...
  • Android路上--AudioRecord 录音详解

    千次阅读 2018-12-25 11:59:42
    AudioRecord + AudioTrack + AudioFormat,通过pcm文件合并并转wav实现录音、暂停、播放、停止、重录、计时等功能。
  • 把两个包合成一个包来处理即可。 写这篇文章的时候还参考了另外一篇文章的思路 https://www.jianshu.com/p/d903d2c8ffd2 说到了遇到网络卡该怎么处理 一点是要缓冲一段再播放, 另外一点就是加上空的静音包, 来...
  • 语音合成:把语音波形文件重现,以种灵活的方式,只用极少数的基础数据,比如元音辅音的语音参数,那么首先需要研究元音辅音的语音学性质。 先从元音开始,根据相关资料,不同的元音是由相同的原始声带音通过不同...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,647
精华内容 1,458
关键字:

录音合成一段