Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 声音编码gsm和msgsm的转换
【标  题】:声音编码gsm和msgsm的转换
【关键字】:gsm,msgsm
【来  源】:http://www.cublog.cn/u/117/showart.php?id=93391

声音编码gsm和msgsm的转换

Your Ad Here
用google搜到这么一句,
- msgsm use a different frame format (without the 0xD header)
用ultraedit打开文件普通的gsm文件一看,果真每33字节是以0xD开始,我以为只需要将微软的每32.5字节向后移4位就可以了,于是有了以下代码。但是结果发现这样并不行,仍然无法正常播放。但是还是留下代码以作留念。
不过幸运的是,搜到了msgsm相关代码,而且是个比较有意思的软件Asterisk,可以作电信业务的,有空得研究一下。
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void convert(unsigned char *dst, unsigned char *src)
{
	int i = 0;
	dst[i] = 0xD0  | (src[i] >> 4);

	for (i = 1; i < 33; i++)
	{
		dst[i] = ((src[i-1] & 0x0F) << 4) | (src[i] >> 4);
	}
	
	dst[i++] = 0xD0 | (src[i-1] & 0x0F) ;//dst[33]
	while(i < 66)
	{
		dst[i++] = src[i-1];
	}
}

void fatal(char *s)
{
	fprintf(stderr, "Error: %s\n", s);
	exit(-1);
}

int main()
{
	unsigned char a[65];
	char *p;
	unsigned char b[66];

	FILE *fp_r, *fp_w;

	if ((fp_r = fopen("d:\\msgsm.gsm", "rb")) == NULL)
		fatal("cannot open msgsm.gsm");
	if ((fp_w = fopen("d:\\ljhgsm.gsm", "wb")) == NULL) 
		fatal("cannot open ljhgsm.gsm");

	while(fread(a, 1, 65, fp_r) == 65)
	{
		convert(b, a);
		if(fwrite(b, 1, 66, fp_w) != 66)
			fatal("fwrite");
	}

	fclose(fp_r);
	fclose(fp_w);
	return 0;

}
关于随机数的产生:【上一篇】
C语言库函数---unix常用系统调用---使用说明-2:【下一篇】
【相关文章】
  • 八口GSM/GPRS/CDMA MODEM池
  • WAVECOM USB GSM/GPRS MODEM:法国WAVECOM原装芯片
  • 西门子 TC35 GSM Modem[短信猫]
  • 西门子 TC35i GSM Modem[短信猫]
  • WAVECOM Q2303A GSM MODEM[短信猫]
  • WAVECOM Q2303B GSM Modem[短信猫]
  • 2006年3GSM全球大会10佳手机
  • 移动数据学习-GPRS、GSM、WAP和CDMA 区别
  • GSM 1X两大技术方案比较分析
  • GPRS与GSM和WAP的关系
  • 【随机文章】
  • 功能完整的分页程序
  • 求集合的幂集
  • 一般性编程问题-源码-C++、MFC(五)
  • 远离微软
  • 开卷有益——debian的编程书评
  • Linux系统命令分类详解 (3)
  • 在VB程序中处理随机事件
  • Lucene学习一
  • 没想到,我还是哭了
  • 菜鸟学习的首选
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.