导航:首页 > 操作系统 > android声波效果

android声波效果

发布时间:2023-01-11 07:44:07

A. android音视频【八】音频基础

前些文章讲了视频,我们开始音频。

开始介绍前,先看一个声音的波形图:

声音是一种压力波,当敲击键盘或者撞击物体时,它们的震动会引起空气的震动,使空气产生疏密变化,由此就形成了一种声波。

声波的三要素是频率、振幅、和波形,频率代表音阶的高低,振幅代表响度,波形代表音色。

频率 : 频率 越高,波长越短,低频声响的波长则越长,所以更容易越过障碍物,能量衰减就小,声音传播的就远。反之则会得到相反的结论。

振幅:用不同的力度敲击物体,它的声音大小不一样,它的能量也不一样,声音越大振幅越高。

波形/音色: 音色就是在同样的频率(音调)和响度(振幅)下,敲击键盘或者撞击物体是完全不同的。波的形状代表了声音的音色。

如何进行声音进行保存呢? 对声音的采样常用麦克风等设备将声音信号转换成电信号,再用模/数转换器将电信号转换成一串用1和0表示的二进制数字(数字信号)。每秒对声音采样上万次,获得上万个按照时间顺序排列的二进制数字,然后将连续变化不断的声音转化成了计算机可储存并识别的二进制数字。

为了将模拟信号数字化,需要进行:采样,量化,编码。

首先要对模拟信号进行采样,所谓采样就是在时间轴上对信号进行数字化。根据奈奎斯特定理(也称采样定理),按比声音最高频率高 2 倍以上的频率对声音进行采样,对于高质量的音频信号,其频率范围在 20Hz ~ 20kHz ,所以采样频率一般为 44.1kHz ,这样就保证采样声音达到 20kHz 也能被数字化,从而使得经过数字化处理之后,人耳听到的声音质量不会被降低。而所谓的 44.1 kHz 就是代表 1 s 会采样 44100 次。

每个采样又该如何表示呢?进行量化。量化是指在幅度轴上对信号进行数字化。量化位数越大,声音的质量越高。常用的量化位数有8位、16位和32位。量化位数指用几位二进制数来存储采样获得的数据。量化位数为8即指用8位二进制数来存储数据,如0001011

比如用 16 bit 的二进制信号来表示声音的一个采样,而 16 bit 所表示的范围是 [-32768 , 32767] , 共有 65536 个可能取值,因此最终模拟的音频信号在幅度上也分为了 65536 层。

编码,就是按照一定的格式记录采样和量化后的数字数据,比如顺序存储或压缩存储等等。

这里涉及了很多种格式,通常所说的音频的裸数据就是 PCM (Pulse Code Molation) 数据。描述一段 PCM 数据一般需要以下几个概念:量化格式(sampleFormat)、采样率(sampleRate)、声道数 (channel) 。以 CD 的音质为例:量化格式为 16 bit (2 byte),采样率 44100 ,声道数为 2 ,这些信息就描述了 CD 的音质。而对于声音的格式,还有一个概念用来描述它的大小,称为数据比特率,即 1s 时间内的比特数目,它用于衡量音频数据单位时间内的容量大小。而对于 CD 音质的数据,比特率为多少呢? 计算如下:

那么在一分钟里,这类 CD 音质的数据需要占据多大的存储空间呢?计算如下:

当然,如果 sampleFormat 更加精确 (比如用 4 个字节来描述一个采样),或者 sampleRate 更加密集 (比如 48kHz 的采样率), 那么所占的存储空间就会更大,同时能够描述的声音细节就会越精确。存储的这段二进制数据即表示将模拟信号转为数字信号了,以后就可以对这段二进制数据进行存储,播放,复制,或者进行其它操作。

关于这3个过程,可以看下这篇文章,图形表示采样,量化,编码的过程更容易理解。 https://www.bilibili.com/read/cv1771961/

所以说:

1)采样:在时间轴上对信号数字化;

2)量化:在幅度轴上对信号数字化;

3)编码:按一定格式记录采样和量化后的数字数据。

声道(sound channel)是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,所以声道数也就是声音录制时的声音源数量或者回放时相应的扬声器数量。

常见的有:单声道,立体声道,4声道,5.1声道,7.1声道等。在移动端一般是单声道,立体声道。

上面提到了 CD 音质的数据采样格式,曾计算出每分钟需要的存储空间约为 10.09 MB ,如果仅仅是将其存储在光盘或者硬盘中,可能是可以接受的,但是若要在网络中实时在线传输的话,那么这个数据量可能就太大了,所以必须对其进行压缩编码。压缩编码的基本指标之一就是压缩比,压缩比通常小于 1 。压缩算法包括有损压缩和无损压缩。无损压缩是指解压后的数据可以完全复原。在常用的压缩格式中,用的较多的是有损压缩,有损压缩是指解压后的数据不能完全恢复,会丢失一部分信息,压缩比越小,丢失的信息就比越多,信号还原后的失真就会越大。根据不同的应用场景 (包括存储设备、传输网络环境、播放设备等),可以选用不同的压缩编码算法,如 PCM 、WAV、AAC 、MP3 、Ogg 等。

WAV 编码就是在 PCM 数据格式的前面加了 44 个字节,分别用来存储 PCM 的采样率、声道数、数据格式等信息。

特点: 音质好,大量软件支持。

场景: 多媒体开发的中间文件、保存音乐和音效素材。

MP3 具有不错的压缩比,使用 LAME 编码 (MP3 编码格式的一种实现)的中高码率的 MP3 文件,听感上非常接近源 WAV 文件,当然在不同的应用场景下,应该调整合适的参数以达到最好的效果。

特点: 音质在 128 Kbit/s 以上表现还不错,压缩比比较高,大量软件和硬件都支持,兼容性好。

场景: 高比特率下对兼容性有要求的音乐欣赏。

AAC 是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如 PS 、SBR) 等,衍生出了 LC-AAC 、HE-AAC 、HE-AAC v2 三种主要的编码格式。LC-AAC 是比较传统的 AAC ,相对而言,其主要应用于中高码率场景的编码 (>=80Kbit/s) ; HE-AAC 相当于 AAC + SBR 主要应用于中低码率的编码 (<= 80Kbit/s); 而新推出的 HE-AAC v2 相当于 AAC + SBR + PS 主要用于低码率场景的编码 (<= 48Kbit/s) 。事实上大部分编码器都设置为 <= 48Kbit/s 自动启用 PS 技术,而 > 48Kbit/s 则不加 PS ,相当于普通的 HE-AAC。

特点: 在小于 128Kbit/s 的码率下表现优异,并且多用于视频中的音频编码。

场景: 128 Kbit/s 以下的音频编码,多用于视频中音频轨的编码。

Ogg 是一种非常有潜力的编码,在各种码率下都有比较优秀的表现,尤其是在中低码率场景下。Ogg 除了音质好之外,还是完全免费的,这为 Ogg 获得更多的支持打好了基础,Ogg 有着非常出色的算法,可以用更小的码率达到更好的音质,128 Kbit/s 的 Ogg 比 192kbit/s 甚至更高码率的 MP3 还要出色。但是目前因为还没有媒体服务软件的支持,因此基于 Ogg 的数字广播还无法实现。Ogg 目前受支持的情况还不够好,无论是软件上的还是硬件上的支持,都无法和 MP3 相提并论。

特点: 可以用比 MP3 更小的码率实现比 MP3 更好的音质,高中低码率下均有良好的表现,兼容性不够好,流媒体特性不支持。

场景: 语言聊天的音频消息场景。

压缩编码的原理实际上就是压缩调冗余信号,冗余信号是指哪些不能被人感知到的信号,包含人耳听觉范围之外的音频信号以及被屏蔽掉的音频信号等,这些冗余信息进行编码处理。

一般在音视频通话,直播中,短视频,以及大部分的视频都是用aac编码。

本篇主要是介绍了音频的一些基础知识和概念,对于后续学习音频的编解码有帮助,而不会一脸懵。

备注

B. 问下关于android编程的问题····声波测距方面的

纯理论上可行,几乎无法实现,实际不可行。android里面没有声波衰减扩散之类的api,只有接收语言或录音的api。你可以采用录音的方式去判断信号强度,但是这个比目测的效果还要差,还要考虑环境干扰,实际传送距离。可以考虑用比如蓝牙,红外,等,但是难度也很大,蓝牙只能10米左右,10m内测量精度达不到cm级别,还不如用脚投票准,另外红外需要对方向,就算有大神能写出算法,也用不到实际上。另外还有些理论上几乎也不可行的什么android设备上的摄像头和光敏感应实现测量。

C. Android音频采集

最近项目中需要实现手机采集声音频率实现设备律动的效果,整理了下Android与声音相关的知识。 根据声音振幅、频率获取颜色值,通过蓝牙mesh发送指令给灯改变其颜色值。 Android声音采集相关Api 快速傅里叶变换公式 Mesh网发送rgb值相关指令 人主观感觉声音的大小(音量),振幅与人离声源的距离决定,振幅越大,离声源的距离越小,响度越大。 LP= 20×lgP/P0 LP:声压级(db) P:声压(Pa) P0:基准声压:2*10-5Pa,该值是对800HZ声音人耳刚能听到的最低声压。 声音的高低,由频率决定,频率越高,音调越高。 频率是每秒经过一给定点的声波数量,单位赫兹(Hz) 人耳能听到20~20kHz的声音。 音品,波形决定声音的音色。 MediaRecorder:基于文件录音,已集成录音、编码、压缩 把模拟信号数字化的过程 采样频率越高,红色间隔越密集,记录音频所用数据量越大,音频质量越高。 采样定理(奈奎斯特理论):当采样频率大于信号中最高频率的2倍时,采样后的数字信号完整地保留原始信号中的信息。人耳能听到20~20kHz的声音,为了保证声音不失真,采样频率应在40kHz以上。 目前44100Hz是唯一可以保证兼容所有Android手机的采样率。 指将模拟信号分成几个等级,量化精度越高,声音质量越好,单位Bit。 CD标准量化精度16Bit,DVD标准量化精度24Bit。 16Bit可以保证兼容所有Android手机。 音频采集、播放可以叠加,可以同时从多个音频源采集声音,例如:单声道/双声道。 即采样时间,例如20ms一帧代表20ms为单位的数据量为一帧音频。 一帧音频帧大小 = 采样率 x 位宽 x 采样时间 x 通道数 例:采样率8000,位宽8,通道2,采样间隔20ms (8000 * 8/8 *2)/ (1000/20 ) = 320Byte //1字节 = 8 bits 对audioData进行快速傅里叶变化,时域->频域的变化,可以将信号的频谱提取出来。 傅立叶变换就是多个正余弦波叠加可以用来近似任何一个原始的周期函数,它实质是是频域函数和时域函数的转换。 Visualizer:检索当前正在播放的音频,对其进行编码 以下基于AudioRecord采集的音频数据后进行快速傅里叶变换得到频率值

D. 移动端短语音消息音频格式选择

1. 移动端原生音频支持

1.1 android Supported media formats

https://developer.android.com/guide/topics/media/media-formats

Format / File Type(s) / Container Formats

AAC LC••Support for mono/stereo/5.0/5.1 content with standard sampling rates from 8 to 48 kHz.• 3GPP (.3gp)

• MPEG-4 (.mp4, .m4a)

• ADTS raw AAC (.aac, decode in Android 3.1+, encode in Android 4.0+, ADIF not supported)

• MPEG-TS (.ts, not seekable, Android 3.0+)

HE-AACv1 (AAC+)•

(Android 4.1+)



HE-AACv2 (enhanced AAC+)•Support for stereo/5.0/5.1 content with standard sampling rates from 8 to 48 kHz.

AAC ELD (enhanced low delay AAC)•

(Android 4.1+)



(Android 4.1+)

Support for mono/stereo content with standard sampling rates from 16 to 48 kHz

AMR-NB••4.75 to 12.2 kbps sampled @ 8kHz3GPP (.3gp)

AMR-WB••9 rates from 6.60 kbit/s to 23.85 kbit/s sampled @ 16kHz3GPP (.3gp)

FLAC•

(Android 4.1+)



(Android 3.1+)

Mono/Stereo (no multichannel). Sample rates up to 48 kHz (but up to 44.1 kHz is recommended on devices with 44.1 kHz output, as the 48 to 44.1 kHz downsampler does not include a low-pass filter). 16-bit recommended; no dither applied for 24-bit.FLAC (.flac) only

MIDI•MIDI Type 0 and 1. DLS Version 1 and 2. XMF and Mobile XMF. Support for ringtone formats RTTTL/RTX, OTA, and iMelody• Type 0 and 1 (.mid, .xmf, .mxmf)

• RTTTL/RTX (.rtttl, .rtx)

• OTA (.ota)

• iMelody (.imy)

MP3•Mono/Stereo 8-320Kbps constant (CBR) or variable bit-rate (VBR)MP3 (.mp3)

Opus•

(Android 5.0+)

Matroska (.mkv)

PCM/WAVE•

(Android 4.1+)

•8- and 16-bit linear PCM (rates up to limit of hardware). Sampling rates for raw PCM recordings at 8000, 16000 and 44100 Hz.WAVE (.wav)

Vorbis•• Ogg (.ogg)

• Matroska (.mkv, Android 4.0+)

1.2 Supported Audio File and Data Formats in OS X

https://developer.apple.com/library/content/documentation/MusicAudio/Conceptual/CoreAudioOverview/SupportedAudioFormatsMacOSX/SupportedAudioFormatsMacOSX.html

Allowable data formats for each file format.

File FormatData Formats

AAC (.aac, .adts)'aac '

AC3 (.ac3)'ac-3'

AIFC (.aif, .aiff,.aifc)BEI8, BEI16, BEI24, BEI32, BEF32, BEF64, 'ulaw', 'alaw', 'MAC3', 'MAC6', 'ima4' , 'QDMC', 'QDM2', 'Qclp', 'agsm'

AIFF (.aiff)BEI8, BEI16, BEI24, BEI32

Apple Core Audio Format (.caf)'.mp3', 'MAC3', 'MAC6', 'QDM2', 'QDMC', 'Qclp', 'Qclq', 'aac ', 'agsm', 'alac', 'alaw', 'drms', 'dvi ', 'ima4', 'lpc ', BEI8, BEI16, BEI24,BEI32, BEF32, BEF64, LEI16, LEI24, LEI32, LEF32, LEF64, 'ms\x00\x02', 'ms\x00\x11', 'ms\x001', 'ms\x00U', 'ms \x00', 'samr', 'ulaw'

MPEG Layer 3 (.mp3)'.mp3'

MPEG 4 Audio (.mp4)'aac '

MPEG 4 Audio (.m4a)'aac ', alac'

NeXT/Sun Audio (.snd, .au)BEI8, BEI16, BEI24, BEI32, BEF32, BEF64, 'ulaw'

Sound Designer II (.sd2)BEI8, BEI16, BEI24, BEI32

WAVE (.wav)LEUI8, LEI16, LEI24, LEI32, LEF32, LEF64, 'ulaw', 'alaw'

Core Audio includes a number of audio codecs that translate audio data to and from Linear PCM. Codecs for the following audio data type are available in OS X v10.4. Audio applications may install additional encoders and decoders.

Audio data typeEncode from linear PCM?Decode to linear PCM?

MPEG Layer 3 ('.mp3')NoYes

MACE 3:1 ('MAC3')YesYes

MACE 6:1 ('MAC6')YesYes

QDesign Music 2 ('QDM2')YesYes

QDesign ('QDMC')NoYes

Qualcomm PureVoice ('Qclp')YesYes

Qualcomm QCELP ('qclq')NoYes

AAC ('aac ')YesYes

Apple Lossless ('alac')YesYes

Apple GSM 10:1 ('agsm')NoYes

ALaw 2:1 'alaw')YesYes

Apple DRM Audio Decoder ('drms')NoYes

AC-3NoNo

DVI 4:1 ('dvi ')NoYes

Apple IMA 4:1 ('ima4')YesYes

LPC 23:1 ('lpc ')NoYes

Microsoft ADPCMNoYes

DVI ADPCMYesYes

GSM610NoYes

AMR Narrowband ('samr')YesYes

µLaw 2:1 ('ulaw')YesYes

1.3 总结:

android/ios都可以对mp3解码,但不能编码,编码依赖lame;

android/ios支持对aac进行编解码;

mp3,aac均是音乐编码器,android支持对amr窄带与宽带编解码,ios文档显示对窄带支持编解码,但有人说ios4.3.x版本之后不再支持AMR,剔除了AMR的硬解,如需使用依赖libopencore库;

结论:

h5 audio标签对mp3支持最好(audio标签除了firefox与opera都支持mp3,ogg,wav;flash播放器可以支持到mp3,aac,speex,nellymoser),考虑对纯web的兼容性,使用mp3;

android,ios硬件对aac支持最好,考虑硬编码的性能与效率,使用aac;

amr是语音编码器,考虑使用场景,推荐amr.

对比微信,微信短语音,6.0之前用的amr,6.0之后用的silk_v3.

2.音频基础概念

2.1声音三要素

声音的特性可由三个要素来描述,即响度、音调和音色。

响度:人耳对声音强弱的主观感觉称为响度。响度和声波振动的幅度有关。一般说来,声波振动幅度越大则响度也越大。当我们用较大的力量敲鼓时,鼓膜振动的幅度大,发出的声音响;轻轻敲鼓时,鼓膜振动的幅度小,发出的声音弱。音叉振动时发出的声波为单音,即只有一个频率成分。若设法将音叉的振动规律记录下来,可发现其振动波形为一正弦波。当用不同力量敲击某个音叉时,音叉发出的声波幅度不同,这意味着声音的响度不同。给出了两个声音波形,其幅度一大一小,幅度大的波形其声音响度大,幅度小的波形其声音响度小。另外,人们对响度的感觉还和声波的频率有关,同样强度的声波,如果其频率不同,人耳感觉到的响度也不同。

音调:人耳对声音高低的感觉称为音调。音调主要与声波的频率有关。声波的频率高,则音调也高。当我们分别敲击一个小鼓和一个大鼓时,会感觉它们所发出的声音不同。小鼓被敲击后振动频率快,发出的声音比较清脆,即音调较高;而大鼓被敲击后振动频率较慢,发出的声音比较低沉,即音调较低。如果分别敲击一个小音叉和一个大音叉时,同样会感觉到小音叉所发声音的音调较高,大音叉所发声音音调较低。如果设法把大、小音叉所发出的声波记录下来,可发现小音叉在单位时间内振动的次数多,即频率高,大音叉在单位时间内振动的次数少,即频率低。给出了两个频率不同的声音波形,从声音可听出,频率高的声音波形听起来音调较高,而频率低的声音波形听起来则音调较低。

音色:音色是人们区别具有同样响度、同样音调的两个声音之所以不同的特性,或者说是人耳对各种频率、各种强度的声波的综合反应。音色与声波的振动波形有关,或者说与声音的频谱结构有关。前面说过,音叉可产生一个单一频率的声波,其波形为正弦波。但实际上人们在自然界中听到的绝大部分声音都具有非常复杂的波形,这些波形由基波和多种谐波构成。谐波的多少和强弱构成了不同的音色。各种发声物体在发出同一音调声音时,其基波成分相同。但由于谐波的多少不同,并且各次谐波的幅度各异,因而产生了不同的音色。例如当我们听胡琴和扬琴等乐器同奏一个曲子时,虽然它们的音调相同,但我们却能把不同乐器的声音区别开来。这是因为,各种乐器的发音材料和结构不同,它们发出同一个音调的声音时,虽然基波相同,但谐波构成不同,因此产生的波形不同,从而造成音色不同。给出了小提琴和钢琴的波形和声音,这两个声音的响度和音调都是相同的,但听起来却不一样,这就是因为这两个声音的音色不同(波形不同)。

2.2采样率和采样大小

声音其实是一种能量波,因此也有频率和振幅的特征,频率对应于时间轴线,振幅对应于电平轴线。波是无限光滑的,弦线可以看成由无数点组成,由于存储空间是相对有限的,数字编码过程中,必须对弦线的点进行采样。采样的过程就是抽取某点的频率值,很显然,在一秒中内抽取的点越多,获取得频率信息更丰富,**为了复原波形,一次振动中,必须有2个点的采样**,人耳能够感觉到的最高频率为20kHz,因此要满足人耳的听觉要求,则需要至少每秒进行40k次采样,用40kHz表达,这个40kHz就是采样率。我们常见的CD,采样率为44.1kHz。光有频率信息是不够的,我们还必须获得该频率的能量值并量化,用于表示信号强度。量化电平数为2的整数次幂,我们常见的CD位16bit的采样大小,即2的16次方。采样大小相对采样率更难理解,因为要显得抽象点,举个简单例子:假设对一个波进行8次采样,采样点分别对应的能量值分别为A1-A8,但我们只使用2bit的采样大小,结果我们只能保留A1-A8中4个点的值而舍弃另外4个。如果我们进行3bit的采样大小,则刚好记录下8个点的所有信息。采样率和采样大小的值越大,记录的波形更接近原始信号。

2.3有损和无损

根据采样率和采样大小可以得知,相对自然界的信号,音频编码最多只能做到无限接近,至少目前的技术只能这样了,相对自然界的信号,任何数字音频编码方案都是有损的,因为无法完全还原。在计算机应用中,能够达到最高保真水平的就是PCM编码,被广泛用于素材保存及音乐欣赏,CD、DVD以及我们常见的WAV文件中均有应用。因此,PCM约定俗成了无损编码,因为PCM代表了数字音频中最佳的保真水准,并不意味着PCM就能够确保信号绝对保真,PCM也只能做到最大程度的无限接近。我们而习惯性的把MP3列入有损音频编码范畴,是相对PCM编码的。强调编码的相对性的有损和无损,是为了告诉大家,要做到真正的无损是困难的,就像用数字去表达圆周率,不管精度多高,也只是无限接近,而不是真正等于圆周率的值。

2.4频率与采样率的关系

采样率表示了每秒对原始信号采样的次数,我们常见到的音频文件采样率多为44.1KHz,这意味着什么呢?假设我们有2段正弦波信号,分别为20Hz和20KHz,长度均为一秒钟,以对应我们能听到的最低频和最高频,分别对这两段信号进行40KHz的采样,我们可以得到一个什么样的结果呢?结果是:20Hz的信号每次振动被采样了40K/20=2000次,而20K的信号每次振动只有2次采样。显然,在相同的采样率下,记录低频的信息远比高频的详细。这也是为什么有些音响发烧友指责CD有数码声不够真实的原因,CD的44.1KHz采样也无法保证高频信号被较好记录。要较好的记录高频信号,看来需要更高的采样率,于是有些朋友在捕捉CD音轨的时候使用48KHz的采样率,这是不可取的!这其实对音质没有任何好处,对抓轨软件来说,保持和CD提供的44.1KHz一样的采样率才是最佳音质的保证之一,而不是去提高它。较高的采样率只有相对模拟信号的时候才有用,如果被采样的信号是数字的,请不要去尝试提高采样率。

亨利·奈奎斯特(Harry Nyquist)采样定理:当对连续变化的信号波形进行采样时,若采样率fs高于该信号所含最高频率的两倍,那么可以由采样值通过插补技术正确的回复原信号中的波形,否则将会引起频谱混叠(Aliasing),产生混叠噪音(Aliasing Noise),而重叠的部分是不能恢复的.(同样适用于模拟视频信号的采样)

根据人声语音的特点,人类的听力感知范围是从20Hz到20kHz。这个频宽范围被划分成四个频宽类别:窄带、宽带、超宽带和全带。

窄带(narrowband)普通电话所覆盖的频宽,从300Hz到3.4kHz,对应采样率6.8kHz。普通电话的采样率是8kHz,对应频宽4kHz,对于人声语音是足够的。

宽带(wideband)从50Hz到7kH的频宽,对应采样率14khz,可以很好地捕捉和还原人声,然而对于音乐声还是不够的。这是在人声语音通话场景下的所谓高清语音。

超宽带(super-wideband)从50Hz到14kHz,对应采样率28kHz,基本可以覆盖人声和音乐声,对于非专业音乐人的用户来说,不管是人声通话还是音乐直播,这样的频宽都是足够的。

全带(fullband)从20Hz到20kHz,对应40kHz采样率,全面覆盖人类的听觉范围,能够满足音乐发烧友或者专业音乐人的需求。超过40Hz都可以称作全带语音。CD的采样率就是44.1kHz。

因此,窄带(narrowband)的音质是能满足人声录制回放的。

从四个角度衡量音频编码:

成本:开发成本,服务器流量成本

音质:

系统影响:对系统资源的暂用,软编解码器比硬编解码器占用更多cpu

兼容性:对移动端以及web端的兼容

适合产品场景的编码器具备以下四个特点

码率相对低,满足成本可控的要求,一般不要超过16kbps。一个sample用1bit就能编好,那么8kHz采样率(narrowband)对应8kbps的码率,16kHz采样率(wideband)对应16kbps的码率。码率的本质就是成本。

算法复杂度要比较低,对系统CPU、内存和电量消耗少,对系统影响要尽量低。

音质可以适当作出牺牲,以保障上面三个因素,8kHz采样率对人声场景是够用的,16kHz采样率可以提供高清语音。

兼顾兼容性

3.主流音频编码器

音频编码格式的比较: https://zh.wikipedia.org/wiki/%E9%9F%B3%E9%A2%91%E7%BC%96%E7%A0%81%E6%A0%BC%E5%BC%8F%E7%9A%84%E6%AF%94%E8%BE%83

下图列举一组主流的音频编解码器,展示了随着码率变化,音质相应变化的情况。这是基于编解码器听音测试的结果绘画出来的,对选取音频编解码器有参考意义。根据上面的分析并且参照下图,发现码率低于16kbps的低码率人声编解码器(speech codecs)包含:Opus(SILK),Speex,AMR-NB,AMR-WB,和iLBC。

下图是另外一组主流的音频编解码器,展示了随着码率的变化,算法延迟时间相应变化的情况。根据上面的分析并且参照下图,发现算法延迟时间低于60毫秒,码率低于16kbps的人声编解码器(speech codecs)包含:Opus(SILK)、Speex(NB,WB)、G.729、和G.729.1。

从图中我们可以获得如下几方面信息:

对于固定码率的编码标准:如G.711或者G.722,图中采用单点表示,说明这两个编码标准是固定码率编码标准。其他如Opus、Speex,它们的曲线是连续的,说明这类编码标准是可变码率的编码标准。

从频带方面看:G.711、G.722、AMR和iLBC等标准适用于narrowband(8khz采样率)和wideband(16khz采样率)范围,针对普通的语音通话场景。AAC和MP3适用于fullband(48khz采样率)范围,针对特殊的音乐场景。而Opus适用于整个频带,可以进行最大范围的动态调节,适用范围最广。

从标准的收费情况看:适用于互联网传输的iLBC、Speex和Opus都是免费且开源的;适用于音乐场景的MP3和AAC,需要license授权,而且不开源。

综合上面的两个图,我们可以大致总结,比较适合人声短语音的音频编解码器包含Opus(SILK)、Speex(NB,WB)、AMR-NB、AMR-WB、iLBC、G.729、和G.729.1。

码率采样率算法延迟

OPUS(SILK)6-12,7-25,

8-30,12-40kbps

8,12,

16,24kHz

25ms

Speex2.15–24.6 kbps (NB)

4–44.2 kbps (WB)

8, 16,

32, 48kHz

30 ms(NB)

34 ms (WB)

AMR-NB4.75, 5.15, 5.90,

6.70, 7.40, 7.95,

10.20, 12.20 kbps

8kHz25ms (20ms per frame

plus 5ms look-ahead,

20ms for 12.2 kbps)

AMR-WB6.60, 8.85, 12.65,14.25, 15.85, 18.25, 19.85, 23.05, 23.85 kbps16kHz25ms (20ms per frame

plus 5ms look-ahead)

iLBC13.33 kbps

15.20 kbps

8kHz25 ms

40 ms

G.7298kbps8kHz15 ms

G.729.18 kbps,

12–32 kbps

8kHz

16kHz

48.94ms

Codec20.7, 1.2, 1.3, 1.4,

1.6, 2.4, 3.2 kbps

8kHz20–40 ms

(额外增加的,超低码率)

短语音不同于实时语音,可以忽略延迟

上面都是为人声场景设计的低码率音频编解码器,具有码率低(16kbps以下),算法延迟低(大部分在40ms以下),和采样率在8kHz和16kHz之间的特点,都可供短语音编码方案选择。其中,有几个语音编解码器值得在这里稍作介绍:

Opus(SILK)

https://en.wikipedia.org/wiki/Opus_(audio_format)

完全开源而且免费,包含了SILK、CELT、以及两者的混合模式,是目前最为兼容并包的音频编解码器。在处理窄带和宽带人声语音(speech)的时候,采用SILK; 在处理超宽带和全带音乐声音(music)的时候,采用CELT。在人声和音乐声混合的场景中,甚至可以智能切换两个编解码器。WebRTC就采用了Opus作为语音编解码器。而SILK是Skype网络电话所用的语音编解码器。Opus真可谓是久经考验的名门精品。根据即构科技的测试结果,Opus虽然在音乐场景中表现并非首选,但是在人声场景中表现十分出色。

iLBC

完全开源而且免费的,由GIPS开发并被IETF标准化,曾经被QQ和Skype使用过,现在被WebRTC使用,是被世界顶级产品证明过的窄带实时语音编解码器。iLBC能够通过平滑降低语音质量的方式来处理IP网络丢包。由于iLBC的语音帧块之间是相互独立的,在丢帧出现的时候也不会导致错误蔓延,因此具有较强的抗丢包能力。在窄带应用环境中,iLBC具有延迟低,无断续或杂音的特点,通话效果可以和移动电话媲美。

Speex

免费的人声音频编解码器。因为Speex是为VoIP专门设计的,所以Speex对IP网络有很强的抗丢包能力。为了达到这个目的,Speex采用了CELP算法。市场上狼人杀产品的游戏实时语音技术,厂商自研的方案采用了Speex。

Codec2

开源并且专利免费,码率超低的人声语音编解码器。码率在0.7 kbps至3.2 kbps。Codec2填补了开源编码器在5 kbps码率以下的空白。

评估音频编码指标,除码率、采样率、和算法延迟以外,还要参考MOS、VBR/CBR、和基础算法等。其中,MOS (Mean Opinion Score)是语音编解码器的主观评估指标。MOS是一个广为接受的有统计意义的主观听音指标。上面音视频编解码器的列表没有把它包含进去,是因为同一个编解码器,在不同码率下,表现出来的MOS值是会变化的。对一个音频编解码器给出一个固定的MOS值,反而会起误导的作用。另外,虽然MOS值已经是主观的听觉测试评估结果,但是音频工程师在选用音频编解码器的时候,还要以自己亲身的听感作为最终的依据。

下图是Nokia在2011年的时候对Opus、AMR、和G.722.1C等音频编解码器在无噪音和有噪音的环境里做的MOS语音测试的结果。我们可以从语音测试的结果看出:

1)MOS值会随着码率变化。固定的MOS值并没有绝对的参考意义。

2)在低码率情况下,AMR-NB和AMR-WB都表现相对出色。

参考:

1.Getting Started with Audio & Video: https://developer.apple.com/library/content/referencelibrary/GettingStarted/GS_MusicAudio/_index.html

2.Opus ios: https://github.com/chrisballinger/Opus-iOS

3.android opus: https://gitlab.com/axet/android-opus

4.opus_android: https://github.com/louisyonge/opus_android

5.opuscodec: https://github.com/martoreto/opuscodec

6.与大家讨论如何用opencore amr在iOS上decode: https://blog.csdn.net/devday/article/details/6804553

7. ios支持 https://developer.apple.com/library/archive/documentation/MusicAudio/Conceptual/CoreAudioOverview/CoreAudioEssentials/CoreAudioEssentials.html#//apple_ref/doc/uid/TP40003577-CH10-SW13

E. 一些手机app真的可以发出声波来驱走蚊子吗

手机app发出的声波,当然赶不走蚊子,如果仅仅依靠手机app就可以达到驱赶蚊子的效果,那么全世界的蚊香厂包括电蚊拍厂估计早就倒闭了。

一、手机扬声器根本发不出超声波。

首先网上下载的app总是发出嗡嗡的声音,那并不是超声波。消灭蚊子目前最有效的方法就是蚊香和电蚊拍,一种物理方法,一种化学方法。但是建议是最好是用电蚊拍这种物理方法消灭蚊子,或者使用传统的蚊帐。效果也非常好,而且蚊子并不是根据血型来选择猎物的。蚊子是根据热量和排出的二氧化碳量来选择猎物的。所以一般代谢较快的人更吸引蚊子,所以胖子招蚊子,这句话并不是空穴来风。

F. 有没有大神 用Android实现仿照Siri声波曲线

代码实现

波浪其实是由4条贝塞尔曲线组成的,可以在自定义View的onDraw函数中,用Path.quadTo函数画出4条曲线。

Path.quadTo(float x1, float y1, float x2, float y2)

其中,x1,y1为控制点的坐标值,x2,y2为终点的坐标值;当控制点的x1位于起点与终点之间时,将画出正弦曲线,此时y1控制正弦曲线的高度,即效果图中波浪的高度由y1控制。
实现了曲线绘制和高度控制之后,如何让曲线像波浪一样动起来呢?
我的解决方法是在屏幕左边,即x<0的位置,同样绘制4条正弦曲线,并且启动线程让8条曲线都向右移动,当左边4条曲线全部移动到屏幕内后,让这8条曲线复位。如此周期进行。
解析

使用方法

在xml中,

<com.tao.view.SiriView
android:id="@+id/siriView"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_centerInParent="true"/>

在Activity.Java中,

SiriView siriView = (SiriView) findViewById(R.id.siriView);
// 停止波浪曲线
siriView.stop();
// 设置曲线高度,height的取值是0f~1f
siriView.setWaveHeight(0.5f);
// 设置曲线的粗细,width的取值大于0f
siriView.setWaveWidth(5f);
// 设置曲线颜色
siriView.setWaveColor(Color.rgb(39, 188, 136));
// 设置曲线在X轴上的偏移量,默认值为0f
siriView.setWaveOffsetX(0f);
// 设置曲线的数量,默认是4
siriView.setWaveAmount(4);
// 设置曲线的速度,默认是0.1f
siriView.setWaveSpeed(0.1f);

G. android铃声剪辑软件的波形图怎么实现的

首先我先从手机录制声音的原理来给你说吧。
我们的话筒并不能直接录制我们的声音。而是通过我们的声音发出的声波改变了电流量还是电阻忘了的大小,然后我们的手机CPU也就是我们手机的大脑,记录这个变化的过程,当我们要播放我们的录音的时候。手机,再把记录的变化过程还原R铃声剪辑中的波形图,也就是我们的声波形状。有些时候我们会看见波形图,有些时候会高,有些时候会低。

H. 有没有大神 用Android实现仿照Siri声波曲线

类似苹果siri的安卓软件当然有,讯飞语音助手、网络语音助手。。。。还有的名字想不起来了,不过好像都不支持西班牙语,可以到美玩吧下载这些语音软件试试看,

阅读全文

与android声波效果相关的资料

热点内容
python代码精简 浏览:455
文件加密了怎么找到了 浏览:193
jellyfin插件怎么选择主服务器 浏览:836
asp用户注册源码 浏览:48
什么是照片压缩文件 浏览:392
java调用js代码 浏览:979
昆山市民app怎么修改身份信息 浏览:779
php登陆次数 浏览:744
python字符转成数字 浏览:822
海川用的是什么服务器 浏览:376
口才是练出来的pdf 浏览:458
云服务器哪个公司性价比高 浏览:517
源码论坛打包 浏览:558
php怎么做成word 浏览:692
python批量生成密钥 浏览:492
程序员要不要考社区人员 浏览:150
app的钱怎么充q币 浏览:814
android银行卡识别 浏览:756
怎么在app投放广告 浏览:11
手机文件管理怎么看app名称 浏览:192