音频采样

WAV文件格式分析

▼魔方 西西 提交于 2019-12-25 22:58:28
ref: https://www.jianshu.com/p/63d7aa88582b 概览 WAV文件是在PC机平台上很常见的、最经典的多媒体音频文件,最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为WAV,是WaveFom的简写,也称为波形文件,可直接存储声音波形,还原的波形曲线十分逼真。WAV文件格式简称WAV格式是一种存储声音波形的数字音频格式,是由微软公司和IBM联合设计的,经过了多次修订,可用于Windows,Macintosh,Linix等多种操作系统。 RIFF file format RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构。RIFF文件所包含的数据类型由该文件的扩展名来标识 Chunk RIFF 文件结构可以看作是树状结构,其基本构成是称为"块"( Chunk )的单元,每个块有"标志符"、"数据大小"及"数据"所组成 public static class Chunk { //4个字节 public String chunkId; //4个字节。指的是 data的长度 public int dataSize; public byte[] data; } chunkId 4字节,用以标识块中所包含的数据。如: RIFF ,

PCM音量控制

≡放荡痞女 提交于 2019-12-22 02:23:37
http://blog.jianchihu.net/pcm-volume-control.html 一.声音的相关概念 声音是介质振动在听觉系统中产生的反应。声音总可以被分解为不同频率不同强度正弦波的叠加(傅里叶变换)。 声音有两个基本的物理属性: 频率 与 振幅 。声音的振幅就是音量,频率的高低就是指音调,频率用赫兹(Hz)作单位。人耳只能听到20Hz到20khz范围的声音。 模拟音频 (Analogous Audio),用连续的电流或电压表示的音频信号,在时间和振幅上是连续。在过去记录声音记录的都是模拟音频,比如机械录音(以留声机、机械唱片为代表)、光学录音(以电影胶片为代表)、磁性录音(以磁带录音为代表)等模拟录音方式。 数字音频 (Digital Audio),通过采样和量化技术获得的离散性(数字化)音频数据。计算机内部处理的是二进制数据,处理的都是数字音频,所以需要将模拟音频通过采样、量化转换成有限个数字表示的离散序列(即实现音频数字化)。 采样频率 (Sampling Rate),单位时间内采集的样本数,是采样周期的倒数,指两个采样之间的时间间隔。采样频率必须至少是信号中最大频率分量频率的两倍,否则就不能从信号采样中恢复原始信号,这其实就是著名的香农采样定理。CD音质采样率为 44.1 kHz,其他常用采样率:22.05KHz,11.025KHz

业务领域建模

百般思念 提交于 2019-12-05 15:07:47
领域建模 Collect application domain information focus on the functional requirements – also consider other requirements and documents Brainstorming listing important application domain concepts – listing their properties/attributes – listing their relationships to each other Classifying the domain concepts into: classes – attributes / attribute values – relationships association, inheritance, aggregation Document result using UML class diagram 1 Collect application domain information 我的工程实践题目是《 多人对话场景中音频分离 》,题目要求的任务即说话人区分(Speaker Diarization)任务。说话人区分是声纹识别领域中的一个任务,具体是指根据说话者身份将输入的音频划分为同类片段的过程

基于傅里叶变换的音频重采样算法 (附完整c代码)

匿名 (未验证) 提交于 2019-12-03 00:39:02
前面有提到音频采样算法: WebRTC 音频采样算法 附完整C++示例代码 简洁明了的插值音频重采样算法例子 (附完整C代码) 近段时间有不少朋友给我写过邮件,说了一些他们使用的情况和问题。 坦白讲,我精力有限,但一般都会抽空回复一下。 大多数情况,阅读一下代码就能解决的问题, 也是要尝试一下的。 没准,你就解决了呢? WebRtc的采样算法本身就考虑到它的自身应用场景, 所以它会有一些局限性,例如不支持任意采样率等等。 而简洁插值的这个算法, 我个人也一直在使用,因为简洁明了,简单粗暴。 我自然也就没有进一步去细究采样算法, 当然网上还有不少开源的采样算法也是极其不错的。 一直也想抽时间再做一个兼顾简洁和质量的算法出来,不了了之。 最近一直在死磕傅里叶变换,网上的资源看了一箩筐。 徘徊到最后,毫无疑问FFTW3必须是你的首选, 从岁数性能以及使用的概率来说,当之无愧的王者。 当然也顺带整理一下,其他的一些FFT实现,各有优劣。 用于学习,作为参考资料也是不二之选。 有兴趣的小伙伴,可以参阅之. https://github.com/cpuimage/StockhamFFT https://github.com/cpuimage/uFFT https://github.com/cpuimage/BluesteinCrz https://github.com/cpuimage

音频开源代码中重采样算法的评估与选择

匿名 (未验证) 提交于 2019-12-03 00:38:01
在音频软件实现中经常会遇到两个模块采样率不一致的情况,比如语音通话时采集到的PCM信号是16k Hz的,但编码时codec是AMR-NB(AMR-NB是8k Hz采样),这时就需要把16k Hz采样的PCM值转换成8k Hz采样的PCM值(这叫降采样或者下采样),然后再去做AMR-NB编码。再比如音乐播放时音源是44.1k Hz采样率编码的,但是播放时是48k Hz采样率的,这就需要把解码后的44.1k Hz采样率的PCM值转换成48k Hz采样的PCM值(这叫升采样或者上采样),然后再送给codec芯片播放。采样率转换(sampling rate converter, SRC)或者叫重采样有多种方法,简单的有线性插值法(算法简单,load小,但性能一般),复杂的有sinc方法(算法复杂,load大,但性能较好)。好多的音频类开源代码里都有重采样的实现,比如PJSIP和FFMPEG。重采样的原理这里就不详细介绍了,有兴趣的可以看相关文章。今天我们讲的是如何去评估这些开源代码里的重采样实现以及选择最适合的实现。评估主要基于频响特性,其次看CPU load。评估的开源实现是我用过的PJSIP和SILK codec。PJSIP里的重采样有两种实现(线性插值和sinc),通过开关控制选用哪种。SILK里的重采样用的是三次插值方法。对其他开源实现的评估类似。 在评估前先要做一些准备工作

Unity 声音与录音与麦克风实时播放

匿名 (未验证) 提交于 2019-12-02 23:43:01
Unity AudioSource与MicroPhone以及AudioClip之间的关系。 下面是一个声音,长度为7秒钟,声音的实际数据本质是由采样点组成的的列表,一秒钟内的采样点数就是采样频率,下面的采样频率是10,正常实际中是44100,根据需求设置;AudioSource播放声音时,设置其TimeSamples的意思就是从声音的第timeSamples个采样点位置开始播放,因此设置声音的播放的偏移位置的方式是设置timeSamples或者设置time。播放时 timeSamples并不是一直固定的 ,跟随时间逐个指向每个对应的采样点的索引值。 接下来是设置麦克风的,麦克风的原理就是首先定义一个Clip,开始录音之后,就不断的将录音采样点值赋予clip的相对应的采样点,这点和Audiosource的timeSamples相同,区别是两者的操作相反,当前采样点的位置可以用MicroPhone的GetPosition()获得。因此如果想要像KTV那样实时的播放录音,就是让audiosource播放的时候,timeSamples的值刚好等于当前采样点的值,或者延迟不大的一段采样点距离(好吧,我这么干了,可是不知道为什么噪音很严重,有待研究,并且timeSamples的值不能大于当前录音采样点的值,不然没有声音(傻瓜都能想到为什么))。 下面是实时播放的代码。 using System

python---wav音频

匿名 (未验证) 提交于 2019-12-02 22:51:30
import pyaudio #导入库 import wave #导入wav音频库 import sys from PyQt5 . QtWidgets import QApplication , QWidget , QFileDialog from pya import Ui_Form import numpy as np import matplotlib . pyplot as plt class Win ( QWidget , Ui_Form ): def __init__ ( self ): super ( Win , self ). __init__ () self . setupUi ( self ) plt . rcParams [ 'font.sans-serif' ] = [ 'SimHei' ] # 指定默认字体 SimHei为黑体 plt . rcParams [ 'axes.unicode_minus' ] = False # 用来正常显示负号 def dakaiwenjian ( self ): r = QFileDialog . getOpenFileName ( self , '请选择要打开的文件' , '.\\' , 'WAV(*.wav)' , 'WAV(*.wav)' ) self . lineEdit . setText ( r [ 0 ])

python---wav音频

匆匆过客 提交于 2019-12-01 11:26:47
import pyaudio #导入库 import wave #导入wav音频库 import sys from PyQt5.QtWidgets import QApplication, QWidget,QFileDialog from pya import Ui_Form import numpy as np import matplotlib.pyplot as plt class Win(QWidget,Ui_Form): def __init__(self): super(Win, self).__init__() self.setupUi(self) plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体 SimHei为黑体 plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 def dakaiwenjian(self): r = QFileDialog.getOpenFileName(self, '请选择要打开的文件', '.\\', 'WAV(*.wav)', 'WAV(*.wav)') self.lineEdit.setText(r[0]) wf = wave.open(r[0], 'rb') # 只读方式打开wav文件 #只读模式: ‘r’, ‘rb’

业务领域建模

放肆的年华 提交于 2019-11-25 20:34:54
领域建模 Collect application domain information focus on the functional requirements – also consider other requirements and documents Brainstorming listing important application domain concepts – listing their properties/attributes – listing their relationships to each other Classifying the domain concepts into: classes – attributes / attribute values – relationships association, inheritance, aggregation Document result using UML class diagram 1 Collect application domain information 我的工程实践题目是《 多人对话场景中音频分离 》,题目要求的任务即说话人区分(Speaker Diarization)任务。说话人区分是声纹识别领域中的一个任务,具体是指根据说话者身份将输入的音频划分为同类片段的过程