社区
C语言
帖子详情
关于speex音频编码的问题.
honglqin
2012-08-22 06:31:17
最近在研究speex音频编解码.如果是一个线程在进行编码的话那是可以用的.但是为了提高编码速度,我想用两个或两个以上的线程同时编码两个或两个以上帧的数据.可是这样编码出来的数据解码后播放出来完全不对啊.
有没有哪位大侠知道如何用speex在多线程下同时编码的吗?
...全文
399
15
打赏
收藏
关于speex音频编码的问题.
最近在研究speex音频编解码.如果是一个线程在进行编码的话那是可以用的.但是为了提高编码速度,我想用两个或两个以上的线程同时编码两个或两个以上帧的数据.可是这样编码出来的数据解码后播放出来完全不对啊. 有没有哪位大侠知道如何用speex在多线程下同时编码的吗?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
程一个大前端
2014-05-07
打赏
举报
回复
你的编码 是怎么弄的哦?能跟我说说么,我弄了好久了,是iOS端的!
honglqin
2012-10-09
打赏
举报
回复
我原来的数据是双声道的,提取出一个声道的数据进行编码就可以了。
honglqin
2012-08-23
打赏
举报
回复
[Quote=引用 7 楼 的回复:]
数据是大于两帧的,知道帧数据的区别吗?是不同的通道,还是什么的?
[/Quote]
好吧,就这么和你说吧.
我通过某种特别的方法获取耳机的PCM数据.但这种方法有个特点,如果你不快点把数据读出数据就会丢失.
现在我要用speex编码然后再用网络发送出去.可是speex编码速度不够快,使得PCM数据丢失.现在我只是想提高speex编码速度就用多线程进行同时编码.可是多线程编码出错了.就是这样.
图灵狗
2012-08-23
打赏
举报
回复
数据是大于两帧的,知道帧数据的区别吗?是不同的通道,还是什么的?
honglqin
2012-08-23
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
一个音频设备的话,物理上你无法多个线程同时去操作它。而且没有必要这么做,你可以一个线程去编码,然后编码出来的音频流,其它线程是可以共享的。
[/Quote]
我没有用多线程操作设备.我只是用一个线程操作设备,从设备里读出来的数据是大于两帧的.所以我想在读取完数据后再用多个线程同时编码.我也只是想提高编码速度而已.
图灵狗
2012-08-23
打赏
举报
回复
一个音频设备的话,物理上你无法多个线程同时去操作它。而且没有必要这么做,你可以一个线程去编码,然后编码出来的音频流,其它线程是可以共享的。
honglqin
2012-08-23
打赏
举报
回复
不可行也没有意义,能否说明一下为什么?这个我还真是不懂.要不然会很纠结的.
图灵狗
2012-08-23
打赏
举报
回复
1个音频设备多线程同时编码是不可行也没有意义的,不同的音频同时解码然后混合输出是可以的。
honglqin
2012-08-23
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
你的音频设备应该只有1个,2个以上的线程不能同时去操作音频设备,所以你得用一些信号量来管理它。
[/Quote]
我每次从从音频设备里读出来的数据是大于两帧的.所以我想用多线程进行同时编码.
honglqin
2012-08-23
打赏
举报
回复
[Quote=引用 12 楼 的回复:]
实时是相对的,你的系统资源不足所以才需要多加Buffer,一点点延迟而已。
[/Quote]
那我试下你的方法,有结果后告诉你.
图灵狗
2012-08-23
打赏
举报
回复
实时是相对的,你的系统资源不足所以才需要多加Buffer,一点点延迟而已。
honglqin
2012-08-23
打赏
举报
回复
[Quote=引用 10 楼 的回复:]
原来如此!所以其实你应该把这个过程分成两个部分,用Double Buffer来解决问题,如果仍然不够快,可以试着增加Buffer,原理是一样的。两个Buffer假设都为32KB,PCM先往第一块Buffer写,第二块Buffer空闲,当写满后送给speex编码,PCM接着往第二块Buffer写,满了之后把第二块Buffer送给speex编码,如此循环。
引用 8 楼 的回复:
引用……
[/Quote]
如果是这样的话,那往Buffer写数据的速度肯定是比编码的速度快.Buffer肯定会被写满的.要是加多一些Buffer,那接收方的声音就会延迟的.我这个项目是要求实时性的.
图灵狗
2012-08-23
打赏
举报
回复
原来如此!所以其实你应该把这个过程分成两个部分,用Double Buffer来解决问题,如果仍然不够快,可以试着增加Buffer,原理是一样的。两个Buffer假设都为32KB,PCM先往第一块Buffer写,第二块Buffer空闲,当写满后送给speex编码,PCM接着往第二块Buffer写,满了之后把第二块Buffer送给speex编码,如此循环。
[Quote=引用 8 楼 的回复:]
引用 7 楼 的回复:
数据是大于两帧的,知道帧数据的区别吗?是不同的通道,还是什么的?
好吧,就这么和你说吧.
我通过某种特别的方法获取耳机的PCM数据.但这种方法有个特点,如果你不快点把数据读出数据就会丢失.
现在我要用speex编码然后再用网络发送出去.可是speex编码速度不够快,使得PCM数据丢失.现在我只是想提高speex编码速度就用多线程进行同时编码.可是多线程编……
[/Quote]
就想叫yoko
2012-08-23
打赏
举报
回复
采集到的PCM数据应该放入队列,另起线程做编码发送处理。
图灵狗
2012-08-22
打赏
举报
回复
你的音频设备应该只有1个,2个以上的线程不能同时去操作音频设备,所以你得用一些信号量来管理它。
speex
-1.2.0.tar.gz
speex
环境安装包,通过安装
speex
环境再加
speex
2wav工具配合完成微信的
speex
文件转为wav文件。通过linux语句调用实现
speex
-1.1.11.tar.gz
非常好的语音处理软件,包括编解码、前处理
(源码)基于
Speex
音频
编解码的
音频
处理系统.zip
# 基于
Speex
音频
编解码的
音频
处理系统 ## 项目简介 本项目旨在提供一个基于
Speex
音频
编解码的
音频
处理系统,主要功能是将从微信服务端下载的高清录音文件(.
speex
格式)解码为.wav格式文件。
Speex
是一种专为语音设计的开源免费
音频
压缩格式,适用于网络
音频
传输。 ## 项目的主要特性和功能 1.
Speex
转WAV解码功能能够将
Speex
格式的
音频
文件解码为WAV格式,便于在多种
音频
处理软件或硬件中使用。 2. 跨平台支持支持在Mac OS和Linux操作系统上进行解码操作。 3. 简洁易用提供Python脚本接口,方便用户快速完成解码任务。 4. 高效的资源管理通过合理的内存管理,确保解码过程的稳定性和效率。 ## 安装使用步骤 1. 安装
Speex
编解码库和Python环境
speex
_
speex
_
speex
.dll_
speex
开源语音编解码,非托管dll
speex
.js 是Web前端网页播放.spx声音文件所需的解码器
speex
.zip 包含
speex
.js 和
speex
.min.js 是Web前端网页播放.spx声音文件所需的解码器; 还包含依赖: bitstring.min.js 和 pcmdata.min.js
C语言
70,021
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章