Skype SILK vs. iLBC vs. Speex

对比一下这三种VOIP语音算法的特点:

 

1 参数与特征

 

 

2 SILK性能

 

 

 

   关于iLBC和Speex的性能可以参考以前写的文章。

 

3 关于VOIP一些观点(仅代表个人观点)

 

  1)  Skype 辛苦三年开发的SILK为什么要开源?

       第一,技术上,其实SILK用到了很多Royalty Free的算法部分,遵循开源的法则,取之于民,用之于民;

       第二,商业上,Skype 根本不靠Codec赚钱,他本身最大的优势是网络条件做的比较好,这种环境下无论是SILK、iLBC还是G.729都可以达成比较不错的音质。

       第三,口碑上,提高知名度,都已经把SILK定点好了,将来一定会有很多第三方去推广,广告、市场和口碑双赢;

 

   2)iLBC一定就比Speex质量好吗?

       根据目前的评测,当二者的编码速率差不多时,iLBC的质量要好于Speex,但是也有一些牛人认为iLBC这种每帧独立编码的思想其实是低效率的,通过增加编码冗余也可以达到相同的音质,意思是将CELP编码器增加一些前后冗余信息适当提高码率,也可以提高丢包情况下的抗干扰性,这个暂时还没有定论。

 

   3)Speex 总感觉用的人少?

    到底是Speex的推广差、维护差,还是音质差?虽然Speex的开发者出来解释了很多原因,可是目前好像用的第三方不是很多,同时我也感觉它的音质好像是有一点差。

 

   4)有了SILK,还有人用iLBC吗?

    SILK和iLBC来自两个不同公司skype and GIPS,个人感觉会同时存在。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iLBC (internet Low Bitrate Codec) is a speech codec used for encoding and decoding speech signals. To decode an iLBC-encoded audio file, you can use a decoder library or tool that supports iLBC decoding. Here is an example of how you can decode an iLBC file using the libilbc library in C: 1. Install the libilbc library on your system. 2. Include the necessary header files in your C code: ```c #include <stdio.h> #include <stdlib.h> #include <ilbc/ilbc.h> ``` 3. Write a function to perform the iLBC decoding: ```c void ilbc_decode(const char* input_file, const char* output_file) { FILE* fin = fopen(input_file, "rb"); FILE* fout = fopen(output_file, "wb"); // Get input file size fseek(fin, 0, SEEK_END); long input_size = ftell(fin); rewind(fin); // Allocate memory for input and output buffers int16_t* input_buffer = (int16_t*)malloc(input_size); int16_t* output_buffer = (int16_t*)malloc(input_size * 2); // Double the size for stereo audio // Read the input file into the input buffer fread(input_buffer, sizeof(int16_t), input_size / sizeof(int16_t), fin); // Create an iLBC decoder instance iLBC_Dec_Inst_t* dec_inst = iLBC_create(1); // 1 for 20ms frame size // Perform the decoding int num_frames = input_size / (2 * sizeof(int16_t)); // Assuming mono audio, 2 bytes per sample iLBC_decode(dec_inst, input_buffer, num_frames, output_buffer); // Write the decoded audio to the output file fwrite(output_buffer, sizeof(int16_t), num_frames * sizeof(int16_t), fout); // Cleanup fclose(fin); fclose(fout); free(input_buffer); free(output_buffer); iLBC_free(dec_inst); } ``` 4. Call the `ilbc_decode` function with the input and output file paths: ```c int main() { const char* input_file = "encoded.ilbc"; const char* output_file = "decoded.pcm"; ilbc_decode(input_file, output_file); return 0; } ``` Make sure to replace "encoded.ilbc" with the path to your iLBC-encoded file and "decoded.pcm" with the desired output file path. After running the program, you should have the decoded audio in the output file. Please note that this is just a basic example, and you may need to modify it according to your specific requirements and the iLBC decoder library you are using.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值