首页 文章 精选 留言 我的

精选列表

搜索[AI功能],共10000篇文章
优秀的个人博客,低调大师

智能媒体管理产品文档转换/预览功能介绍(2)---转换原理

一、导语 智能媒体管理产品 提供了 Cloud Native 架构的文档转换/预览服务,本文介绍其中的转换原理和使用方法。 二、转换原理 正常情况下,文档需要专门的应用才能够打开进行浏览,比如 PPT 、DOC 、XLS 文档需要 OFFICE 应用打开,PDF 文档需要 Adobe 应用打开,并且可以进行编辑。但现实生活中,大量的场景只需要浏览文档的内容,特别是智能终端时代,能够在浏览器里面预览文档就能实现信息的共享,就能满足绝大部分要求。为了实现浏览器中预览文档内容,需要将文档进行格式转换(也就是业界常说的转码),转码后的内容就可以在浏览器中查看。 如上图所示,智能媒体管理产品 提供的文档转换服务是部署在云端,并且和云存储 OSS 同区域 就近部署,从而降低访问时延,并提升您预览的体验,同时也避免跨区域访问带来的额外费用。 2.1 转换

优秀的个人博客,低调大师

08.Eclipse下Ndk开发(使用fmod实现QQ变声功能)

(创建于2017/12/30) 1.编写native package org.fmod.example; public class EffectUtils { //音效的类型 public static final int MODE_NORMAL = 0; public static final int MODE_LUOLI = 1; public static final int MODE_DASHU = 2; public static final int MODE_JINGSONG = 3; public static final int MODE_GAOGUAI = 4; public static final int MODE_KONGLING = 5; /** * 音效处理 * @param path * @param type */ public native static void fix(String path,int type); static{ System.loadLibrary("fmodL"); System.loadLibrary("fmod"); System.loadLibrary("qq_voice"); } } 2.进入src目录下,使用命令行生成头文件 javah 包名+类名 3.创建项目根目录下jni文件夹,将头文件拷贝进去 4.下载fmod源码,复制api中lowlevel中的inc中的头文件到jni目录下 5.复制fmod jar包到根目录下libs文件夹并添加依赖 6.复制需要的api平台的so文件到jni目录下 7.修改报错的地方,比如头文件的路径等问题 8.Android Tools -> Add native support 添加本地支持(在此之前,确认你的项目中已经配置了ndk相关的头文件目录支持,参考前边的笔记),填写你要生成的 so库的文件名,确认和loadLibrary中加载的(如qq_voice)保持一致 9.配置mk文件: Android.mk LOCAL_PATH := $(call my-dir) //编译libfmod.so include $(CLEAR_VARS) LOCAL_MODULE := fmod LOCAL_SRC_FILES := libfmod.so include $(PREBUILT_SHARED_LIBRARY) //编译libfmodL.so include $(CLEAR_VARS) LOCAL_MODULE := fmodL LOCAL_SRC_FILES := libfmodL.so include $(PREBUILT_SHARED_LIBRARY) //编译我们自己写的c代码为so文件,并添加上边编译的so支持 include $(CLEAR_VARS) LOCAL_MODULE := qq_voice LOCAL_SRC_FILES := effect_fix.cpp LOCAL_SHARED_LIBRARIES := fmod fmodL //添加log支持 LOCAL_LDLIBS := -llog //添加c++异常类支持 LOCAL_CPP_FEATURES := exceptions include $(BUILD_SHARED_LIBRARY) Application.mk ##支持C++异常处理,标准莫板块(针对string.h等头文件的处理,去掉了common.c之后,这个不再需要了,但是保留也没问题) APP_STL := gnustl_static 10.不断的build project,直到所有异常解决编译成功 部分源码: effect_fix.cpp #include "org_fmod_example_EffectUtils.h" #include "inc/fmod.hpp" #include <stdlib.h> #include <unistd.h> #include <android/log.h> #define LOGI(FORMAT,...) __android_log_print(ANDROID_LOG_INFO,"renzhenming",FORMAT,##__VA_ARGS__) #define LOGE(FORMAT,...) __android_log_print(ANDROID_LOG_ERROR,"renzhenming",FORMAT,##__VA_ARGS__) #define MODE_NORMAL 0 #define MODE_LUOLI 1 #define MODE_DASHU 2 #define MODE_JINGSONG 3 #define MODE_GAOGUAI 4 #define MODE_KONGLING 5 using namespace FMOD; JNIEXPORT void JNICALL Java_org_fmod_example_EffectUtils_fix (JNIEnv *env, jclass jcls, jstring path_jstr, jint type){ System *system; FMOD_RESULT result; Sound *sound; Channel *channel; DSP *dsp; float frequency = 0; bool isPlaying = true; const char *media_path = env->GetStringUTFChars(path_jstr,NULL); try { //初始化 result = System_Create(&system); result = system->init(32, FMOD_INIT_NORMAL, NULL); //创建声音 //这里进坑了,写作下边的样子是无法播放的,正确的方式是第二行 因为sound如果是null,那么,播放的时候的sound也就是null,怎么播放呢 //result = system->createSound(media_path, FMOD_DEFAULT, 0, NULL); LOGI("%s",media_path); system->createSound(media_path, FMOD_DEFAULT, NULL, &sound); switch(type){ case MODE_NORMAL: //原生播放 result = system->playSound(sound, 0, false, &channel); break; case MODE_LUOLI: //dsp -- 音效 //FMOD_DSP_TYPE_PITCHSHIFT 提升或者降低音调用的一种音效 system->createDSPByType(FMOD_DSP_TYPE_PITCHSHIFT,&dsp); //设置音调的参数 dsp->setParameterFloat(FMOD_DSP_PITCHSHIFT_PITCH,2); //播放(播放和添加channel的顺序必须是先播放,再添加,否则音效无法生效) //猜测原因 //playSound之后并不是立即播放,而是在system->update();之后开始播放, //playSound的作用是创造了一个sound载体一个channel载体,然后在这个载体基础上添加一系列的效果,所以,只能现有载体 //效果才有放置的位置,所以需要先play再添加 result = system->playSound(sound, 0, false, &channel); //添加到channel channel->addDSP(0,dsp); break; case MODE_DASHU: //dsp -- 音效 //FMOD_DSP_TYPE_PITCHSHIFT 提升或者降低音调用的一种音效 system->createDSPByType(FMOD_DSP_TYPE_PITCHSHIFT,&dsp); //设置音调的参数 dsp->setParameterFloat(FMOD_DSP_PITCHSHIFT_PITCH,0.6); //播放(播放和添加channel的顺序必须是先播放,再添加,否则音效无法生效) result = system->playSound(sound, 0, false, &channel); //添加到channel channel->addDSP(0,dsp); break; case MODE_GAOGUAI: //提高说话的速度 result = system->playSound(sound, 0, false, &channel); channel->getFrequency(&frequency);\ frequency = frequency*1.5; channel->setFrequency(frequency); break; case MODE_KONGLING: system->createDSPByType(FMOD_DSP_TYPE_ECHO,&dsp); dsp->setParameterFloat(FMOD_DSP_ECHO_DELAY,300); dsp->setParameterFloat(FMOD_DSP_ECHO_FEEDBACK,2); result = system->playSound(sound, 0, false, &channel); channel->addDSP(0,dsp); break; case MODE_JINGSONG: //紧张 system->createDSPByType(FMOD_DSP_TYPE_ECHO,&dsp); dsp->setParameterFloat(FMOD_DSP_TREMOLO_SKEW,0.5); result = system->playSound(sound, 0, false, &channel); channel->addDSP(0,dsp); break; default: break; } while(isPlaying){ channel->isPlaying(&isPlaying); //<unistd.h> //单位微秒,不断的睡眠保证声音播放完成之后再释放资源 usleep(1000*1000); } LOGI("%s","播放完成"); system->update(); } catch(...){ LOGE("%s","发生异常"); goto end; } goto end; end: env->ReleaseStringUTFChars(path_jstr,media_path); result = sound->release(); system->close(); system->release(); } QQActivity.java package org.fmod.example; import java.io.File; import com.renzhenming.qq_voice.R; import android.app.Activity; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.View; public class QQActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); org.fmod.FMOD.init(this); setContentView(R.layout.activity_main); } public void mFix(View view){ String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separatorChar + "singing.wav"; Log.d("renzhenming", path); switch (view.getId()) { case R.id.btn_record: EffectUtils.fix(path, EffectUtils.MODE_NORMAL); Log.d("renzhenming", "MODE_NORMAL"); break; case R.id.btn_luoli: EffectUtils.fix(path, EffectUtils.MODE_LUOLI); Log.d("renzhenming", "MODE_LUOLI"); break; case R.id.btn_dashu: EffectUtils.fix(path, EffectUtils.MODE_DASHU); Log.d("renzhenming", "MODE_DASHU"); break; case R.id.btn_jingsong: EffectUtils.fix(path, EffectUtils.MODE_JINGSONG); break; case R.id.btn_gaoguai: EffectUtils.fix(path, EffectUtils.MODE_GAOGUAI); break; case R.id.btn_kongling: EffectUtils.fix(path, EffectUtils.MODE_KONGLING); break; default: break; } } @Override protected void onDestroy(){ org.fmod.FMOD.close(); super.onDestroy(); } } EffectUtils.java package org.fmod.example; public class EffectUtils { //音效的类型 public static final int MODE_NORMAL = 0; public static final int MODE_LUOLI = 1; public static final int MODE_DASHU = 2; public static final int MODE_JINGSONG = 3; public static final int MODE_GAOGUAI = 4; public static final int MODE_KONGLING = 5; /** * 音效处理 * @param path * @param type */ public native static void fix(String path,int type); static{ System.loadLibrary("fmodL"); System.loadLibrary("fmod"); System.loadLibrary("qq_voice"); } } 程序运行界面 18404062.png

优秀的个人博客,低调大师

Flink SQL 功能解密系列 —— 流计算“撤回(Retraction)”案例分析

什么是retraction(撤回) 通俗讲retract就是传统数据里面的更新操作,也就是说retract是流式计算场景下对数据更新的处理 方式。 首先来看下流场景下的一个词频统计列子。 没有retract会导致最终结果不正确↑: retract发挥的作用 下面再分享两个双十一期间retract保证数据正确性的业务case: case1: 菜鸟物流订单统计 同一个订单的商品在运输过程中,因为各种原因,物流公司是有可能从A变成B的。为了统计物流公司承担的订单数目,菜鸟团队使用blink计算的retraction机制进行变key汇总操作。 -- TT source_table 数据如下: order_id tms_company 0001 中通 0002 中通 0003 圆通

优秀的个人博客,低调大师

构建自定义Docker镜像使用ApacheHttp服务的代理功能

1,修改httpd.conf 1 2 3 以下两行前的注释字符#去掉: #LoadModuleproxy_modulemodules/mod_proxy.so #LoadModuleproxy_http_modulemodules/mod_proxy_http.so 2,添加代理规则 1 2 3 4 5 在httpd.conf文件的最后加上转发规则 例如: ProxyPass/baiduhttp://www.baidu.com ProxyPassReverse/baiduhttp://www.baidu.com 将/baidu开头的请求转发到百度首页 3,配置文件改好后,在同级目录创建Dockerfile 1 2 3 FROMhttpd:2.4.27 COPY./my-httpd.conf/usr/local/apache2/conf/httpd.conf 4,构建Docker镜像,并启动测试 1 2 3 4 5 6 7 8 9 10 11 12 #!/bin/bash instance=zlhttptest image=zltest dockerrm-f${instance} dockerrmi${image} dockerbuild-t${image}. dockerrun-itd--name${instance}-p8085:80${image } 本文转自 zl1030 51CTO博客,原文链接:http://blog.51cto.com/zl1030/1983556

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册