精华内容
下载资源
问答
  • 此文介绍HTML5音频API的主要框架和工作流程,...HTML5音频API的主要框架和工作流程如下图,在 AudioContext 音频上下文中,把音频文件 buffer 格式,从音频源 source 开始,经过 AuidoNode 处理音频,最后到达 ...

    此文介绍HTML5音频API的主要框架和工作流程,因为音频处理模块很多,因此只简单介绍几种音频处理模块,并通过例子来展示效果。后续会介绍利用HTML5音频API实现的项目,欢迎大家关注,敬请期待。

    HTML5音频API的主要框架和工作流程如下图,在 AudioContext 音频上下文中,把音频文件转成 buffer 格式,从音频源 source 开始,经过 AuidoNode 处理音频,最后到达 destination 输出音乐。这里形成了一个音频通道,每个模块通过 connect 方法链接并传送音频。

    1460000010561227

    AudioContext

    AudioContext 是一个音频上下文,像一个大工厂,所有的音频在这个音频上下文中处理。

    let audioContext = new(window.AudioContext || window.webkitAudioContext)();

    AudioContext 音频上下文提供了很多属性和方法,用于创建各种音频源和音频处理模块等,这里只介绍一部分,更多属性和方法可到MDN查阅文档。

    属性

    AudioContext.destination

    返回 AudioDestinationNode 对象,表示当前 AudioContext 中所有节点的最终节点,一般表示音频渲染设备。

    方法

    AudioContext.createBufferSource()

    创建一个 AudioBufferSourceNode 对象, 他可以通过 AudioBuffer 对象来播放和处理包含在内的音频数据。

    AudioContext.createGain()

    创建一个 GainNode,它可以控制音频的总音量。

    AudioContext.createBiquadFilter()

    创建一个 BiquadFilterNode,它代表代表一个双二阶滤波器,可以设置几种不同且常见滤波器类型:高通、低通、带通等。

    createOscillator()

    创建一个 OscillatorNode, 它表示一个周期性波形,基本上来说创造了一个音调。

    音频转换成Buffer格式

    使用decodeAudioData()方法把音频文件编译成buffer格式。

    function decodeAudioData(audioContext, url) {

    return new Promise((resolve) => {

    let request = new XMLHttpRequest();

    request.open('GET', url, true);

    request.responseType = 'arraybuffer';

    request.onload = () => {

    audioContext.decodeAudioData(request.response, (buffer) => {

    if (!buffer) {

    alert('error decoding file data: ' + url);

    return;

    } else {

    resolve(buffer);

    }

    })

    }

    request.onerror = function() {

    alert('BufferLoader: XHR error');

    }

    request.send();

    })

    }

    let buffer = decodeAudioData(audioContext, './sounds/music.mp3');

    AudioNode

    音频节点接口是一个音频处理模块。包括音频源,音频输出,中间处理模块。

    方法

    AudioNode.connect()

    链接两个 AudioNode 节点,把音频从一个 AudioNode 节点输出到另一个 AudioNode 节点,形成一个音频通道。

    AudioNode.disconnect()

    把 AudioNode 节点与其他节点断开链接。

    AudioBufferSourceNode

    音频源有多种,这里只介绍 buffer 的音频源,buffer 的音频源通过 AudioContext 接口的 createBufferSource 方法来创建。音频源节点继承 AudioNode 音频节点。

    let bufferSource = audioContext.createBufferSource();

    创建了 AudioBufferSourceNode 对象后,把 buffer 格式的音频数据赋值给 AudioBufferSourceNode 对象的 buffer 属性,此时音频已经传递到音频源,可以对音频进行处理或输出。

    bufferSource.buffer = buffer;

    方法

    AudioBufferSourceNode.start(when[, duration])

    开始播放。

    when:延迟播放时间,单位为秒。

    offset:定位音频到第几秒开始播放。

    duration:从开始播放结束时长,当经过设置秒数后自动结束音频播放。

    AudioBufferSourceNode.stop([when])

    when:延迟停止时间,单位为秒。

    停止播放,注意调用该方法后,无法再次调用 AudioBufferSourceNode.start 播放。

    AudioDestinationNode

    音频终点是通过 AudioContext 接口的 destination 属性访问的。音频终点继承 AudioNode 音频节点,

    AudioDestinationNode 节点无法再把音频信息传递给下一个音频节点,即无法再链接其他音频节点,因为他已经是终点,没有输出,也可以理解为他自己就是输出。

    let audioDestinationNode = audioContext.destination;

    此时我们有音频起点 AudioBufferSourceNode 和音频终点 AudioDestinationNode ,使用 AudioNode.connect() 方法把起点和终点链接起来,就形成了一条有输入输出的音频通道,可以把音频直接播放出来。

    bufferSource.connect(audioDestinationNode);

    GainNode

    用于音量变化。它是一个 AudioNode 类型的音频处理模块。

    let gainNode = audioContext.createGain();

    把音频源、音频输出和音频处理模块链接一起,形成可控制音量大小的音频。

    bufferSource.connect(gainNode);

    gainNode.connect(audioDestinationNode);

    let controlVolume = value => {

    gainNode.gain.value = value);

    }

    // 两倍音量播放

    controlVolume(2);

    1460000010561228

    BiquadFilterNode

    表示一个简单的低频滤波器,可控制声调。它是一个 AudioNode 类型的音频处理模块。

    let filterNode = audioContext.createBiquadFilter();

    输出一个变调的音频:

    bufferSource.connect(filterNode);

    filterNode.connect(audioDestinationNode);

    let controlFrequency = function(value) {

    filterNode.frequency.value = value;

    }

    // 音频为1000变调

    controlFrequency(1000);

    多个音频源

    在一个音频上下文中,可以有多个音频处理通道,即多个音频源同时输出。各个音频处理通道内的操作是独立的,不影响其他音频通道。

    1460000010561229

    多个音频处理模块

    一个音频源可以经过多个音频处理模块处理,音频处理模块叠加效果后输出。

    1460000010561230

    到此本文结束,欢迎提问和指正。

    写原创文章不易,若本文对你有帮助,请点赞、推荐和关注作者支持。

    展开全文
  • c# 调用音频设备录音、语音播报、文本转Wav音频文件、Wav音频文件转文本(语音识别) 用到的动态库 SpeechLib、Microsoft.DirectX、Microsoft.DirectX.DirectSound
  • 在windows平台下,使用speech_recognition记录音频,并转换为16k的wav, 之后利用ffmpeg将wav转化为pcm文件,上传到百度语音端,返回语音信息,并利用pyttsx3添加了简单的交互功能。 需求模块: speech_recognition...

    项目说明:

    在windows平台下,使用speech_recognition记录音频,并转换为16k的wav, 之后利用ffmpeg将wav转化为pcm文件,上传到百度语音端,返回语音信息,并利用pyttsx3添加了简单的交互功能。

    需求模块:

    speech_recognition, pyttsx3, pyaudio, wave, aip, ffmpeg

    模块安装:

    代码如下

    import speech_recognition as sr
    import pyttsx3
    import pyaudio
    import wave
    from aip import AipSpeech
    import os
    
    # 读取wav文件并播放
    def read_wav():
        CHUNK = 1024
    # 测试语音
        wf = wave.open('./2.wav', 'rb')
            # read data
        data = wf.readframes(CHUNK)
        p = pyaudio.PyAudio()
        FORMAT = p.get_format_from_width(wf.getsampwidth())
        CHANNELS = wf.getnchannels()
        RATE = wf.getframerate()
    
        print('FORMAT: {} \nCHANNELS: {} \nRATE: {}'.format(FORMAT, CHANNELS, RATE))
        stream = p.open(format=FORMAT,
    
                        channels=CHANNELS,
                        rate=RATE,
                        frames_per_buffer=CHUNK,
                        output=True)
        # play stream (3)
        while len(data) > 0:
            stream.write(data)
            data = wf.readframes(CHUNK)
    
    
    
    def wav_to_pcm(wav_file):
        # 假设 wav_file = "音频文件.wav"
        # wav_file.split(".") 得到["音频文件","wav"] 拿出第一个结果"音频文件"  与 ".pcm" 拼接 等到结果 "音频文件.pcm"
        pcm_file = "%s.pcm" %(wav_file.split(".")[0])
        # 就是此前我们在cmd窗口中输入命令,这里面就是在让Python帮我们在cmd中执行命令
        os.system("ffmpeg -y  -i %s  -acodec pcm_s16le -f s16le -ac 1 -ar 16000 %s"%(wav_file,pcm_file))
    
        return pcm_file
    
    def get_file_content(filePath):
        with open(filePath, 'rb') as fp:
            return fp.read()
    
    
    """ 你的 APPID AK SK """
    # 需要根据自己申请的填写
    # APP_ID = '你的 App ID'
    # API_KEY = '你的 Api Key'
    # SECRET_KEY = '你的 Secret Key'
    # 这是测试id,key
    APP_ID = '14545668'
    API_KEY = 'BLG4GIxozxXia9U8KKtLBl2j'
    SECRET_KEY = 'z0ITqlx8OXiveTePBvD7jkSCdGKthZAy'
    
    def speech_interaction():
        # 初始化pyttsx3 engine
        engine = pyttsx3.init()
    
        # obtain audio from the microphone
        # 从麦克风记录数据
        r = sr.Recognizer()
        with sr.Microphone() as source:
            # print("Say something!")
            engine.say("门外有客人来访,需要开门吗, 请一秒后回答?")
            engine.runAndWait()
            r.adjust_for_ambient_noise(source)
            audio = r.listen(source)
    
        engine.say("录音结束, 识别中")
        engine.runAndWait()
        # 将数据保存到wav文件中
        with open("2.wav", "wb") as f: 
            f.write(audio.get_wav_data(convert_rate=16000))
         
         # 将记录的语音播放出来
         read_wav()      
        # 创建百度语音识别客户端
        client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    
        # 转成pcm格式
        pcmFile = wav_to_pcm("./2.wav")
        result = client.asr(get_file_content(pcmFile), 'pcm', 16000, {
            'dev_pid': 1537,
        })
        print(result)
        # print(result['err_msg'], result['result'][0])
    
        # 上传到百度云识别
        try:
            success = True if result['err_msg'] == 'success.' else False
            print(success)
            if success:
                text = result['result'][0]
                if "不" in text :
                    engine.say("好的,那请您自己去开门")
                    engine.runAndWait()
                elif "开" in text or '好' in text:
                    engine.say("请您稍等,我去帮您开门,")
                    engine.runAndWait()
                else:
                    engine.say("语音识别错误")
                    engine.runAndWait()
                # engine.say(text)
                # engine.runAndWait()
        except Exception as e:
            engine.say("抱歉, 识别错误")
            engine.runAndWait()
    
    # 执行代码
    speech_interaction()
    
    

    注意:

    pyttsx3的pyttsx3.engine()初始化不能放在线程中进行,会错。

    说明:
    • 如果返回timeout错误,在网络畅通的情况下,建议换一个id和key试一下。

    项目放在github上了:
    https://github.com/MengRe/speech_commmunication/tree/master

    展开全文
  • 在给朗诵录音或者通话录音都会保存录音文件,而很多人希望将手机录音文件转换成mp3,这样就更容易播放了,方法其实很简单,以下给大家讲述一款音频转换器是如何转换录音文件格式的操作步骤:步骤一,开始就是在...

    在给朗诵录音或者通话录音都会保存录音文件,而很多人希望将手机录音文件转换成mp3,这样就更容易播放了,方法其实很简单,以下给大家讲述一款音频转换器是如何转换录音文件格式的操作步骤:

    54b14a6121b6d51f591a780e4dedc176.png

    步骤一,开始就是在计算机上下载并安装迅捷音频转换器,当然是要去官网上下载,切莫去一些不安全的钓鱼网站上下载,软件是绿色无广告的,这一点可以放一百个心。

    ec766b482871ee6bb708a3f919aacf12.png

    步骤二,双击鼠标进入软件的主界面,主页面下方选择转换后的音频要保存到的文件夹,左上角的“添加文件”可以添加一个音频,“添加文件夹”选项则可以批量转换文件夹内的音频,批量转换音频方便快捷,不用一个一个地点。

    9b518243a6861cb48014bdcacf0fec78.png

    步骤三,选择好音频文件后,右上角的输出格式可以选择需要转换的mp3音频格式,音频的品质越高,音质也就越好,然后点击“开始转换”按钮开始转换。

    d14745a898289f8eecf5b437976b45c4.png

    步骤四,稍微等一会儿,时间不会太久,一般音频的容量不大,不像视频那样,伸个懒腰或者看一篇新闻资讯,很快一首优美的音乐就转换成功了。

    a2060bc4241115e9dd191f9360711105.png

    就是这么的简单快捷,希望对大家有所帮助,还有哪里不懂的可以留言询问。

    展开全文
  • NAudio是个相对成熟、开源的C#音频开发工具,它包含录音、播放录音、格式转换、混音调整等功能。本次介绍主要功能有音频录音文件播放、实时音频流波形图显示等。具体如下: 1. 录音 NAudio录音主要使用WaveIn...

     

         下午写了一篇关于NAudio的录音、播放和波形图的博客,不太满意,感觉写的太乱,又总结了下

          NAudio是个相对成熟、开源的C#音频开发工具,它包含录音、播放录音、格式转换、混音调整等功能。本次介绍主要功能有音频、录音文件播放、实时音频流波形图显示等。具体如下:

    1. 录音

          NAudio录音主要使用WaveIn和WaveFileWriter两个类

       1.1   WaveIn

          WaveIn的功能是对录音的音频参数进行设置以及对数据的采集,参数如通道数、采样率、平均数据传输速率(WaveFormat)、数据回调事件、录音停止回调函数等参数 

          其中,DataAvailable为数据回调参数,是在录音时实时将录音数据传递出来,有需要使用录音数据的可以订阅该事件进行接收业务和相关处理。

       1.2   WaveFileWriter

         该类是创建相对应格式的音频文件,并提供想对应的写入数据方法、保存方法等,具体如下:

     public class WaveFileWriter : Stream
        {
            public WaveFileWriter(Stream outStream, WaveFormat format);
            public WaveFileWriter(string filename, WaveFormat format);
    
            ~WaveFileWriter();
    
            public override long Position { get; set; }
            public override bool CanWrite { get; }
            public override bool CanRead { get; }
            public WaveFormat WaveFormat { get; }
            public TimeSpan TotalTime { get; }
            public override long Length { get; }
            public string Filename { get; }
            public override bool CanSeek { get; }
    
            public static void CreateWaveFile(string filename, IWaveProvider sourceProvider);
            public static void CreateWaveFile16(string filename, ISampleProvider sourceProvider);
            public static void WriteWavFileToStream(Stream outStream, IWaveProvider sourceProvider);
            public override void Flush();
            public override int Read(byte[] buffer, int offset, int count);
            public override long Seek(long offset, SeekOrigin origin);
            public override void SetLength(long value);
            public override void Write(byte[] data, int offset, int count);
            [Obsolete("Use Write instead")]
            public void WriteData(byte[] data, int offset, int count);
            [Obsolete("Use WriteSamples instead")]
            public void WriteData(short[] samples, int offset, int count);
            public void WriteSample(float sample);
            public void WriteSamples(short[] samples, int offset, int count);
            public void WriteSamples(float[] samples, int offset, int count);
            protected override void Dispose(bool disposing);
            protected virtual void UpdateHeader(BinaryWriter writer);
        }

         在调用上是先调用WaveIn的DataAvailable回调函数,读取其数据并写入流文件,最后保存到本地。

    2. 播放录音

    播放录音主要用到AudioFileReader、WaveOut三个类和接口

          2.1   AudioFileReader

              AudioFileReader主要负责读取音频文件,验证音频文件格式,对外部提供读取数据接口,具体如下:

     public class AudioFileReader : WaveStream, ISampleProvider
        {
            public AudioFileReader(string fileName);
    
            public string FileName { get; }
            public override WaveFormat WaveFormat { get; }
            public override long Length { get; }
            public override long Position { get; set; }
            public float Volume { get; set; }
    
            public override int Read(byte[] buffer, int offset, int count);
            public int Read(float[] buffer, int offset, int count);
            protected override void Dispose(bool disposing);
        }

     

         2.2   WaveOut

            WaveOut的工作是播放音频,它调用AudioFileReader.Read进行数据读取,对读取的数据进行播放,主要工作流程是从获取数据,并将数据进行播放成音频

    public class WaveOut : IWavePlayer, IDisposable, IWavePosition
        {
            public WaveOut();
            public WaveOut(IntPtr windowHandle);
            public WaveOut(WaveCallbackInfo callbackInfo);
    
            ~WaveOut();
    
            public static int DeviceCount { get; }
            public PlaybackState PlaybackState { get; }
            public WaveFormat OutputWaveFormat { get; }
            public int DeviceNumber { get; set; }
            public int NumberOfBuffers { get; set; }
            public int DesiredLatency { get; set; }
            public float Volume { get; set; }
    
            public event EventHandler<StoppedEventArgs> PlaybackStopped;
    
            public static WaveOutCapabilities GetCapabilities(int devNumber);
            public void Dispose();
            public long GetPosition();
            public void Init(IWaveProvider waveProvider);
            public void Pause();
            public void Play();
            public void Resume();
            public void Stop();
            protected void Dispose(bool disposing);
        }

     

    3. 波形图绘制

           录音时绘制波形图需要在DataAviliable回调函数中获取音频数据并将其从byte[]转换为float[],然后用float[]数据做为波形图的输入即可,这个过程源码上写一个数据包的波形图数据为waveSource.WaveFormat.SampleRate / 100,原理上我还没搞懂,但是的确是这么操作显示是对的,具体如下:

            private void waveSource_DataAvailable(object sender, WaveInEventArgs e)
            {
                if (waveFile != null)
                {
                    waveFile.Write(e.Buffer, 0, e.BytesRecorded);
                    waveFile.Flush();
    
                    float[] sts = new float[e.Buffer.Length / 2];
                    int outIndex = 0;
                    for (int n = 0; n < e.Buffer.Length; n += 2)
                    {
                        sts[outIndex++] = BitConverter.ToInt16(e.Buffer, n) / 32768f;
                    }
    
                    for (int n = 0; n < sts.Length; n += channels)
                    {
                        Add(sts[n]);
                    }
                }
            }

     

        需要注意的是WaveFormat的通道数设置、PCM的格式设置,上述代码都是基于通道数为2、PCM为16bit的情况下,如这两项修改会发生转换和调用失败等问题

        可调试Demo:示例Demo

    转载于:https://www.cnblogs.com/Khan-Sadas/p/11435536.html

    展开全文
  • 音频文件如何转换成文字?

    千次阅读 2019-09-18 18:29:42
    小米手机的用户想要将音频文件转换成文字就非常的简单,在手机点开自带的录音机 进入录音机主界面之后,点击屏幕右下角的录音记录。 找到需要转换成文字的音频文件,点击后就可以看到界面的右下角有一个转文字的...
  • wav音频文件转换为sbc音频文件

    千次阅读 2019-08-29 11:13:39
    当我们得到一个双声道的wav音频文件,要将它转换为sbc后缀的文件操作: 第一步,需要将其转换为单声道的文件: ①:打开Cool Edit Pro 2.1,将音频文件拖入其中; ②:将鼠标移动到最上面或者最下面,鼠标旁边会出现...
  • NAudio的录音和播放录音都有对应的类,我在使用Wav格式进行录音和播放录音时使用的类时WaveIn和WaveOut,这两个类是对功能的回调和一些事件触发。  在WaveIn和WaveOut之外还有对音频流读写使用的WaveFileWriter和...
  • 如果您需要视频转音频文件,却不知道如何操作,那么您可以在本文中找到最快的解决方法。本文将详细介绍视频文件转音频格式的多种方法,以及使用录音工具提取视频中的音频文件的方法。
  • ACT录音文件转换工具ACT录音文件转换工具.zipACT录音文件转换工具.zipACT录音文件转换工具.zip
  • 我是在做手表开发的时候接触到音频文件的转码问题,大家都知道在手机上使用录音功能可以直接使用MediaRecord这个类,可以直接将录制内容输出为amr格式,但是在手表端(android wear)是无法使用MediaRecord这个类的,...
  • NAudio的录音和播放录音都有对应的类,我在使用Wav格式进行录音和播放录音时使用的类时WaveIn和WaveOut,这两个类是对功能的回调和一些事件触发。  在WaveIn和WaveOut之外还有对音频流读写使用的WaveFileWriter和...
  • 微信录音amr音频文件转mp3格式

    万次阅读 2017-02-08 14:42:12
    微信录音音频为amr格式,不支持网页播放,且上传语音有效期3天,可用微信多媒体接口下载语音到自己的服务器,然后转码转MP3格式
  • 微信小程序录音解码silk v3音频文件 类似微信的amr和aud文件silk-v3-decoder.zip,[Skype Silk codec sdk]解码Silk v3音频文件(如微信AMR、AUD文件、QQ SLK文件)并转换为其他格式(如MP3)。批量转换支持。
  • IOS caf音频文件如何转化成mp3文件

    千次阅读 2016-03-30 11:59:02
    IOS录制音频 caf转mp3格式
  • 一首歌下下来了mar格式的音频文件 播放器显示不可播放 格式不支持 这个怎么办?
  • 如何使用录音文件转换成文字工具...我们在需要将音频文件转换成文字首先需要找到一个专业的录音文字转换工具就是【录音转文字助手】,不管是音频文件转换出文字还是边录边转都可以借助这个应用来帮助完成转换。 步...
  • 请问C#能否将60s以上的音频文件文字,刚接触这方面的知识还望各位大神能够帮助我
  • 最近陆陆续续收到很多好朋友的私信,都跟我提到上次音乐格式转换的问题,那么这次我们在上次的基础上优化一下。今天专门要提到的就是mp3格式转换哦!赶紧一起来看一下吧...首先将我们的“mp3格式...
  • ASP.NET中将需要的文字生成相应的音频文件并做指定格式的转换
  • 电信坐席系统的外呼录音格式是v3格式,大多的播放器都不能播放该录音,该文档是将该录音转换成wav格式,以便于播放。
  • 音频文件格式转换

    2014-09-06 19:15:13
    AD Sound Recorder 是一款音频录音工具,它可以录制由麦克风、CD、互联网,以及由媒体播放软件播放的音频。它可以即时捕捉正在播放的声音并把音频录制为 WAV/MP3 文件。支持 WAV、MP3 或 WMA 回放的功能,可编辑 MP3...
  • 该软件是通过调用Windows语音合成引擎(SPEECH SYNTHESIS ENGINE)进行语言合成,将文本处理后直接输出或另存为音频文件,真正实现不用真人录音即可完成语音录制功能。你可以通过改变对语音引擎的设置改变“说话” 的...
  • 对于多媒体资源,一般都是以文件的形式存储在固化存储器中。Fatfs所支持的fat32为windows支持的文件系统,因此在嵌入式系统中采用Fatfs文件系统可极大地扩展系统...笔者此处就wav音频文件的播放与录音进行简单的介绍。
  • 如果你对音频文件一点也不了解,建议看一下这篇文章中的内容,主要解析了wav文件的格式,并涉及到一些音频有关的概念: WAV文件格式详解 然后我将分成两部分代码来讲解。 第一部分代码:从声卡中采集数据并保存为pcm...
  • REC录音文件转换工具

    2012-07-05 15:11:11
    把手机录音文件转换成MAV格式,转换后的音频挺清晰的!
  • 今天,小编来给小伙伴们推荐一款大家都说好用的手机APP——“录音转文字助手”,可以轻松实现音频转换成文字功能。小伙伴们可以在自己的手机应用商店输入并搜索“录音转文字助手”,进入软件详情页就可以免费下载、...
  • 我现在需要将一个双声道音频文件转换成单声道的文件,我的做法是将音频文件audio1.wav解码pcm数据,然后将双声道的pcm转换成单声道的pcm, 最后再加上wav头,使之变成一个单声道的文件audio2.wav,但是转换之后我...
  • 怎么将音频文件AAC转换成MP3格式呢?电脑上我们用的最多的音乐播放器就是QQ音乐了,不管是手机还是电脑大部分的人都会选择它,听音乐享受音乐是生活中不可缺少的部分,假设我们在下载自己喜欢的音乐时候,发现格式并...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,961
精华内容 4,784
关键字:

录音怎么转换成音频文件