音视频的高级天龙八部三进阶是什么么意思?

新东方一线专业名师及外教批改团队
破解官方标准 精准评估40余种错误无处遁形
质量为王 极速批改一日加急完成
【资料】新托福考试专项进阶高级写作音频文件
来自: 大爱dd
 【新托福考试专项进阶高级写作音频文件】
贴子才可以下载和查看附件。
  王子睿,新东方教育科技集团演讲师,北京新东方学校优秀教师,隶属北美考试部,资深托福写作主讲。2006年获北京新东方“学习之星”首都大学生英语 风采大赛前十名,大学三年级开始新东方教师生涯。子睿老师是个实力派,真正懂得托福写作的真谛,让我们颇受启发。记得他很幽默得说:“用模板,死得惨。” “用百度,穿秋裤。”等这些经典语录其实都很反映托福的作文技巧。子睿老师还是一个很和蔼可亲的人,每个课间都在耐心的解答同学们的问题,这也极大丰富了 学生的写作经验
来自: Hunter_qq89742
来自: lilanlan
来自: xiao_dian
来自: JenniferZXR
来自: liuaozhi
谢谢楼主了!
来自: liuaozhi
来自: DOUGLASSSS
来自: Mr.Bean
来自: phoebeol
来自: Demon骸云
来自: qinyuyouyang
来自: 4055106
谢谢啊 收了
来自: dgtrfxdasdghty
来自: Braine
不错 不错!!!!!!!!!!!
来自: lww828
谢谢老师耶
来自: Lacee
楼主辛苦了
来自: maikaalbarn
来自: Amywithu
来自: cornerlsr
确定删除用户回帖吗?此操作是不可恢复的!
大爱dd的最新话题
最爱酸辣粉
最爱酸辣粉
新东方教育科技集团旗下成员公司新东方批改网版权所有京ICP备全国客服专线:400-676-2300:转载时请以超链接形式标明文章原始出处和作者信息及本声明
急新托福考试专项进阶 口语求新托福考试专项进阶 高级口语的一个音频 只要一个哦就是3-07的谢谢帮忙高分
我有的,不过你的邮箱是什么??
历史上的今天:
:转载时请以超链接形式标明文章原始出处和作者信息及本声明
急新托福考试专项进阶 口语求新托福考试专项进阶 高级口语的一个音频 只要一个哦就是3-07的谢谢帮忙高分
我有的,不过你的邮箱是什么??
历史上的今天:Android学习笔记(67)
在Android2.3中增加了对音频混响的支持,这些API包含在android.media.audiofx包中。
AudioEffect是android audio framework(android 音频框架)提供的音频效果控制的基类。开发者不能直接使用此类,应该使用它的派生类。派生类有:Equalizer,Visualizer,BassBoost,PresetReverb,EnvironmentalReverb
这篇文章我们主要讲一下Visualizer,其他的这里简单介绍一下!
Equalizer,均衡器:
这个设置我们可以增加或降低某一频率的声音响度来达到想要的效果!
BassBoost,重低音控制器:
这个设置我们可以增加低音的强度,一般在电子音乐中使用的比较多!
PresetReverb,预设音场控制器,EnvironmentalReverb,环境混响控制器
这两个比较特殊,Reverb,回响,这两个设置会使音乐通过声音在不同路径传播下造成的反射叠加产生的声音特效!举个例子:比如流行,古典,爵士,电子等或者比如马路,走廊,室内,大厅等!
推荐在游戏场景中应用EnvironmentalReverb,在音乐场景中应用PresetReverb。如果混响作用于主要的音频输出混音器(mix)上,混响将会话ID指定为0需要"android.permission.MODIFY_AUDIO_SETTINGS"权限。
下面到我们的重点Visualizer,就如字面意思所示,可视化!使用它可以将音频直观的反映的界面上!是Android Audio框架中比较重要的一块内容。在官方的Demo中,我们可以了解它的使用:
①获取实例:
visualizer = new Visualizer(mediaPlayer.getAudioSessionId());
②设置采样值:
visualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1])
通过Visualizer.getCaptureSizeRange()这一底层实现的方法来返回一个采样值的范围数组,0为最小值128,1为最大值1024!采样值都为2的n次幂!
③设置监听器
setDataCaptureListener(OnDataCaptureListener listener, rate,iswave,isfft )
先说后面三个参数:rate采样的频率,下边通过方法Visualizer.getMaxCaptureRate()返回最大的采样频率,单位为milliHertz毫赫兹,iswave是波形信号,isfft是频域信号。
第一个参数OnDataCaptureListener接口,这里可以一个它的匿名内部类,然后它有两个回调方法:
onWaveFormDataCapture(Visualizer visualizer, byte[] waveform, int samplingRate)
onFftDataCapture(Visualizer visualizer, byte[] fft, int samplingRate)
这两个回调对应着上边的两个参数iswave和isfft!如果iswave为true,isfft为false则会回调onWaveFormDataCapture方法,如果iswave为false,isfft为true则会回调onFftDataCapture方法。
说到这不得不提一下数字信号处理相关的知识,FFT(Fast Fourier Transformation),即快速傅里叶转换,它用于把时域上连续的信号(波形)强度转换成离散的频域信号(频谱)。
这里说一下两个回调方法中的第二个参数byte[] waveform和fft,waveform是波形采样的字节数组,它包含一系列的8位(无符号)的PCM单声道样本,fft是经过FFT转换后频率采样的字节数组,频率范围为0(直流)到采样值的一半!
返回的数据如上图所示:n为采样值;Rf和lf分别对应第k个频率的实部和虚部;如果Fs为采样频率,那么第k个频率为(k*Fs)/(n/2)!
④开始采样
visualizer.setEnabled(true);
注意:这个方法必须在前面的设置都完成之后调用!
这里我们播放一首歌,然后采样得到波形数据,然后绘制在界面上!
MainActivity
import android.media.MediaP
import android.media.audiofx.V
import android.support.v7.app.AppCompatA
import android.os.B
import android.util.L
public class MainActivity extends AppCompatActivity {
private MediaPlayer mediaP
private VisualizerView visualizerV
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
visualizerView= (VisualizerView) findViewById(R.id.myview);
mediaPlayer=MediaPlayer.create(this,R.raw.goodbye_my_lover);
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mediaPlayer) {
visualizer.setEnabled(false);
mediaPlayer.start();
private void init(){
visualizer = new Visualizer(mediaPlayer.getAudioSessionId());
visualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);
Log.e("CaptureSizeRange",Visualizer.getCaptureSizeRange()[1]+"");
visualizer.setDataCaptureListener(new Visualizer.OnDataCaptureListener(){
public void onWaveFormDataCapture(Visualizer visualizer, byte[] waveform, int samplingRate) {
Log.e("onWaveFormDataCapture","调用了!");
visualizerView.updateVisualizer(waveform);
public void onFftDataCapture(Visualizer visualizer, byte[] fft, int samplingRate) {
Log.e("onFftDataCapture","调用了!");
} , Visualizer.getMaxCaptureRate()/2, true, false);
visualizer.setEnabled(true);
protected void onPause() {
super.onPause();
if (isFinishing() && mediaPlayer != null) {
visualizer.release();
mediaPlayer.release();
mediaPlayer = null;
VisualizerView
import android.content.C
import android.graphics.C
import android.graphics.C
import android.graphics.P
import android.graphics.R
import android.util.AttributeS
import android.view.MotionE
import android.view.V
* Created by Admin on .
public class VisualizerView extends View {
private byte[] mB
private float[] mP
private Rect mRect = new Rect();
private Paint mForePaint = new Paint();
public VisualizerView(Context context) {
super(context);
public VisualizerView(Context context, AttributeSet attrs) {
super(context, attrs);
private void init() {
mBytes = null;
mForePaint.setStrokeWidth(1f);
mForePaint.setAntiAlias(true);
mForePaint.setColor(Color.rgb(0, 128, 255));
public void updateVisualizer(byte[] bytes) {
invalidate();
private byte type = 0;
public boolean onTouchEvent(MotionEvent me)
if(me.getAction() != MotionEvent.ACTION_DOWN)
return false;
if(type &= 3)
return true;
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mBytes == null) {
mRect.set(0,0,getWidth(),getHeight());
switch(type) {
for (int i = 0; i & mBytes.length - 1; i++) {
float left = getWidth() * i / (mBytes.length - 1);
float top = mRect.height()/2 - (byte) (mBytes[i + 1] + 128)
* (mRect.height()/2) / 128;
float right = left + 1;
float bottom = mRect.height()/2;
canvas.drawRect(left, top, right, bottom, mForePaint);
for (int i = 0; i & mBytes.length - 1; i += 18) {
float left = mRect.width() * i / (mBytes.length - 1);
float top = mRect.height()/2 - (byte) (mBytes[i + 1] + 128)
* (mRect.height()/2) / 128;
float right = left + 6;
float bottom = mRect.height()/2;
canvas.drawRect(left, top, right, bottom, mForePaint);
if (mPoints == null || mPoints.length & mBytes.length * 4) {
mPoints = new float[mBytes.length * 4];
for (int i = 0; i & mBytes.length - 1; i++) {
mPoints[i * 4] = mRect.width() * i / (mBytes.length - 1);
mPoints[i * 4 + 1] = mRect.height() / 2
+ ((byte) (mBytes[i] + 128)) * (mRect.height() / 2) / 128;
mPoints[i * 4 + 2] = mRect.width() * (i + 1) / (mBytes.length - 1);
mPoints[i * 4 + 3] = mRect.height() / 2
+ ((byte) (mBytes[i + 1] + 128)) * (mRect.height() / 2) / 128;
canvas.drawLines(mPoints, mForePaint);
最后别忘了声明权限:
android:name="android.permission.RECORD_AUDIO"/&
这样就大功告成了!
如果想要展示频谱图:则在onFftDataCapture回调方法中这样做,这个是在采样本为128的情况下写的,采样本长度越长,FFT算法运行时间就越长!:
byte[] model = new byte[fft.length / 2 + 1];
model[0] = (byte) Math.abs(fft[1]);
int j = 1;
for (int i = 2; i & 18;) {
model[j] = (byte) Math.hypot(fft[i], fft[i + 1]);
visualizerView.updateVisualizer(model);
然后在自定义View的ondraw方法中,修改绘制方法:
if (mPoints == null || mPoints.length & mBytes.length * 4) {
mPoints = new float[mBytes.length * 4];
for (int i = 0; i & 9; i++) {
if (mBytes[i] & 0) {
mBytes[i] = 127;
mPoints[i * 4] = mRect.width() * i / 9;
mPoints[i * 4 + 1] = mRect.height() / 2;
mPoints[i * 4 + 2] = mRect.width() * i / 9;
mPoints[i * 4 + 3] = 2 + mRect.height() / 2 + mBytes[i];
canvas.drawLines(mPoints, mForePaint);
好了,如果想从源码级再深入的了解Android的音频系统,推荐一位大神:林学森
这是一个系列的文章,从音频基础,整个音频框架开始,到系统的核心AudioFlinger,再到AudioPolicyService,最后到应用层的AudioTrack,讲解的比较细致全面!值得一看!
参考文章:
最后在Github上面找到一个项目,有时间可以了解一下:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:41485次
积分:1616
积分:1616
排名:第19621名
原创:106篇
转载:21篇
(1)(10)(9)(7)(6)(5)(7)(1)(4)(19)(8)(8)(17)(19)(11)菜鸟进阶之二:玩转HDMI音频输出功能
日 00:31&&&出处:&& 作者:1羊&& 编辑:邱大川
   “高清”这个关键词已经从2005年的萌芽、2006年的发展、2007年的普及进入了一个非常成熟的阶段,特别是显卡进入DX10时代以来,ATI推出的显卡产品在高清支持的力度上大大提升,实现了完美解码H.264、VC-1等编码方式的高清视频硬解码;NVIDIA也不甘落后,一些新出的芯片也完全可以支持各种高清视频的硬件解码。
HD2000系列显卡率先提供了VC-1、H.264全硬件解码技术
   高清硬件解码技术的成熟带动了高清视频的普及,再加上蓝光D、HD-DVD等高清片源顺利得以破解,互联网上的高清视频也越来越多,随便在百度上以“高清视频”作为关键词搜索,就能搜出高达约19,700,000个结果,普及力度非常大。
   同时,高清视频的普及又带动了另外一个视频输出标准的高速发展,那就是HDMI。HDMI是由日立制作所、松下电器、Quasar、飞利浦、新力、汤姆生RCA、东芝、Silicon Image等消费电子产品制造商和数码内容保护公司所发起的,这种接口最大的优点就是可以同步支持影响与音频输出,并且还带有相关的防拷贝技术(虽然已经被顺利破解)。此外,HDMI也受到各主要制作公司如20世纪福斯、华纳兄弟、迪士尼,包括三星电子在内的各大消费电子产品制造商,以及多家有线系统业者的支持。
&& HDMI全称是High Definition Multimedia Interface,即高清晰度多媒体接口,是一种全数位化影像/声音传送接口,可以传送无压缩的音频信号及视频信号。HDMI提供所有相兼容的设备――如机顶盒、DVD播放机、个人电脑、电视游乐器、综合扩大机、数位音响与电视机――一个共通的资料连接管道。HDMI可以同时传送音频和影音信号,由于音频和视频信号采用同一条电缆,大大简化了系统的安装。同时,HDMI的传输距离也相对DVI接口有很大的提升,根据官方资料HDMI的传输距离能高达10米无信号衰减(如果使用材料较好的话这个数值可能增加)。
相关文章:《》
N卡A卡标准不一 HDMI音频输出方式紊乱
   虽然说HDMI接口已经普及,但是到目前为止都还存在着很多用户使用上的问题。首先,由于的显卡产品在HD2000系列就核心内置5.1声道高保真音频解码模块,所以可以直接从HDMI接口输出音频与视频,这样做确实很方便,但是存在着成本相对较高的问题,因为HDMI必须要经过授权才能使用,显卡厂商必须交纳一定的“版权费”,才能在显卡上板载HDMI接口,而目前显卡市场的竞争日益激烈,导致了很多厂商并不愿意直接提供HDMI接口的支持。
压根就不能输出音频的HDMI(适合连接HDMI接口的显示器)
   其次,NVIDIA的显卡产品虽然在高清视频的硬件解码方面也做得非常不错,但是一直没有能够直接在GPU内部集成音频解码模块,这样用户要想真正意义上的实现HDMI音/视频一线通的功能,就必须将主板或独立声卡上的音频信号导入显卡,再从显卡的HDMI接口上输出。
“飞线”方式能保证有声音并且成本比较低
   这种“移花接木”的办法虽然可行,但是毕竟存在一个音频信号导入\输出的过程,而很多用户都并不太了解这个过程到底应该怎么做。从目前市售显卡的情况来看,有直接提供HDMI接口支持的、有通过DVI to HDMI转接头支持HDMI的、有通过光纤导入音频之后再从HDMI导出的、也有通过同轴导入音频再从HDMI导出的、还有通过SPDIF线缆导入音频再从HDMI导出的,各种实现方法均不一样,导致使用非常混乱,用户也在这其中深感不便。
光线线缆导入音频方式也可以保证音/视频同步输出
   当然,这些问题对于高手来说根本就算不上问题,但是对于一些初学的菜鸟来说,就有一定的难度了,实际上只要我们搞清楚其中的原理和实现方法,在使用过程中也就不会出现什么问题。今天,我们主要是针对部分菜鸟,着重介绍一下目前到底怎么实现HDMI音/视频同步输出。
A卡:HDMI直接输出与DVI转接输出
   前面我们说道,从的HD2000系列显卡开始,GPU就内建了音频解码模块,也就是说从显卡上也能解码音频信号。这使得HDMI音视频一线通得以大幅度普及。在这之前,虽然市面上有部分带有HDMI接口的产品,但是它们并不具备声音、视频同步输出的功能,有时候甚至会出现声音和视频不对应的情况。
   直接在核心里面内建音频解码单元无疑是实现高清一线通的最佳方式,所以很多显卡厂商都直接在AMD的相关显卡上提供了HDMI接口的支持,如上图这款铭u的2600Pro高清版,采用HD2600Pro的核心,并且提供了HDMI接口,用户可以通过HDMI线缆直接连接至高清电视机,不需要其他的音频接入,电视机就既可以显示视频图像,也可以输出音频。
ATI 2900XT率先实现了DVI to HDMI转接支持
   当然,前面我们就说到了HDMI是需要缴纳一定“版权费”,无疑从成本上会高一些。同时,也有部分用户要接多个显示器,而采用HDMI接口的显示器还相对较少。所以对于这一部分用户来说,显卡直接集成HDMI接口反而会引起不方便。为了更全面的照顾到用户,于是很多厂商又推出了通过DVI to HDMI转接方式支持HDMI输出。
N卡和A卡的DVI to HDMI转接头并不一样
   通过DVI to HDMI转接输出这一点没有什么太难理解的,但是在这里我们要着重提一下关于这个转接头的事情。如果经常玩各种显卡的朋友应该会知道,NVIDIA显卡和AMD显卡的DVI to HDMI转接头实际上并不一样(如上图),相对来说N卡的转接头会缺少6颗针脚,而AMD显卡的转接头会多出6根针脚,也就是说AMD和NVIDIA的DVI转接头并不能通用,如果你是A卡用户,在市场上随便买的DVI to HDMI转接头绝大多数都不能用(主要表现是无音频输出),如果是N卡用户就更加不用说了,必须将主板上的音频信号导入到显卡才可以使用。大家在购买转接头的时候一定要注意这一点。
N卡:光纤线缆导入音频解决方案
   前面我们说到了AMD显卡实现HDMI音视频同步输出的两种解决方案,当然,NVIDIA的实现方式也差不多,同样有显卡直接集成HDMI接口的方案,也有通过DVI接口转接到HDMI的解决方案。但是相对于A卡来说,N卡GPU内没有音频解码单元,所以就有一个必须的步骤――导入音频信号。
   由于显卡只能接受数字音频的导入,所以导入将主板上的音频信号导入到显卡,只能通过数字音频的信号导入。一般来说,目前主要有SPDIF线缆、光纤、同轴等三种音频导入方式。下面我们先来看看光纤的导入方式。
现在一般的主板上都集成了同轴/光纤音频输出
显卡上必须有光纤/同轴输入接口
耕升9600GT显卡的光纤导入接口工作时会发出红光,非常漂亮
   实际上同轴和光纤的音频导入实现方式非常简单,如果你的主板上有光纤/同轴音频输出接口,且显卡上有光纤/同轴音频输入接口的话,就可以直接用一根同轴/光纤线缆连接显卡和主板的同轴/光纤接口,这样就可以实现将主板上的音频导出,然后导入到显卡音频的功能。
N卡:SPDIF线缆导入音频解决方案
   除了前面我们介绍的通过光纤/同轴线缆将主板上的音频导入显卡之外,还有一种就是通过SPDIF线缆将主板上的音频导入显卡。
   实际上,不管是SPDIF线缆还是光纤/同轴线缆解决方案,他们实现的原理都是通过SPDIF数字音频导出、导入,只是实现方式不一样。相对于前面介绍的光纤/同轴线缆来说,2Pin的SPDIF最大的缺点就是需要从主板和显卡上找到相应的连线接口,这对于很多初级用户来说有点困难。
显卡和主板上的SPDIF输入、输出接口一定要找正确
华硕主板的说明书上明确标明了SPDIF OUT插针位置
   一般来说,主板的SPDIF音频输出口都采用2Pin/4pin的插针方式,并且在插针旁边会很明显的表示出SPDIF OUT,而显卡端一般都是在显卡SLI接口旁边会有一个2Pin的接口(如上图),只要使用显卡附送的SPDIF线缆将主板和显卡相连就可以实现音频导出、导入功能。
   不难看出,虽然目前HDMI音视频同步输出方法混乱,但是只要明白其中的实现原理,普通用户也可以很简单的实现。总体来说,实现音视频同步输出最方便的就是带有HDMI接口的ATI显卡;除此之外,N卡方面类似于耕N9600GT红旗H版那种通过光纤导入音频的办法也非常方便,不用在主板上找接口,甚至都不用打开机箱就可以很方便的连接。
公版8800GT没有提供任何音频输入接口
&& 需要注意的是,部分NVIDIA显卡没有提供SPDIF/光纤/同轴音频输入接口,比如公版的8800GT,这类显卡是不能同时提供HDMI音视频同步输出的,如果要使用HDMI看高清电影,音频输出只能通过主板上的音频输出接口输出至电视,这一点用户需要特别注意。
核心型号:GeForce 9600GT 显存容量:512 显存位宽:256bit 显存类型:GDDR3 核心频率:700MHz 显存频率:2000MHz
大学生分期购物销量榜
看过本文的人还看了
80.2万人浏览 14.5万人浏览 7.2万人浏览 3.9万人浏览
汽车之家内容精选
每日精选21817 科技真人秀节目《数码课代表》3908玩客 最好玩的活动与试用平台 46186编辑部的故事 0泡美美 分享最美科技 4045科技生活

我要回帖

更多关于 狸进阶之后是什么样子 的文章

 

随机推荐