当前位置: 首页 > news >正文

网站域名注册证书查询网站本科报考官网

网站域名注册证书查询,网站本科报考官网,如何做商城网站,管理咨询公司的运作模式项目场景#xff1a; 目前的产品经常播放m3u8流#xff0c;有的视频声音正常#xff0c;有的视频声音就偏低#xff0c;即使放到最大音量声音也是比较小#xff0c;所以就产生了某种需求#xff0c;能否自动感知视频声音的大小#xff0c;如果发现声音比较小的情况 目前的产品经常播放m3u8流有的视频声音正常有的视频声音就偏低即使放到最大音量声音也是比较小所以就产生了某种需求能否自动感知视频声音的大小如果发现声音比较小的情况就自动放大比如系统音量增益等。 解决该问题所尝试的研究 一、命令行工具 1、tinymix linux中主流的音频体系结构是ALSAAdvanced Linux Sound ArchitectureALSA在内核驱动层提供了alsa-driver在应用层提供了alsa-lib应用程序只需要调用alsa-lib提供的API就可以完成对底层硬件的操作。但是Android中没有使用标准的ALSA而是一个ALSA的简化版叫做tinyalsa。Android中使用tinyalsa控制管理所有模式的音频通路我们也可以使用tinyalsa提供的工具进行查看、调试。 编译tinyalsa后生成四个小工具本次尝试使用tinymix工具来解决问题 tinymix是一个可以在Android平台上进行音频控制的命令行工具。它是Android Open Source Project (AOSP)中的一部分可以被用于控制Android设备上的音量。 tinymix 命令可以控制音量、开关声音、调整声道平衡和控制麦克风增益等等。这个工具的主要用途是在不影响当前正在运行的程序的情况下调整音频设置。 tinymixtinyplaytinycaptinypcminfo 如下图所示直接输入tinymix可以得到音频通路相关的各项配置参数。也可以通过添加参数修改其中的配置如下面的系统命令通过设置 VBC DACL DG 和 VBC DACR DG 便是设置数字增益其范围是0~126不过实际运行过程中发现比如设置了 tinymix VBC DACL DG 3过几秒之后再查看发现其值又回到了26不太清楚具体缘由。 system(QString(tinymix -D 0 \VBC DACL DG Set\ %1).arg(20).toLatin1().data()); //14 system(QString(tinymix -D 0 \VBC DACR DG Set\ %1).arg(20).toLatin1().data());2、pactl 查看一下设备索引 pactl list sinks可以看到目前的参数 设置绝对音量0%-100%,1表示声卡号。 pactl set-sink-volume 1 90%设置相对音量增大10% pactl set-sink-volume 1 10%设置相对音量减小10% pactl set-sink-volume 1 -10%增加3db pactl set-sink-volume 1 3dB该命令可以尝试实现 二、检测程序 通过实时检测视频中音频信息计算出分贝值来判断该视频的声音大小。 1.PCM数据基础 PCM(Pulse Code Modulation)也被称为脉冲编码调制是数字通信的编码方式之一。PCM中的声音数据没有被压缩它将输入的模拟信号进行采样、量化和编码用二进制进行编码的数来代表模拟信号的幅度即标准的数字音频数据。 采样率 采样率表示音频信号每秒的数字快照数。该速率决定了音频文件的频率范围。采样率越高数字波形的形状越接近原始模拟波形。低采样率会限制可录制的频率范围这可导致录音表现原始声音的效果不佳。一般数字音频常用的采样率电话频率8kHz、CD频率44.1kHz、DVD频率48kHz。 位深度 位深度决定动态范围。采样声波时为每个采样指定最接近原始声波振幅的振幅值。较高的位深度可提供更多可能的振幅值产生更大的动态范围、更低的噪声基准和更高的保真度。普通的CD是16-bit。 通道 通道个数。常见的音频有立体声(stereo)和单声道(mono)两种类型立体声包含左声道和右声道。另外还有环绕立体声等其它不太常用的类型。 Sign 表示样本数据是否是有符号位比如用一字节表示的样本数据有符号的话表示范围为-128 ~ 127无符号是0 ~ 255。 字节序 字节序是little-endian还是big-endian。通常均为little-endian PCM信号的两个重要指标是采样频率和量化精度当在播放音乐时应用程序从存储介质中读取音频数据MP3、WMA、AAC等经过解码后最终送到音频驱动程序中的就是PCM数据反过来在录音时音频驱动不停地把采样所得的PCM数据送回给应用程序由应用程序完成压缩、存储等任务。下面我们展开介绍下PCM音频的存储及操作 PCM音频数据存储方式 如果是单声道的音频文件采样数据按时间的先后顺序依次存入有的时候也会采用LRLRLR方式存储只是另一个声道的数据为0如果是双声道的话就按照LRLRLR的方式存储存储的时候与字节序有关。 2.数据提取 涉及到多通道的数据如何排列和提取 按照双声道的LRLRLR的PCM音频数据可以通过将它们交叉的读出来的方式来分离左右声道的数据。 int pcm_s16le_split(const char* file, const char* out_lfile, const char* out_rfile) {FILE *fp fopen(file, rb);if (fp NULL) {printf(open %s failed\n, file);return -1;}FILE *fp1 fopen(out_lfile, wb);if (fp1 NULL) {printf(open %s failed\n, out_lfile);return -1;}FILE *fp2 fopen(out_rfile, wb);if (fp2 NULL) {printf(open %s failed\n, out_rfile);return -1;}char * sample (char *)malloc(4);while(!feof(fp)) {fread(sample, 1, 4, fp);//Lfwrite(sample, 1, 2, fp1);//Rfwrite(sample 2, 1, 2, fp2);}free(sample);fclose(fp);fclose(fp1);fclose(fp2);return 0;}3. 分贝计算参考网上资源 公式 参数Pref就是声音总的振幅最大值Prms就是当前声音的振幅值Lp就是我们需要的声音分贝值了。 比如我们声音是无符号16bit深度的那么其每个采样点的值应该在02^16-1既065535范围内带入公式我们可以计算到不用除以最大振幅值20*log(65535)96.32db所以根据这个我们只要拿到某个采样点的振幅值也就是当前声音采样点转成16bit后的值就可以计算出相应的分贝值了。那么怎么求声音采样点的振幅呢这是一个问题不过也有解决办法了。 获取pcm声音采样点的振幅 这里以我项目中用OpenSL来播放FFmpeg重采样生成的PCM声音为例PCM声音是重采样为无符号16bit的深度的然后我们需要得到某一时间一般是零点几毫秒PCM所在内存的地址和PCM声音的大小而16bit也就是16bit/8bit2byte在c语言中2byte用short int来表示因此我们可以从PCM所在地址里面按顺序取出2个byte的数据然后转化成short int的值就可以拿到当前采样点的振幅了获取的方式是用c语言中的memcpy拷贝2个字节的数据求值就可以了。注因为采用点很密集如果每个采用点都计算一下分贝的话会消耗一定的性能或者导致声音播放不连贯所这里采用取其绝对值和的平均值就可以了因为在这段时间内我们看不出任何的区别。 /** * 获取所有振幅之平均值 计算db (振幅最大值 2^16-1 65535 最大值是 96.32db) * 16 bit 2字节 short int * 无符号16bit96.3220*lg(65535); * * param pcmdata 转换成char类型才可以按字节操作 * param size pcmdata的大小 * return */int Audio::getPcmDB(const unsigned char *pcmdata, size_t size) {int db 0;short int value 0;double sum 0;for(int i 0; i size; i 2){memcpy(value, pcmdatai, 2); //获取2个字节的大小值sum abs(value); //绝对值求和}sum sum / (size / 2); //求平均值2个字节表示一个振幅所以振幅个数为size/2个if(sum 0){db (int)(20.0*log10(sum));}return db;}本项目解决方案 1、效果图 1 支持单文件检测 2 支持目录检测 3 支持常用的音视频格式比如 mp3、 mp4、 wav、 mov等 4 支持检测报告输出 5 在线的资源播放依赖于系统的解码能力比如windows下依赖 directshow linux下依赖 gstreamer 6 目前只提供windows版本 注意windows下选择m3u8文件需支持其传输协议需要安装directshow库支持 提供绿色免安装版本直接运行QAudio.exe即可。 2、关键代码 其中最核心的类QAudioProbe player new QMediaPlayer(this); probe new QAudioProbe; //探测器 probe-setSource(player);connect(probe,QAudioProbe::audioBufferProbed,this,MainWindow::processBuffer); //关联函数 connect(player,QMediaPlayer::stateChanged,this,MainWindow::onStateChanged);void MainWindow::processBuffer(const QAudioBuffer buffer) {//qDebug() buffer.sampleCount() buffer.frameCount() buffer.byteCount();QAudioFormat audioFormatbuffer.format();//缓冲区格式getMaxAmplitude(audioFormat);//qDebug() audioFormat.channelCount() audioFormat.sampleSize() audioFormat.sampleRate() audioFormat.bytesPerFrame();if(m_paraUpdated false){//处理探测到的缓冲区ui-spin_byteCount-setValue(buffer.byteCount());//缓冲区字节数ui-spin_duration-setValue(buffer.duration()/1000);//缓冲区时长ui-spin_frameCount-setValue(buffer.frameCount());//缓冲区帧数ui-spin_sampleCount-setValue(buffer.sampleCount());//缓冲区采样数ui-spin_channelCount-setValue(audioFormat.channelCount()); //通道数ui-spin_sampleSize-setValue(audioFormat.sampleSize());//采样大小ui-spin_sampleRate-setValue(audioFormat.sampleRate());//采样率ui-spin_bytesPerFrame-setValue(audioFormat.bytesPerFrame());//每帧字节数if (audioFormat.byteOrder()QAudioFormat::LittleEndian)ui-edit_byteOrder-setText(LittleEndian);//字节序elseui-edit_byteOrder-setText(BigEndian);ui-edit_codec-setText(audioFormat.codec());//编码格式if (audioFormat.sampleType()QAudioFormat::SignedInt)//采样点类型ui-edit_sampleType-setText(SignedInt);else if(audioFormat.sampleType()QAudioFormat::UnSignedInt)ui-edit_sampleType-setText(UnSignedInt);else if(audioFormat.sampleType()QAudioFormat::Float)ui-edit_sampleType-setText(Float);elseui-edit_sampleType-setText(Unknown);m_paraUpdated true;}Q_ASSERT(audioFormat.sampleSize() % 8 0);const int channelBytes audioFormat.sampleSize() / 8;const int sampleBytes audioFormat.channelCount() * channelBytes;// Q_ASSERT(len % sampleBytes 0);// const int numSamples len / sampleBytes;quint32 maxValue 0;double sum 0;int db 0;const unsigned char *ptr reinterpret_castconst unsigned char *(buffer.data());int frameCount buffer.frameCount();int channelCount audioFormat.channelCount();int nnum 0;for (int i 0; i frameCount; i) {for (int j 0; j channelCount; j) {quint32 value 0;if (audioFormat.sampleSize() 8 audioFormat.sampleType() QAudioFormat::UnSignedInt) {value *reinterpret_castconst quint8*(ptr);} else if (audioFormat.sampleSize() 8 audioFormat.sampleType() QAudioFormat::SignedInt) {value qAbs(*reinterpret_castconst qint8*(ptr));} else if (audioFormat.sampleSize() 16 audioFormat.sampleType() QAudioFormat::UnSignedInt) {if (audioFormat.byteOrder() QAudioFormat::LittleEndian)value qFromLittleEndianquint16(ptr);elsevalue qFromBigEndianquint16(ptr);} else if (audioFormat.sampleSize() 16 audioFormat.sampleType() QAudioFormat::SignedInt) {if (audioFormat.byteOrder() QAudioFormat::LittleEndian)value qAbs(qFromLittleEndianqint16(ptr));elsevalue qAbs(qFromBigEndianqint16(ptr));} else if (audioFormat.sampleSize() 32 audioFormat.sampleType() QAudioFormat::UnSignedInt) {if (audioFormat.byteOrder() QAudioFormat::LittleEndian)value qFromLittleEndianquint32(ptr);elsevalue qFromBigEndianquint32(ptr);} else if (audioFormat.sampleSize() 32 audioFormat.sampleType() QAudioFormat::SignedInt) {if (audioFormat.byteOrder() QAudioFormat::LittleEndian)value qAbs(qFromLittleEndianqint32(ptr));elsevalue qAbs(qFromBigEndianqint32(ptr));} else if (audioFormat.sampleSize() 32 audioFormat.sampleType() QAudioFormat::Float) {value qAbs(*reinterpret_castconst float*(ptr) * 0x7fffffff); // assumes 0-1.0}sum qAbs(value);maxValue qMax(value, maxValue);ptr channelBytes;nnum;}}//qDebug() *** frameCount*channelCount nnum channelBytes;sum sum / (frameCount*channelCount);//sum sum / (frameCount);maxValue qMin(maxValue, m_maxAmplitude);m_level qreal(maxValue) / m_maxAmplitude;emit update();db (int)(20.0*log10(sum ));if(db 0){m_sumDb db;m_processedFrame;qDebug() __func__ level m_level db;}m_totalFrame buffer.frameCount();ui-LabFrameValue-setText(QString::number(m_totalFrame));}void MainWindow::getMaxAmplitude(QAudioFormat audioFormat) {if(m_maxAmplitude ! 0){//qDebug() __func__ m_maxAmplitude;return;}switch (audioFormat.sampleSize()) {case 8:switch (audioFormat.sampleType()) {case QAudioFormat::UnSignedInt:m_maxAmplitude 255;break;case QAudioFormat::SignedInt:m_maxAmplitude 127;break;default:break;}break;case 16:switch (audioFormat.sampleType()) {case QAudioFormat::UnSignedInt:m_maxAmplitude 65535;break;case QAudioFormat::SignedInt:m_maxAmplitude 32767;break;default:break;}break;case 32:switch (audioFormat.sampleType()) {case QAudioFormat::UnSignedInt:m_maxAmplitude 0xffffffff;break;case QAudioFormat::SignedInt:m_maxAmplitude 0x7fffffff;break;case QAudioFormat::Float:m_maxAmplitude 0x7fffffff; // Kind ofdefault:break;}break;default:break;}qDebug() __func__ m_maxAmplitude m_maxAmplitude; }源码已提交可在此下载 https://download.csdn.net/download/u011942101/88251529
文章转载自:
http://www.morning.jhkzl.cn.gov.cn.jhkzl.cn
http://www.morning.qnlbb.cn.gov.cn.qnlbb.cn
http://www.morning.zpqk.cn.gov.cn.zpqk.cn
http://www.morning.ykklw.cn.gov.cn.ykklw.cn
http://www.morning.hfxks.cn.gov.cn.hfxks.cn
http://www.morning.wxrbl.cn.gov.cn.wxrbl.cn
http://www.morning.dnpft.cn.gov.cn.dnpft.cn
http://www.morning.htjwz.cn.gov.cn.htjwz.cn
http://www.morning.ffydh.cn.gov.cn.ffydh.cn
http://www.morning.ctpfq.cn.gov.cn.ctpfq.cn
http://www.morning.xpgwz.cn.gov.cn.xpgwz.cn
http://www.morning.hwcln.cn.gov.cn.hwcln.cn
http://www.morning.nynlf.cn.gov.cn.nynlf.cn
http://www.morning.wnhml.cn.gov.cn.wnhml.cn
http://www.morning.kzslk.cn.gov.cn.kzslk.cn
http://www.morning.qlxgc.cn.gov.cn.qlxgc.cn
http://www.morning.twfdm.cn.gov.cn.twfdm.cn
http://www.morning.pqjpw.cn.gov.cn.pqjpw.cn
http://www.morning.fznj.cn.gov.cn.fznj.cn
http://www.morning.ctpfq.cn.gov.cn.ctpfq.cn
http://www.morning.prhqn.cn.gov.cn.prhqn.cn
http://www.morning.bqnhh.cn.gov.cn.bqnhh.cn
http://www.morning.wwnb.cn.gov.cn.wwnb.cn
http://www.morning.sknbb.cn.gov.cn.sknbb.cn
http://www.morning.srckl.cn.gov.cn.srckl.cn
http://www.morning.nfbxgtj.com.gov.cn.nfbxgtj.com
http://www.morning.qlwfz.cn.gov.cn.qlwfz.cn
http://www.morning.tjkth.cn.gov.cn.tjkth.cn
http://www.morning.jqrp.cn.gov.cn.jqrp.cn
http://www.morning.jcbmm.cn.gov.cn.jcbmm.cn
http://www.morning.trhrk.cn.gov.cn.trhrk.cn
http://www.morning.tbstj.cn.gov.cn.tbstj.cn
http://www.morning.pmmrb.cn.gov.cn.pmmrb.cn
http://www.morning.ykmkz.cn.gov.cn.ykmkz.cn
http://www.morning.cprls.cn.gov.cn.cprls.cn
http://www.morning.pfkrw.cn.gov.cn.pfkrw.cn
http://www.morning.litao7.cn.gov.cn.litao7.cn
http://www.morning.pdkht.cn.gov.cn.pdkht.cn
http://www.morning.dtpqw.cn.gov.cn.dtpqw.cn
http://www.morning.kzcz.cn.gov.cn.kzcz.cn
http://www.morning.qmncj.cn.gov.cn.qmncj.cn
http://www.morning.zxybw.cn.gov.cn.zxybw.cn
http://www.morning.mnjyf.cn.gov.cn.mnjyf.cn
http://www.morning.crrjg.cn.gov.cn.crrjg.cn
http://www.morning.pdgqf.cn.gov.cn.pdgqf.cn
http://www.morning.bcngs.cn.gov.cn.bcngs.cn
http://www.morning.hsxkq.cn.gov.cn.hsxkq.cn
http://www.morning.nkhdt.cn.gov.cn.nkhdt.cn
http://www.morning.bzlfw.cn.gov.cn.bzlfw.cn
http://www.morning.djwpd.cn.gov.cn.djwpd.cn
http://www.morning.qmtzq.cn.gov.cn.qmtzq.cn
http://www.morning.qqrlz.cn.gov.cn.qqrlz.cn
http://www.morning.duqianw.com.gov.cn.duqianw.com
http://www.morning.trlhc.cn.gov.cn.trlhc.cn
http://www.morning.wrdlf.cn.gov.cn.wrdlf.cn
http://www.morning.jjhng.cn.gov.cn.jjhng.cn
http://www.morning.bqmsm.cn.gov.cn.bqmsm.cn
http://www.morning.gwjnm.cn.gov.cn.gwjnm.cn
http://www.morning.wfysn.cn.gov.cn.wfysn.cn
http://www.morning.zwgrf.cn.gov.cn.zwgrf.cn
http://www.morning.yzfrh.cn.gov.cn.yzfrh.cn
http://www.morning.qrnbs.cn.gov.cn.qrnbs.cn
http://www.morning.tmbtm.cn.gov.cn.tmbtm.cn
http://www.morning.trmpj.cn.gov.cn.trmpj.cn
http://www.morning.ybnzn.cn.gov.cn.ybnzn.cn
http://www.morning.mjats.com.gov.cn.mjats.com
http://www.morning.ckdgj.cn.gov.cn.ckdgj.cn
http://www.morning.dbnpz.cn.gov.cn.dbnpz.cn
http://www.morning.hhfqk.cn.gov.cn.hhfqk.cn
http://www.morning.ldspj.cn.gov.cn.ldspj.cn
http://www.morning.jjzbx.cn.gov.cn.jjzbx.cn
http://www.morning.kqqk.cn.gov.cn.kqqk.cn
http://www.morning.bsjpd.cn.gov.cn.bsjpd.cn
http://www.morning.zpdjh.cn.gov.cn.zpdjh.cn
http://www.morning.zrqs.cn.gov.cn.zrqs.cn
http://www.morning.ntdzjx.com.gov.cn.ntdzjx.com
http://www.morning.wjjxr.cn.gov.cn.wjjxr.cn
http://www.morning.mknxd.cn.gov.cn.mknxd.cn
http://www.morning.pghgq.cn.gov.cn.pghgq.cn
http://www.morning.rnzbr.cn.gov.cn.rnzbr.cn
http://www.tj-hxxt.cn/news/242528.html

相关文章:

  • 承德网站建设作用90设计网站怎么样
  • 做网站 教程在线教育网站建设
  • 网站模板源代码wordpress一键分享
  • 电子政务和网站建设工作的总结软件商店下载安装免费
  • 网上商城网站设计手机网站如何生成app
  • 网站建设个人网站wordpress积分交换
  • 凯里网站建设gzklyy基于asp.net网站开发视频教程
  • 网站建设用户登录源码网站开发不提供源代码
  • 网站报错500郴州新网招聘网最新招聘信息
  • 昆明网站设计都需要设计什么WordPress外链转内链插件
  • 怎么做网站免宠物用品销售网站建设和技术现状
  • 广州天河区有什么好玩的没有网站可以做seo吗
  • 网络推广公司企业深圳seo论坛
  • 卖狗做网站什么关键词最好光谷做网站推广公司
  • 网站管理后台登录地址王者荣耀网站开发目的
  • 深圳松岗做网站江苏网页设计公司
  • 微信开发公司aso优化渠道
  • 网站做授权登录wordpress拖拽式
  • wordpress修改网站标题自助建网站平台怎么收费
  • 平泉市住房和城乡建设局网站微信会员卡管理系统
  • 网站备案名称更改自己做一个网页怎么做
  • 网站名称需要用注册吗表格制作手机软件
  • 台州网站建设维护东莞万江网站建设公司
  • 如何选择网站模板阿里巴巴与慧聪网网站建设对比
  • 2017网站备案微信建一个网站
  • 做网站是如果盈利的免费地方门户网站源码
  • 工信部公布网站备案拍照背景域名有了怎么建设网站
  • 完整酒店网站开发茂名网站建设哪家强
  • 网站被攻击打不开怎么办南昌网站排名
  • 聊城网站制作信息wordpress链接网页位置