精华内容
下载资源
问答
  • 微信语音红包小程序完整版,里面有详细的使用教程,可参考学习
  • 用于MP3音乐格式与微信arm语音的格式转换 微信发送的语音是60秒内
  • 支持自定义6种类型的语音,点击快捷键即可发送 发送完成对方收到的语音是咱们提前录好的音频 效果演示:https://v.qq.com/x/page/t32405ywx2e.html 免root,需要开启无障碍、悬浮窗。支持安卓7.0以上
  • 这个问题一度困扰我,一个软件数据才是重要支撑啊,突然有一天刷抖音发现了一个好玩的应用==很皮语音包==,这款APP提供了很多好玩的素材,大家可以下载看一看玩一玩 下载应用瞧了瞧,抓包了下妈了个B,抓不到,应该是app...
  • 简单3步:微信语音转成mp3

    千次阅读 2020-06-24 14:00:00
    ACM亚洲区域赛获奖者北漂女程序员 喜欢就关注我吧!在家人眼里,我学的专业就是打杂的。前天我的嫂子问我怎么把微信聊天语音转换成mp3格式保存分享。咔咔咔,教程来了。1,把微信语音信息保存...

    ACM亚洲区域赛获奖者

    北漂女程序员

    喜欢就关注我吧!

    在家人眼里,我学的专业就是打杂的。

    前天我的嫂子问我怎么把微信聊天语音转换成mp3格式保存分享。

    咔咔咔,教程来了。

    1,把微信语音信息保存下来

    2,找到微信语音信息的保存位置

    3,把微信语音转换成mp3格式

    下面是详细教程

    1,把微信语音信息保存下来

    在手机微信上,选择要保存的语音文件,点击收藏。

    再在收藏列表里找到收藏的语音,点击界面右上角的三个点,选择转换成笔记。

    2,找到微信语音信息的保存位置

    在电脑微信端找到收藏成笔记的语音文件,会发现显示不支持查看。

    没关系,我们直接无视他。

      

    在电脑微信的设置-文件管理界面,找到微信文件的默认保存位置。

    重点来了

    选择打开文件夹,直接搜索res

    或者找到文件目录:FileStorage\Fav\Temp\d8b5dc5a\res

    这样就可以找到微信语音信息的文件了。

    这时候这个文件是silk格式的,不能直接打开。所以还有接下来的第三步。

    我这个目录下文件很多啊,我怎么知道哪个是我需要的呢?

    这个问题嘛,你可以根据文件的修改时间大概的判断一下。

    ps,我这个目录是windows系统下的路径,苹果用户可能有稍许差别。

    pps,上述文件路径中的

    这个位置文件夹名称,可能因人而异,实施的时候依次找下来即可,不要盲目复制路径。

    感觉麻烦的话  可以选择直接搜索res。

    3,把微信语音转换成mp3格式

    这一步需要用到软件silk2mp3,他可以将不能直接打开的silk格式文件转化成mp3格式。

    转化之后就可以直接随意保存分享拖拽进度了。

    到此就大功告成啦。需要silk2mp3的在公众号对话框回复【135】可以获取!

    最后,欢迎关注我的视频号分享微信变现、副业赚钱!

                    

    展开全文
  • 微信拼图红包 用自定义图片发红包 好友拼图成功即可抢红包 朋友圈也能抢红包,这样发红包才高级 快来何止互动(heezhi.cn),让你的公众号也能拼红包 重要的是 佣金:1% 你没看错,就是百分之一的佣金 ...

    微信拼图红包

    用自定义图片发红包

    好友拼图成功即可抢红包

    朋友圈也能抢红包,这样发红包才高级

    快来何止互动(heezhi.cn),让你的公众号也能拼红包

    重要的是

    佣金:1%

    你没看错,就是百分之一的佣金

    986b6a6d1a4a460f89869e22c693166c.jpeg

    如果大家要是认为发在群里或是给好友太没劲儿,我们还能选择朋友圈,将我们刚刚保存的语音红包口令发在朋友圈 ,让你所有的朋友都参与进来!

    所以,你愿意独乐乐还是众乐乐呢?

    转载于:https://my.oschina.net/qinyun/blog/1602500

    展开全文
  • 微信小程序-语音红包代码》---- 微信小程序开发,微信趣味语音红包小程序代码。
  • 本文实例为大家分享了Android仿微信录制语音的具体代码,供大家参考,具体内容如下 前言 我把录音分成了两部分 1.UI界面,弹窗读秒 2.一个类(包含开始、停止、创建文件名功能) 第一部分 由于6.0权限问题,点击...
  • 仿微信语音

    2018-05-12 19:28:07
    之前那个有问题,是删掉了一些资源的,重新上传一遍,仿微信语音输入的实现,该有的都有了,导入即可运行,但是Android M版本以上的需要手动更改代码(就是增加一个动态获取权限的代码),M以下直接可运行。
  • 小程序口令红包源码、微信语音口令红包、全套完整版源码、PHP语言开发、带有详细安装教程。 语音口令红包小程序源码/前端+后台PHP/开源/支持二次开发,ThinkPHP3.2新版推荐微信语音 小程序口令红包,发红包的同时还...
  • 微信语音转文字体验

    2020-11-26 20:51:51
    11.离线语音包还需要下载 12.按钮太小看不清楚 13.点击进入上方的语音转文字的页面,如果没有注意到要说话,就自动进入请说话功能,这方面用户体验差 14.识别数字但是不能转成阿拉伯数字 15.可以截图翻译 16.语音转...

    1.减低劳动成度,解放双手,输入速度加快
    2.语音转换时会先输入搜狗app再转应用
    3.语言种类小
    4.方言种类小
    5.断网不能用
    6.多音字不能识别
    7.输入法扩展功能太多,卡顿
    8.每说一个字就会有标点符号
    9.翻译时会出现错别字,需要手动改正
    10.戴耳机可能录不到全部详细内容
    11.离线语音包还需要下载
    12.按钮太小看不清楚
    13.点击进入上方的语音转文字的页面,如果没有注意到要说话,就自动进入请说话功能,这方面用户体验差
    14.识别数字但是不能转成阿拉伯数字
    15.可以截图翻译
    16.语音转文字会有时间限制
    17.可以录入中文 英文等多种语言
    18.可以录入小动物声音
    19.可以录入其他声音
    20.断网之后不可以用

    展开全文
  • 聊天语音包是一款能将微信聊天语音信息转换为特色语音包娱乐性极强的软件,多种网络当红语音素材,很皮语音包应有尽有,包含各种热门的吃鸡语音包,亮剑李云龙、小猪佩奇等语音包皆可免费使用。 特色功能: 1、角色...
  • 仿微信语音聊天

    千次阅读 2017-12-08 11:05:06
    如上图,是常见的仿微信的聊天程序

    这里写图片描述这里写图片描述这里写图片描述这里写图片描述

    如上图,是常见的仿微信的聊天程序,实现的效果如上图所示,由于项目太大,本文只讲录音部分。本项目示例代码:https://github.com/xiangzhihong/weixinAudio

    主要用到4个核心类:
    自定义录音按钮(RecoderButton);
    弹框管理类(RecorderDialog);
    录音管理类(AudioManager);
    录音播放类(MediaManager)。
    其中
    1.AudioRecordButton状态:
    1.STATE_NORMAL:普通状态
    2.STATE_RECORDING:录音中
    3.STATE_CANCEL:取消录音
    2.DialogManager状态:
    1.RECORDING:录音中
    2.WANT_TO_CANCEL:取消录音
    3.TOO_SHORT:录音时间太短
    3.AudioManager:
    1.prepare():准备状态
    2.cancel():取消录音
    3.release():正常结束录音
    4.getVoiceLevel():获取音量

    代码实现

    自定义Button,重写onTouchEvent()方法,用于执行长按录音操作。

    class AudioRecorderButton{
     onTouchEvent(){
     DOWN:
      changeButtonState(STATE_RECORDING);
              | DialogManager.showDialog(RECORDING)
      触发LongClick事件(AudioManager.prepare() --> end prepared --> |       );
              | getVoiceLevel();//开启一个线程,更新Dialog上的音量等级 
     MOVE:
      if(wantCancel(x,y)){
      DialogManager.showDialog(WANT_TO_CANCEL);更新Dialog
      changeButtonState(STATE_WANT_TO_CANCEL);更新Button状态
      }else{
      DialogManager.showDialog(WANT_TO_CANCEL);
      changeButtonState(STATE_RECORDING);
      }
      UP:
      if(wantCancel == curState){//当前状态是想取消状态
      AudioManager.cancel();
      }
      if(STATE_RECORDING = curState){
      if(tooShort){//判断录制时长,如果录制时间过短
       DialogManager.showDialog(TOO_SHORT);
      }
      AudioManager.release();
      callbackActivity(url,time);//(当前录音文件路径,时长)
      }
     }
    }
    

    相关的逻辑请查看项目源码。

    MediaManager

    public class MediaManager {
    
        private static MediaPlayer mMediaPlayer;
    
        private static boolean isPause;
    
        public static void playSound(String filePath,
                                     MediaPlayer.OnCompletionListener onCompletionListener) {
            if(mMediaPlayer == null){
                mMediaPlayer = new MediaPlayer();
            }else {
                mMediaPlayer.reset();
            }
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mMediaPlayer.setOnCompletionListener(onCompletionListener);
            try {
                mMediaPlayer.setDataSource(filePath);
                mMediaPlayer.prepare();
                mMediaPlayer.start();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        public static void pause(){
            if(mMediaPlayer != null && mMediaPlayer.isPlaying()){
                mMediaPlayer.pause();
                isPause = true;
            }
        }
        public static void resume(){
            if(mMediaPlayer != null && isPause){
                mMediaPlayer.start();
                isPause = false;
            }
        }
        public static void release(){
            if(mMediaPlayer != null){
                mMediaPlayer.release();
                mMediaPlayer = null;
            }
        }
    
    }
    

    RecorderDialog

    录音弹窗类,主要包含录音的各种状态及弹窗。源码如下:

    public class RecorderDialog {
    
        private Dialog mDialog;
        private ImageView mIcon;
        private TextView mLable;
        private TextView mLeftTime;
        private Context mContext;
    
        public RecorderDialog(Context context) {
            this.mContext = context;
        }
    
        public void showRecordingDialog() {
            LayoutInflater inflater = LayoutInflater.from(mContext);
            View view = inflater.inflate(R.layout.dialog_recorder, null);
            mDialog = new Dialog(mContext, R.style.style_dialog);
            mDialog.setContentView(view);
            mIcon = (ImageView) mDialog.findViewById(R.id.recorder_dialog_icon);
            mLable = (TextView) mDialog.findViewById(R.id.recoder_dialog_label);
            mLeftTime=(TextView) mDialog.findViewById(R.id.recoder_leftTime);
            mDialog.show();
        }
    
        public void recording() {
            if (mDialog != null && mDialog.isShowing()) {
                mIcon.setImageResource(R.mipmap.recorder_icon);
                mLable.setText("手指上滑,取消发送");
            }
        }
    
        public void wantToCancel() {
            if (mDialog != null && mDialog.isShowing()) {
                mIcon.setImageResource(R.mipmap.cancel_recorder_icon);
                mLable.setText("松开手指,取消发送");
            }
        }
    
        public void tooShort() {
            if (mDialog != null && mDialog.isShowing()) {
                mIcon.setImageResource(R.mipmap.voice_to_short);
                mLable.setText("录音时间过短");
            }
        }
    
        //倒计时提示(10-->0)
        public void recoderConfirm(int time) {
            if (mDialog != null && mDialog.isShowing()) {
                mIcon.setVisibility(View.GONE);
                mLeftTime.setVisibility(View.VISIBLE);
                mLeftTime.setText(time+"");
                mLable.setText("松开手指,取消发送");
            }
        }
    
        public void dimissDialog() {
            if (mDialog != null && mDialog.isShowing()) {
                mDialog.dismiss();
                mDialog = null;
            }
        }
    
        public void setVoiceLevel(int level) {
            if (mDialog != null && mDialog.isShowing()) {
                //用switch冗余
                int resId = mContext.getResources().getIdentifier("v"+level,"mipmap",mContext.getPackageName());
            }
        }
    }
    

    由于需要用到权限系统,所以需要在配置文件中添加相关的权限。

    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
    

    RecoderButton

    自定义录音按钮,录音的一切判断都在这个文件。

    public class RecoderButton extends TextView implements AudioManager.AudioStateListener {
    
        private static final int DISANCE_Y_CANCEL = 50;
        private static final int STATE_RECORDER_NORMAL = 1; //正常
        private static final int STATE_RECORDING = 2;  //正在录制
        private static final int STATE_CANCEL = 3;  //取消
        private static final int MSG_AUDIO_PREPARED = 0X10;
        private static final int MSG_AUDIO_CHANGED = 0X11;
        private static final int MSG_AUDIO_DIMISS = 0X12;
        private static final int MSG_AUDIO_TIME_OUT = 0X13;
        private boolean mReady;
        private int mCurState = STATE_RECORDER_NORMAL;
        private boolean isRecording = false;//正在录音
        private float maxTime=10;//最大录制时长
        private float mTime=0;//录制时长
        private Timer timer = new Timer();
        private int leftTime=10;//录音倒计时,10开始提示
        private RecorderDialog dialog=null;
        private AudioManager audioManager=null;
        private FinishRecorderListener mListener;
    
        public RecoderButton(Context context) {
            this(context, null);
        }
    
        public RecoderButton(Context context, AttributeSet attrs) {
            super(context, attrs);
            initDialog();
            initClick();
        }
    
        private void initClick() {
            setOnLongClickListener(new OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    mReady = true;
                    audioManager.prepareAudio();
                    return false;
                }
            });
        }
    
        private void initDialog() {
            dialog = new RecorderDialog(getContext());
            String dir = Environment.getExternalStorageDirectory() + "/recorder";//创建文件夹
            audioManager = AudioManager.getInstance(dir);
            audioManager.setOnAudioStateListener(this);
        }
    
        /**
         * 获取音量大小
         */
        private Runnable mGetVoiceLeveelRunnable = new Runnable() {
            @Override
            public void run() {
                while (isRecording) {
                    try {
                        Thread.sleep(100);
                        mTime += 0.1f;
                        mHandler.sendEmptyMessage(MSG_AUDIO_CHANGED);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
    
    
        private Handler mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
                    case MSG_AUDIO_PREPARED:
                        dialog.showDialog();
                        isRecording = true;
                        new Thread(mGetVoiceLeveelRunnable).start();
                        break;
                    case MSG_AUDIO_CHANGED:
                        dialog.voiceLevel(audioManager.getVoiceLevel(7));
                        System.out.println("录音时间:"+mTime);
                        if (mTime>maxTime){
                           confirmTimer();
                        }
                        break;
                    case MSG_AUDIO_DIMISS:
                        dialog.dimissDialog();
                        break;
                }
            }
        };
    
        //录音倒计时
        private Handler handler = new Handler() {
            public void handleMessage(Message msg) {
                leftTime--;
                if (leftTime<=0){
                    dialog.dimissDialog();
                    audioManager.release();
                    if (mListener != null) {
                        mListener.onFinish(mTime, audioManager.getCurrentFilePath());
                    }
                    return;
                }
                dialog.recoderConfirm(leftTime);
            }
        };
    
        @Override
        public void wellPrepared() {
            mHandler.sendEmptyMessage(MSG_AUDIO_PREPARED);
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            int action = event.getAction();
            int x = (int) event.getX();
            int y = (int) event.getY();
            switch (action) {
                case MotionEvent.ACTION_DOWN:
                    changeState(STATE_RECORDING);
                    break;
                case MotionEvent.ACTION_MOVE:
                    if (isRecording) {
                        //根据x y的坐标判断是否想取消
                        if (wantToCancel(x, y)) {
                            changeState(STATE_CANCEL);
                        } else {
                            changeState(STATE_RECORDING);
                        }
                    }
                    break;
                case MotionEvent.ACTION_UP:
                    if (!mReady) {
                        reset();
                        return super.onTouchEvent(event);
                    }
                    if (!isRecording || mTime < 1.0f) {
                        System.out.println("录音时间过短");
                        dialog.recoderShort();
                        audioManager.cancel();
                        mHandler.sendEmptyMessageDelayed(MSG_AUDIO_DIMISS, 1300);
                    } else if (mCurState == STATE_RECORDING) {
                        System.out.println("正常录制");
                        dialog.dimissDialog();
                        audioManager.release();
                        if (mListener != null) {
                            mListener.onFinish(mTime, audioManager.getCurrentFilePath());
                        }
                    } else if (mCurState == STATE_CANCEL) {
                        System.out.println("取消了");
                        dialog.dimissDialog();
                        audioManager.cancel();
                    }
                    reset();
                    break;
    
            }
            return super.onTouchEvent(event);
        }
    
        //恢复状态及标志位
        private void reset() {
            isRecording = false;
            mReady = false;
            mTime = 0;
            changeState(STATE_RECORDER_NORMAL);
        }
    
        private boolean wantToCancel(int x, int y) {
            if (x < 0 || x > getWidth()) {//判断手指的横坐标是否超出按钮的范围
                return true;
            }
            //再判断Y
            if (y < -DISANCE_Y_CANCEL || y > getHeight() + DISANCE_Y_CANCEL) {//按钮上部或下部
                return true;
            }
            return false;
        }
    
        //随着状态的改变,文本颜色和背景改变
        private void changeState(int state) {
            if (mCurState != state) {
                mCurState = state;
                switch (state) {
                    case STATE_RECORDER_NORMAL:
                        setBackgroundResource(R.drawable.recentgle_gray_border);
                        setText("按住 说话");
                        break;
                    case STATE_RECORDING:
                        setBackgroundResource(R.drawable.recentgle_gray);
                        setText("松开结束");
                        if (isRecording) {
                            dialog.recording();
                        }
                        break;
                    case STATE_CANCEL:
                        setBackgroundResource(R.drawable.recentgle_gray);
                        setText("松开手指,取消发送");
                        dialog.cancelRecorder();
                        break;
                }
            }
        }
    
        //倒计时定时器
        private void confirmTimer() {
            timer.schedule(new TimerTask() {
                @Override public void run() {
                    try {
                        Thread.sleep(1000);
                        handler.sendEmptyMessage(MSG_AUDIO_TIME_OUT);
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }, 0, 1000);
        }
    
        public interface FinishRecorderListener {
            void onFinish(float seconds, String filePath);
        }
    
        public void setRecorderListener(FinishRecorderListener listener) {
            mListener = listener;
        }
    }
    

    最后录制完成后,点击列表的语音会完成播放功能。

    MediaManager

    public class MediaManager {
    
        public static MediaManager instance=null;
        private  MediaPlayer mMediaPlayer=null;
        private static boolean isPause=false;
    
        public static synchronized MediaManager getInstance() {
            if (instance == null) {
                instance = new MediaManager();
            }
            return instance;
        }
    
        public  void playSound(String filePath){
            playSound(filePath,null);
        }
    
        public void playSound(String filePath,
                                     MediaPlayer.OnCompletionListener onCompletionListener) {
            if(mMediaPlayer == null){
                mMediaPlayer = new MediaPlayer();
            }else {
                mMediaPlayer.reset();
            }
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mMediaPlayer.setOnCompletionListener(onCompletionListener);
            try {
                mMediaPlayer.setDataSource(filePath);
                mMediaPlayer.prepare();
                mMediaPlayer.start();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public  void pause(){
            if(mMediaPlayer != null && mMediaPlayer.isPlaying()){
                mMediaPlayer.pause();
                isPause = true;
            }
        }
    
        public  void resume(){
            if(mMediaPlayer != null && isPause){
                mMediaPlayer.start();
                isPause = false;
            }
        }
    
        public  void release(){
            if(mMediaPlayer != null){
                mMediaPlayer.release();
                mMediaPlayer = null;
            }
        }
    }
    

    对于聊天列表,是一个比较复杂的逻辑,开发的时候可以重写getItemViewType函数,然后不同的ViewType加载不同的视图,例如我的项目代码如下:

     ChatItem struct = getItem(position);
            switch (struct.chatType) {
                case ChatItem.CHAT_TYPE_TIME:
                    return initTimeView(convertView, parent, (String) struct.data);
                case ChatItem.CHAT_TYPE_GROUP_TIP:
                    return initTipView(convertView, parent, (String) struct.data);
                case ChatItem.CHAT_TYPE_OUT_TEXT:
                    return initOutTextView(convertView, parent, (Message) struct.data);
                case ChatItem.CHAT_TYPE_IN_TEXT:
                    return initInTextView(convertView, parent, (Message) struct.data);
                case ChatItem.CHAT_TYPE_OUT_IMAGE:
                    return initOutImageView(convertView, parent, (Message) struct.data);
                case ChatItem.CHAT_TYPE_IN_IMAGE:
                    return initInImageView(convertView, parent, (Message) struct.data);
                case ChatItem.CHAT_TYPE_OUT_AUDIO:
                    return initOutAudioView(convertView, parent, (Message) struct.data);
                case ChatItem.CHAT_TYPE_BONUS_NOTICE:
                    return initBonusNotice(convertView, parent, (Message) struct.data);
                case ChatItem.CHAT_TYPE_RECOMMEND:
                    return initRecommendType(convertView, parent, (Message) struct.data);
                default:
                    return new View(context);
            }
    

    如果,你想了解mp3格式相关的内容,可以查看下面的链接:http://blog.csdn.net/omrapollo/article/details/50470659

    展开全文
  • Android仿微信语音录制和播放

    千次阅读 2017-11-01 17:20:15
    介绍这是一款参考环信的语音录制和播放库,轻量级,自带语音录制时动画效果,根据声音大小进行动画展示:具体看图和gif动画效果: 使用步骤:注意,目前还在开发阶段,有bug记得提issues哈注意,6.0以上系统需要...
  • 仅供学习交流使用,不提供技术支持
  • 现在在微信群或者QQ群里,经常能看到很多小伙伴发一些一秒语音,但点开之后,实际上是一段音乐,这些音乐都是比较火的DJ或者抖音歌曲,很能活跃气氛。那么这些语音都是怎么操作出来的呢?其实很简单,今天我就教大家...
  • 微信只能开发平台http://pr.weixin.qq.com/,里面包含了微信语音和图像,集成很简单,下载方demo后会有个文档,按照流程来(因为它只提供了真机的.a文件,所以只能用真机哦,不然会报错) 先用个有UI界面的sdk 1.装...
  • h5+css3语音实时聊天系统|仿微信语音聊天|js音频录制|仿微信地图定位 基于html5开发的仿微信语音聊天系统weChatIM项目,采用了h5+css3+jQuery+swiper+wcPop+mescroll等技术选型开发,实现了下拉刷新消息,发送信息...
  • 仿微信语音对话实现

    2018-03-09 09:31:54
    要实现下面的布局(先思考下如何实现,看似简单,或许会有所收获) &lt;FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content"...
  • 熟悉微信功能 ,了解微信群的人都知道在微信群讲课最大的问题就在于语音不能被转发到其他微信群,这就导致即使一个平台建了许多微信群,并邀请了一位重量级嘉宾来做分享,嘉宾的语音也只能在一个群里分享,最多只能...
  • 微信发送自定义语音

    千次阅读 2019-03-08 16:11:02
    很皮微信前景开发遇到的难题收集语音素材问题解决录制音频如何变声音频格式转换amr问题(ffmpeg&amp;amp;amp;amp;amp;amp;amp;amp;amp;amr)音频方面的知识点音频文件的组成PCM&amp;amp;amp;amp;amp;amp;amp;...
  • 1,首先看下主要部分 if (navigator.mediaDevices.getUserMedia) { //navigator.mediaDevices.getUserMedia()会提示用户给予使用媒体输入的许可,媒体输入会产生一个MediaStream,里面包含了请求的媒体类型的轨道/...
  • 这个系列会介绍如何快速上手进行公众号、WEB/小程序、钉钉等平台的开发接入。我肯定不敢说自己写的东西比腾讯、阿里官方文档更...从微信服务的业务结构上来讲,订阅号和服务号属于同一类应用,小程序、WEB属于另一类...
  • 微信现在越来越受欢迎,因为它很大程度上方便人们分享他们的照片,生活事件,以及与他人随时随地聊天。但是如果给你一段会议录音让你整理出来打成音频文件,你是不是会感觉到头疼麻烦...普通的方法是不能完成微信语音合...
  • 腾讯云语音识别(asr) 为开发者提供语音转文字服务的最佳体验。 语音识别服务具备识别准确率高、接入便捷、性能稳定等特点。 腾讯云语音识别服务开放实时语音识别、一句话识别和录音文件识别三种服务形式,满足不同...
  • Android 仿微信实现语音聊天功能

    万次阅读 多人点赞 2017-11-28 19:09:01
    需要注意:改下自定义button的名哦,不然会找不到的 xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:...
  • VoiveHotMoney 语音红包小程序
  • 微信语音分享

    2019-01-30 05:56:59
    微信是大家平时使用最多的聊天软件,其中可以通过打字、语音、视频等方式进行沟通。但是大家有没有发现一个问题,那就是微信里的语音是分享不了的,就算你是收藏了,然后再分享也会被提示语音格式不支持分享。我们...
  • 专注于分享4/5G网优资料:包括网络优化基础原理资料、各厂家常用网管指导、接入、切换、掉线、高丢、干扰分析、速率、容量负载均衡、覆盖单验簇优化、各类网优常用工具合集
  • QQ和微信导出的amr音频文件,大家可以发现用一般播放器都是播放不了的,原因是虽然音频格式是amr,但却不是标准amr编码的,而是采用了Silk v3音频编码,导致很多播放器都播放不了,本工具可以批量添加Silk v3音频...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,552
精华内容 9,020
关键字:

微信语音包