Tuesday, September 30, 2008

又一次NOKIA拆机达成:协助Maruko酱给N76换壳

DISCLAIMER:
请有意动手的兄弟姐妹仔细参照NOKIA一二级维修手册,备齐工具后再开始拆解……由于本图不甚详细,所有由于本Blog导致的拆解故障,本人一律不负责任。
CAUTION:
拆解过程有可能导致手指划伤或划破(拆解转轴&上盖框架最容易划破……=。=)

拆解键盘的过程不要依照官方手册进行(除非你不想要你键盘了),只需要用小刀轻翘(用力撬可能损坏键盘小板)键盘四周的卡扣,先把键盘排线拿出,然后剥离键盘(注意用力均匀,不要破坏键盘小板)。

音量键如果阻力很大或者不灵敏,请把附件固定的螺丝拧松一点……


切入正题:
Maruko酱姐姐的N76掉漆严重(貌似BUPT06级的某位TX的N76掉漆也很厉害),所以我应邀协助姐姐换外壳……
换之前当然是败一套外壳……
于是收了优能的金属转轴银黑外壳外加音乐按键(8是高仿壳……传说如果是高仿壳换上就继续等着掉漆吧……)。
去掉上盖之后的部分:

IMG_3583

上翻盖特写:

IMG_3586

N76拆解的复杂程度仅次于N93i……从这个上盖的接口就可以看出来,一个上盖有2个排线扣……而且上盖的主板和外屏是用卡扣卡住的……
从这张图大致可以看到积灰的位置:转轴内灰尘很多,上盖屏幕音乐按键处……
下面的图展示了上盖拿掉之后合上翻盖的情景……
拆机的时候,上盖里面的听筒、前镜头罩+光传感器不要忘了拿(我就是忘了拿……=。=b)

IMG_3588

主板的特写:

最靠近拍摄者的位置还有一个排线扣,拆的时候不要忘记打开……(这种事情我是不会忘的)

IMG_3587

  各种零件特写:

近景灰色为屏蔽罩(就是壳子背面银色的部分,远景为主板)

IMG_3590

IMG_3591

一桌子狼藉……

IMG_3592

这个是转轴盖里面的扬声器,这块板子上还有USB接口+电源开关+3.5mm Audio Jackey

IMG_3593

拆换达成后的图(合盖状态)

貌似有点闭合不严密,原因是键盘没有粘贴牢固

IMG_3594

恢复往日shining态的N76……

IMG_3595

=========================================

后记:

这里特别感谢一下Maruko酱……不是因为BG了我去一茶一坐,而是因为Maruko酱超级有耐心的等我换壳……

本来换壳应该90分钟足够搞定了……结果我粗心大意,先是因为忘了带双面胶导致键盘无法粘牢,后来又是屏幕无限进灰+电源键失灵导致第一次返工

然后内存盖里面的阻尼橡胶+主板背面隔热胶忘了贴导致第二次返工

再然后听筒+前摄头+光传感器罩忘了装导致第三次返工……

最后因为音量键不灵敏(因为螺丝上紧了)导致最后一次返工……

前前后后导致了这次换壳并不顺利……而且因为总在研究怎么拆解导致没有功夫去拍照……所以这次的拆机图如此简单简陋……

抱歉咯Maruko酱……若有机会让我分解N95……保证不会有差池了……

Tuesday, September 09, 2008

北邮院系改革

发信人: elite (颖子), 信区: BUPT
标  题: 改革
发信站: 新真情社区- (Thu Jul 10 23:02:53 2008), 站内

一、撤销电信工程学院和信息工程学院,在原电信工程学院和原信息工程学院的基础上
成立信息通信工程学院,正处级机构。下设电信工程、信息工程教学实体,副处级
机构。其他需要设立的三级机构由学院领导班子讨论并报学校批准。信息通信工程学院
支撑信息与通信工程一级学科、军事通信学二级学科。

二、撤销语言学院和文法经济学院,在原语言学院、文法经济学院的基础上成立人文学
院,正处级机构。下设外国语、法律、马克思主义研究中心、网络文化与创意中心
、国际汉语教育中心。其他需要设立的三级机构由学院领导班子讨论并报学校批准。其
中外国语、马克思主义研究中心、网络文化与创意中心为副处级机构。人文学院支撑
文学、法学、哲学等学科门类。

三、撤销计算机科学与技术学院,在原计算机科学与技术学院的基础上成立计算机学院
,正处级机构。原信息工程学院信息安全、智能科学学科及人员并入。下设计算机科学
与技术、信息安全、智能科学与网络工程。其他需要设立的三级机构由学院领导
班子讨论并报学校批准。计算机学院支撑计算机科学与技术一级学科,信息安全、密码
学二级学科。

四、保留经济管理学院,正处级机构。原文法经济学院的经济学科及人员并入。下设管
理学和经济学。其他需要设立的三级机构由学院领导班子讨论并报学校批准。经济
管理学院支撑管理学、经济学等学科门类。

五、保留理学院,正处级机构。下设物理和数学。其他需要设立的三级机构由学院
领导班子讨论并报学校批准。理学院支撑理学学科门类。

六、保留电子工程学院,正处级机构。原电信工程学院电子科学与技术学科及人员并入
。其他需要设立的三级机构由学院领导班子讨论并报学校批准。电子工程学院支撑电子
科学与技术、生物医学工程一级学科。

七、保留自动化学院,正处级机构。其他需要设立的三级机构由学院领导班子讨论并报
学校批准。自动化学院支撑机械工程、控制科学与工程一级学科,物流工程二级学科。

八、成立网络技术研究,正处级机构。设立信息网络中心,副处级机构。其他需要设
立的三级机构由学院领导班子讨论并报学校批准。职能是支撑网络与交换技术国家重点
实验室,支持信息与通信工程、计算机科学与技术一级学科,信息安全、密码学二级学
科。

九、成立光电子与光通信研究,正处级机构。其他需要设立的三级机构由学院领导班
子讨论并报学校批准。职能是支撑光电子教育部重点实验室,冲击国家重点实验室,支
撑光学工程一级学科,支持信息与通信工程、电子科学与技术一级学科。

l 继续教育学院:

l 网络教育学院:

l 软件学院:

l 国际学院:

l 民族教育学院:

--
. * .    . .     .     .   .  ..   .  .*   .  .  .    ,~,      .    .
       *                   .     .   .    .    .    .:.:,:,  .  .      .
.      .   *     *  . .*   .          .    .      ;;::x::;;  .    .
.       .   .      * .  *    .  ● ●   .      .    ,:.:`:.      .    .   - by
  vVv vVv vVvvV v              <▇X▊>    vVv   vVv  v'|' vVv vVv vVv vVv heaven
vVv vVv vVv vVv vVv▁▂▃▄▅▆▇▇▇▇▇▇▆▅▄▃▂▁|vVv vVv vVv vVv v cat

※ 来源:·新真情社区- newbupt.org·[FROM: 219.237.146.*]

Monday, September 08, 2008

C语言读写wav文件范例2


struct WAVEFORMA
{//模仿WAVEFORMATEX,WAVE文件的头部数据格式
unsigned short wFormat; /* format type */
unsigned short nChann; /* number of channels (i.e. mono, stereo...) */
unsigned long nSamplesPer; /* sample rate */
unsigned long nAvgBytesPer; /* for buffer estimation */
unsigned short nBlockAl; /* block size of data */
unsigned short wBitsPerSam; /* number of bits per sample of mono data */
unsigned short cbS; /* the count in bytes of the size of */
         /* extra information (after cbSize) */
};
#if defined WIN32 || defined WIN64 || defined __i386__ || defined __alpha__
#define NL_LITTLE_ENDIAN
#endif
#ifdef NL_LITTLE_ENDIAN
#define nlSwaps(x) (unsigned short)(((((unsigned short)x) & 0x00ff) << 8) |\
((((unsigned short)x) & 0xff00) >> 8))
#define nlSwapl(x) (unsigned long)(((((unsigned long)x) & 0x000000ff) << 24) | \
((((unsigned long)x) & 0x0000ff00) << 8) | \
((((unsigned long)x) & 0x00ff0000) >> 8) | \
((((unsigned long)x) & 0xff000000) >> 24))
#else
/* no conversion needed for big endian */
#define nlSwaps(x) (x)
#define nlSwapl(x) (x)
#endif /* NL_LITTLE_ENDIAN */
static int readSamples(int f, short *buffer, int len)//读样本数据
{
int count;
/* no conversion needed, just swap */
  count = read(f, buffer, sizeof(short) * len);/*从文件中当前位置读出数据至buffer.count若成功返回读出的字节数*/
if(count < 0)
{
printf("read error");
return 1;
}
  count /= 2;
swapSamples(buffer, count);
return count;
}
////////////////////////////////////先读头部,后读样本数据
struct WAVEFORMA WAVEFORMAT;
infile = open(aa, O_BINARY|O_RDONLY);
read(infile, &WAVEFORMAT, sizeof(WAVEFORMAT));//读头部
buflen = readSamples(infile, samples, NUM_SAMPLES);//按你的需要读数据

C语言读写wav文件的程序

下面是一个C语言写的读写Wav文件的演示程序代码。
给出了常用的PCM格式WAV头的类型定义,可以直接拿去使用。
程序有两个部分,第一个部分读取一个WAV文件并且给出该WAV文件的基本信息(声道数,采样率...)
第二个部分生成了一个 16K,双声道,每个采样点用16bits量化的WAV文件。
/*********************************************************/
// WaveHeader.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
// Microsoft wav pcm sound file format. Normal 44 bytes header
typedef struct _tagMsWavPcmHeader44{
unsigned char ChunkID[4]; // "RIFF"; The "RIFF" the mainchunk;
unsigned long ChunkSize; // FileSize - 8; The size following this data
unsigned char Format[4]; // "WAVE"; The "WAVE" format consists of two subchunks: "fmt " and "data"
unsigned char SubChunk1ID[4]; // "fmt "
unsigned long SubChunk1Size; // 16 for PCM. This is the size of the rest of the subchunk which follows this data.
unsigned short AudioFormat; // 1 for PCM. Linear quantization
unsigned short NumChannels; // 1->Mono, 2->stereo, etc..
unsigned long SampleRate; // 8000, 11025, 16000, 44100, 48000, etc..
unsigned long ByteRate; // = SampleRate * NumChannels * BitsPerSample/8
unsigned short BlockAlign; // = NumChannels * BitsPerSample / 8
unsigned short BitsPerSample; // 8->8bits, 16->16bits, etc..
unsigned char SubChunk2ID[4]; // "data"
unsigned long SubChun2Size; // = NumSamples * NumChannels * BitsPerSample / 8. The size of data
} wav_pcm_header44;
void wave_generator(FILE *fpwav, wav_pcm_header44 *phwav);
void main(int argc, char **argv)
{
FILE *fpWav=NULL;
unsigned long size;
wav_pcm_header44 hwav;
if (argc < 3)
{
printf("Missing parameters:\nFormat: WaveIn.wav WaveOut.wav\n");
return ;
}
/*
* 1. Get wave header information demo
*/
fpWav = fopen(argv[1], "rb");
if (fpWav)
{
fread(&hwav, sizeof(wav_pcm_header44), 1, fpWav);
/* Check wave header */
if ( (0==memcmp(hwav.ChunkID, "RIFF", 4)) &&
(0==memcmp(hwav.Format, "WAVE", 4)) &&
(0==memcmp(hwav.SubChunk1ID, "fmt ", 4)) &&
(0==memcmp(hwav.SubChunk2ID, "data", 4)) &&
(1==hwav.AudioFormat))
{
printf("Wave audio data format:\n");
printf("Channel number: %d\n", hwav.NumChannels);
printf("SampleRate: %dHz\n", hwav.SampleRate);
printf("BitsPerSample: %dbits\n", hwav.BitsPerSample);
printf("Audio data size:%d\n", hwav.SubChun2Size);
}
fclose(fpWav);
fpWav = NULL;
}
else
{
printf("Open wave file %s failed!\n", argv[1]);
}
/*
* 2. Generate wave file demo
*/
fpWav = fopen(argv[2], "wb+");
if (fpWav)
{
/* initial wave file header */
memcpy(hwav.ChunkID, "RIFF", 4);
hwav.ChunkSize = sizeof(wav_pcm_header44) - 8;
memcpy(hwav.Format, "WAVE", 4);
memcpy(hwav.SubChunk1ID, "fmt ", 4);
hwav.SubChunk1Size = 16;
hwav.AudioFormat = 1;
hwav.NumChannels = 2; // set channels as stereo
hwav.SampleRate = 16000; // set sample rate as 16KHz
hwav.BitsPerSample = 16; // set one sample use 16bits
hwav.ByteRate = hwav.SampleRate * hwav.NumChannels * hwav.BitsPerSample / 8;
hwav.BlockAlign = hwav.NumChannels * hwav.BitsPerSample / 8;
memcpy(hwav.SubChunk2ID, "data", 4);
hwav.SubChun2Size = 0;
// 1. pre write wave header
fwrite(&hwav, sizeof(wav_pcm_header44), 1, fpWav);
// 2. write wave data
wave_generator(fpWav, &hwav);
// 3. rewrite wave header
fseek(fpWav, 0, SEEK_END);
size = ftell(fpWav); // get file size
fseek(fpWav, 0, SEEK_SET);
hwav.ChunkSize = size - 8; // update size
hwav.SubChun2Size = size - sizeof(wav_pcm_header44);
fwrite(&hwav, sizeof(wav_pcm_header44), 1, fpWav);
fclose(fpWav);
}
else
{
printf("Create wave file %s failed!\n", argv[2]);
}
}
#define PI 3.1415926535897932384626433832795
void wave_generator(FILE *fpwav, wav_pcm_header44 *phwav)
{
int i, j;
double phase = 0;
double inc = 0, fout;
short vout;
if (16 != phwav->BitsPerSample)
{
printf("Wave generator don't support this format\n");
return;
}
// Generate 1Khz
inc = 2*PI*1000/phwav->SampleRate;
for (i=0; i<65536; i++) // generate 65536 blocks
{
phase += inc;
if (phase >= 2*PI)
{
phase -= 2*PI;
}
fout = sin(phase); // get 1KHz sin wave
for(j=0; j<phwav->NumChannels; j++) // for NumChannels
{
vout = (short)(32767 * fout);
fwrite(&vout, sizeof(short), 1, fpwav);
fout *= fout; // for next channel
}
}
}

Sunday, September 07, 2008

Visual Studio 2008 简体中文正式版下载及序列号(无使用期限限制,正式版)

 

VS2008中文试用版刚出来不久就上网拖了下来
可是安装的时候却出问题了。后来,Google了下,把自己遇到的问题和解决方法跟大家分享。
1.让试用版变成正式版
    从Microsoft那下了7个压缩文件分包后,解压后是一个ISO文件。
  我用UltraISO编辑了下ISO文件:Setup-->setup.sdb文件提取出来编辑,将
    [Product Key]
    T2CRQGDKBVW7KJR8C6CKXMW3D
改成
    [Product Key]
    PYHYPWXB3BB2CCMV9DX9VDY8T
这样,安装的时候就默认是这个正版的序列号了。
还有一种方法就是,不改这个文件,安装后,再添加删除程序的时候可以输入序列号:
    PYHYP-WXB3B-B2CCM-V9DX9-VDY8T
也可以变成正版。
好了,可以安装了^_^
顺便把下载连接贴出来:
官方下载地址:

http://www.microsoft.com/downloads/details.aspx?familyid=D95598D7-AA6E-4F24-82E3-81570C5384CB&displaylang=zh-cn

或直接下载压缩:
http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part1.exe
http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part2.rar
http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part3.rar
http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part4.rar
http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part5.rar
http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part6.rar
http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part7.rar
团队资源管理器:
http://download.microsoft.com/download/d/7/2/d72f8415-7b4b-4168-ba3b-65c3ca4c1f81/VS2008TeamExplorerCHS.iso
一些VS2008介绍及学习资料:
Visual Studio 2008的性能改进以及十大新功能:
http://news.csdn.net/n/20080125/113132.html
CSDN--Visual Studio 2008专题
http://subject.csdn.net/vs2008/

Saturday, September 06, 2008

运用多媒体WAV文件格式二三例

(加入日期:2001-4-28)


作者:徐济仁 陈家松
  多媒体技术近年来发展很快,较好品质的声卡可以提供16位的立体声及44KHZ的播放录制能力,它不仅可以提供原音逼真的取样,其合成的音质也十分理想,有的声卡还加入了数字信号处理器,可编程控制的DSP具有强大的运算能力,它可以用来作声音信息的压缩和一些特殊效果的处理。具有此功能的声卡提供的WAV文件提供的语音信息可以满足语音特征识别的要求。 
1.1 RIFF文件和WAV文件格式 
  在Windows环境下,大部分的多媒体文件都依循着一种结构来存放信息,这种结构称为"资源互换文件格式"(Resources lnterchange File Format),简称RIFF。例如声音的WAV文件、视频的AV1文件等等均是由此结构衍生出来的。RIFF可以看做是一种树状结构,其基本构成单位为chunk,犹如树状结构中的节点,每个chunk由"辨别码"、"数据大小"及"数据"所组成。
  辨别码由4个ASCII码所构成,数据大小则标示出紧跟其后数据的长度(单位为Byte),而数据大小本身也用掉4个Byte,所以事实上一个 chunk的长度为数据大小加8。一般而言,chunk本身并不允许内部再包含chunk,但有两种例外,分别为以"RIFF"及"L1ST"为辨别码的 chunk。而针对此两种chunk,RIFF又从原先的"数据"中切出4个Byte。此4个Byte称为"格式辨别码",然而RIFF又规定文件中仅能有一个以"RIFF"为辨别码的chunk。
  只要依循此一结构的文件,我们均称之为RIFF档。此种结构提供了一种系统化的分类。如果和MS一DOS文件系统作比较,"RIFF"chunk就好比是一台硬盘的根目录,其格式辨别码便是此硬盘的逻辑代码(C:或D:),而"L1ST"chunk即为其下的子目录,其他的chunk则为一般的文件。至于在RIFF文件的处理方面,微软提供了相关的函数。视窗下的各种多媒体文件格式就如同在磁盘机下规定仅能放怎样的目录,而在该目录下仅能放何种数据。
  WAV为WAVEFORM(波形)的缩写。声音文件的结构如图1所示,"RIFF"的格式辨别码为"WAVE"。整个文件由两个chunk所组成:辨别码"fmt"(注意,最后一个是空白字符!)及"data"。
  在"fmt"的chunk下包含了一个PCMWAVEFORMAT数据结构,其定义如下:
  typedef struct pcmwaveformat - tag {
  WAVEFORMAT wf ;
  WORD wBitsPerSample;
  } PCMWAVEFORMAT;
  typedef struct waveformat - tag {
  WORD wFormatTag ;
  WORD nChannels;
  DWORD nSamplesPerSec;
  DWORD nAvgBytesperSec;
  WORD nBlockAlign;
  } WAVEFORMAT;
  其意义分别为:
  wFormatTag:记录着此声音的格式代号,例如WAVE_FORMAT_PCM,WAVE_F0RAM_ADPCM等等。
  nChannels:记录声音的频道数。
  nSamp1esPerSec:记录每秒取样数。
  nAvgBytesPerSec:记录每秒的数据量。
  nBlockA1ign:记录区块的对齐单位。
  wBitsPerSample:记录每个取样所需的位元数。
  "data"Chunk包含真正的声音数据。Window目前仅提供WAVE_FORMAT_PCM一种数据格式,所代表的意义是脉派编码调变 (Pu1se Code Modulation)。针对此格式,Windows定义了在"data"的chunk中数据的存放情形,图2中列出了四种不同频道数及取样所需的位元数以及位元位置的安排
  "RIFF" 频道0 频道0 频道0 频道0
  xxxx nChannels=1,wBitsPerSample=8
  "WAVE" 频0(左) 频道1(右) 频道0(左) 频道1 (右)
  "fmt "
  nChannels=2,wBitsPerSample=8
  sizeof(PCMWAVEFORMAT)
  struct of PCMWAVEFORMAT 频道0(低位) 频道0(高位) 频道0(低位)频道0(高位)
  "data" nChannels=1,wBitsPerSample=16
  xxxx 频道0(低位) 频道0(高位) 频道0(低位)频道0(高位)
  (低位) (高位) (低位) (高位)
  wave form data
  nChannels=2,wBitsPerSample=16
  图1 WAV文件结构 图2 PCM文件中位元安排方式
  第一排表示单声道8位元,第二排表示双声道8位元,第三排表示单声道16位元,第四排表示双声道16位元。8位元代表音量大小由8个位元所表示,16 位元则代表音量大小由16个位元所表示。理论上8位元可以表示0~255,16位元可表示0~65536,不过windows却定16位元其值的范围从 -32168~32167。此外尚有一点要注意的是,0并不一定代表无声,而是由中间的数值来决定,也就是在8位元时为128,16位元时为0才是无声。所以,若程序设计时需放入无声的数据,糯特别注意声音格式是16或是8位元,以放入适当的值。
1.2 WAV文件信息的具体应用
  WAV文件中包括了对原始声音的高速率采样,并且以WAVE_PCM_FORMAT脉派编码调变格式,我们可以在VISUAL C++程序中实现,在读出WAVEHDR文件头之后,下面就是原始声音的高速率采样信息,我们可以对它作多方面的信息处理。 
1.2.1 波形显示
  我们可以以时域-幅度的方式显示出原始声音的波形,这是最简单同时也是最直接的信息处理方式。在时域范围内,我们可以观察该信号波形是否连续,中间是否有跳变等。 
1.2.2频谱显示
  我们可以以频域-幅度的方式显示出原始声音的频谱,在对原始信号经过FFT变换之后,可以得到该信号的频谱,进而得到该信号的能量集中带,分布特征,谱对称系数等等。 
1.2.3 用于语音信号识别
  讲话者的个体识别是语音信号处理的一个重要内容,但它的一个前提条件是必须提供语音信号的数字波形,通常的方法是将原始的语音信号进行放大、抗混叠滤波、A/D采样、数值编码,最终得到语音信号的数字波形,通常多采用硬件处理,费时费力,如果我们借助非常成熟的声卡技术,将WAV文件打开,就非常方便地得到语音信号的数字波形,为下一步进行语音信号识别提供良好的前端预处理。 

WAVE格式文件分析

一. RIFF概念

在Windows环境下,大部分的多媒体文件都依循着一种结构来存放信息,这种结构称为"资源互换文件格式"(Resources lnterchange File Format),简称RIFF。例如声音的WAV文件、视频的AV1文件等等均是由此结构衍生出来的。RIFF可以看做是一种树状结构,其基本构成单位为chunk,犹如树状结构中的节点,每个chunk由"辨别码"、"数据大小"及"数据"所组成。

块的标志符(4BYTES)

数据大小 (4BYTES)

数据

                               图一、 块的结构示意图

辨别码由4个ASCII码所构成,数据大小则标示出紧跟其后数据的长度(单位为Byte),而数据大小本身也用掉4个Byte,所以事实上一个chunk的长度为数据大小加8。一般而言,chunk本身并不允许内部再包含chunk,但有两种例外,分别为以"RIFF"及"L1ST"为辨别码的chunk。而针对此两种chunk,RIFF又从原先的"数据"中切出4个Byte。 此4个Byte称为"格式辨别码",然而RIFF又规定文件中仅能有一个以"RIFF"为辨别码的chunk。

RIFF/LIST标志符

数据1大小

数据1

格式/列表类型

数据

                               图二、RIFF/LIST块结构

只要依循此一结构的文件,我们均称之为RIFF档。此种结构提供了一种系统化的分类。如果和MS一DOS文件系统作比较,"RIFF"chunk就好比是一台硬盘的根目录,其格式辨别码便是此硬盘的逻辑代码(C:或D:),而"L1ST"chunk即为其下的子目录,其他的chunk则为一般的文件。至于在RIFF文件的处理方面,微软提供了相关的函数。视窗下的各种多媒体文件格式就如同在磁盘机下规定仅能放怎样的目录,而在该目录下仅能放何种数据。

二. WAV文件格式

WAVE文件是非常简单的一种RIFF文件,它的格式类型为"WAVE"。RIFF块包含两个子块,这两个子块的ID分别是"fmt"和"data",其中"fmt"子块由结构PCMWAVEFORMAT所组成,其子块的大小就是sizeofof(PCMWAVEFORMAT),数据组成就是PCMWAVEFORMAT结构中的数据。

标志符(RIFF)

数据大小

格式类型("WAVE")

"fmt"

Sizeof(PCMWAVEFORMAT)

PCMWAVEFORMAT

"data"

声音数据大小

声音数据

图三、WAVE文件结构

PCMWAVEFORMAT结构定义如下:

Typedef struct
...{
     WAVEFORMAT wf;        /波形格式;
     WORD wBitsPerSample;    //WAVE文件的采样大小;
} PCMWAVEFORMAT;

//WAVEFORMAT结构定义如下:
typedef struct
...{
     WORD wFormatag;        //编码格式,包括WAVE_FORMAT_PCM,WAVEFORMAT_ADPCM等
     WORD nChannls;        //声道数,单声道为1,双声道为2;
     DWORD nSamplesPerSec;    //采样频率;
     DWORD nAvgBytesperSec;    //每秒的数据量;
      WORD nBlockAlign;        //块对齐;
} WAVEFORMAT;

"data"子块包含WAVE文件的数字化波形声音数据,其存放格式依赖于"fmt"子块中wFormatTag成员指定的格式种类,在多声道WAVE文件中,样本是交替出现的。如16bit的单声道WAVE文件和双声道WAVE文件的数据采样格式分别如图四所示:

16位单声道:

采样一

采样二

……

低字节

高字节

低字节

高字节

……

16位双声道:

采样一

……

左声道

右声道

……

低字节

高字节

低字节

高字节

……

                             图四、WAVE文件数据采样格式

WAV文件格式实例分析:

0 1 2 3 4 5 6 7 8 9 A B C D E F

00000000H

00000010H

00000020H

00000030H

00000040H

52 49 46 46 0A 06 01 00 57 41 56 45 66 6D 74 20

12 00 00 00 01 00 02 00 44 AC 00 00 10 B1 02 00

04 00 10 00 00 00 66 61 63 74 04 00 00 00 76 41

00 00 64 61 74 61 D8 05 01 00 00 00 00 00 FF FF

00 00 FE FF FE FF 00 00 00 00 FE FF FE FF 00 00

偏移地址

字节数

数据类型

内容

文件头

00H

4

char

“RIFF”; RIFF标志

04H

4

long int

0x00 01 06 0A(注意数据存储顺序); 文件长度

08H

4

char

“WAVE”; WAVE标志

0CH

4

char

“fmt ”; fmt标志,最后一位为空

10H

4

long int

0x12; sizeof(PCMWAVEFORMAT)

14H

2

int

1(WAVE_FORMAT_PCM); 格式类别,1表示为PCM形式的声音数据

16H

2

int

2; 通道数,单声道为1,双声道为2

18H

2

int

44100; 采样频率(每秒样本数)

1CH

4

long int

0x10B10000; 每秒数据量;其值为通道数×每秒数据位数×每样本的数据位数/8。播放软件利用此值可以估计缓冲区的大小。

20H

2

int

数据块的调整数(按字节算的),其值为通道数×每样本的数据位值/8。播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整。

22H

2

每样本的数据位数,表示每个声道中各个样本的数据位数。如果有多个声道,对每个声道而言,样本大小都一样。

50H

4

char

“data”; 数据标记符

54H

4

long int

0x00 01 05 D8; 语音数据大小

注意:初次研究,有不对的地方请各位提出。另外,24H-50H间的数据令我感到困惑,借此请教各位,先谢过了。

发表于 @ 2006年10月24日 14:05:00|评论(1)|编辑

wav文件格式分析详解

 

一、综述
    WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。
RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个
字节便是“RIFF”。
    WAVE文件是由若干个Chunk组成的。按照在文件中的出现位置包括:RIFF WAVE
Chunk, Format Chunk, Fact Chunk(可选), Data Chunk。具体见下图:

------------------------------------------------
|             RIFF WAVE Chunk                  |
|             ID  = 'RIFF'                     |
|             RiffType = 'WAVE'                |
------------------------------------------------
|             Format Chunk                     |
|             ID = 'fmt '                      |
------------------------------------------------
|             Fact Chunk(optional)             |
|             ID = 'fact'                      |
------------------------------------------------
|             Data Chunk                       |
|             ID = 'data'                      |
------------------------------------------------
            图1   Wav格式包含Chunk示例

    其中除了Fact Chunk外,其他三个Chunk是必须的。每个Chunk有各自的ID,位
于Chunk最开始位置,作为标示,而且均为4个字节。并且紧跟在ID后面的是Chunk大
小(去除ID和Size所占的字节数后剩下的其他字节数目),4个字节表示,低字节
表示数值低位,高字节表示数值高位。下面具体介绍各个Chunk内容。
PS:
    所有数值表示均为低字节表示低位,高字节表示高位。

二、具体介绍
RIFF WAVE Chunk
    ==================================
    |       |所占字节数|  具体内容   |
    ==================================
    | ID    |  4 Bytes |   'RIFF'    |
    ----------------------------------
    | Size  |  4 Bytes |             |
    ----------------------------------
    | Type  |  4 Bytes |   'WAVE'    |
    ----------------------------------
            图2  RIFF WAVE Chunk

    以'FIFF'作为标示,然后紧跟着为size字段,该size是整个wav文件大小减去ID
和Size所占用的字节数,即FileLen - 8 = Size。然后是Type字段,为'WAVE',表
示是wav文件。
    结构定义如下:
struct RIFF_HEADER
{
  char szRiffID[4];  // 'R','I','F','F'
  DWORD dwRiffSize;
  char szRiffFormat[4]; // 'W','A','V','E'
};

Format Chunk
    ====================================================================
    |               |   字节数  |              具体内容                |
    ====================================================================
    | ID            |  4 Bytes  |   'fmt '                             |
    --------------------------------------------------------------------
    | Size          |  4 Bytes  | 数值为16或18,18则最后又附加信息     |
    --------------------------------------------------------------------  ----
    | FormatTag     |  2 Bytes  | 编码方式,一般为0x0001               |     |
    --------------------------------------------------------------------     |
    | Channels      |  2 Bytes  | 声道数目,1--单声道;2--双声道       |     |
    --------------------------------------------------------------------     |
    | SamplesPerSec |  4 Bytes  | 采样频率                             |     |
    --------------------------------------------------------------------     |
    | AvgBytesPerSec|  4 Bytes  | 每秒所需字节数                       |     |===> WAVE_FORMAT
    --------------------------------------------------------------------     |
    | BlockAlign    |  2 Bytes  | 数据块对齐单位(每个采样需要的字节数) |     |
    --------------------------------------------------------------------     |
    | BitsPerSample |  2 Bytes  | 每个采样需要的bit数                  |     |
    --------------------------------------------------------------------     |
    |               |  2 Bytes  | 附加信息(可选,通过Size来判断有无) |     |
    --------------------------------------------------------------------  ----
                            图3  Format Chunk

    以'fmt '作为标示。一般情况下Size为16,此时最后附加信息没有;如果为18
则最后多了2个字节的附加信息。主要由一些软件制成的wav格式中含有该2个字节的
附加信息。
    结构定义如下:
struct WAVE_FORMAT
{
  WORD wFormatTag;
  WORD wChannels;
  DWORD dwSamplesPerSec;
  DWORD dwAvgBytesPerSec;
  WORD wBlockAlign;
  WORD wBitsPerSample;
};
struct FMT_BLOCK
{
  char  szFmtID[4]; // 'f','m','t',' '
  DWORD  dwFmtSize;
  WAVE_FORMAT wavFormat;
};

Fact Chunk
    ==================================
    |       |所占字节数|  具体内容   |
    ==================================
    | ID    |  4 Bytes |   'fact'    |
    ----------------------------------
    | Size  |  4 Bytes |   数值为4   |
    ----------------------------------
    | data  |  4 Bytes |             |
    ----------------------------------
            图4  Fact Chunk

    Fact Chunk是可选字段,一般当wav文件由某些软件转化而成,则包含该Chunk。
    结构定义如下:
struct FACT_BLOCK
{
  char  szFactID[4]; // 'f','a','c','t'
  DWORD  dwFactSize;
};

Data Chunk
    ==================================
    |       |所占字节数|  具体内容   |
    ==================================
    | ID    |  4 Bytes |   'data'    |
    ----------------------------------
    | Size  |  4 Bytes |             |
    ----------------------------------
    | data  |          |             |
    ----------------------------------
             图5 Data Chunk

    Data Chunk是真正保存wav数据的地方,以'data'作为该Chunk的标示。然后是
数据的大小。紧接着就是wav数据。根据Format Chunk中的声道数以及采样bit数,
wav数据的bit位置可以分成以下几种形式:
    ---------------------------------------------------------------------
    |   单声道  |    取样1    |    取样2    |    取样3    |    取样4    |
    |           |--------------------------------------------------------
    |  8bit量化 |    声道0    |    声道0    |    声道0    |    声道0    |
    ---------------------------------------------------------------------
    |   双声道  |          取样1            |           取样2           |
    |           |--------------------------------------------------------
    |  8bit量化 |  声道0(左)  |  声道1(右)  |  声道0(左)  |  声道1(右)  |
    ---------------------------------------------------------------------
    |           |          取样1            |           取样2           |
    |   单声道  |--------------------------------------------------------
    | 16bit量化 |    声道0    |  声道0      |    声道0    |  声道0      |
    |           | (低位字节)  | (高位字节)  | (低位字节)  | (高位字节)  |
    ---------------------------------------------------------------------
    |           |                         取样1                         |
    |   双声道  |--------------------------------------------------------
    | 16bit量化 |  声道0(左)  |  声道0(左)  |  声道1(右)  |  声道1(右)  |
    |           | (低位字节)  | (高位字节)  | (低位字节)  | (高位字节)  |
    ---------------------------------------------------------------------
                         图6 wav数据bit位置安排方式

    Data Chunk头结构定义如下:
    struct DATA_BLOCK
{
  char szDataID[4]; // 'd','a','t','a'
  DWORD dwDataSize;
};

三、小结
    因此,根据上述结构定义以及格式介绍,很容易编写相应的wav格式解析代码。
这里具体的代码就不给出了。

四、参考资料
    1、李敏, 声频文件格式WAVE的转换, 电脑知识与技术(学术交流), 2005.
    2、http://www.codeguru.com/cpp/g-m/multimedia/audio/article.php/c8935__1/
    3、http://www.smth.org/pc/pcshowcom.php?cid=129276

hTC Touch Diamond开箱……

这盒子,好多人见过了的吧……这几天大陆多普达在电视上、平面媒体上狂轰滥炸般的宣传Touch Diamond……

盒子的形状……安装几何学术语说,应该是:棱台型……


拆开包装……(手抖了……)

连包装都是镜面的…………指纹收集器……


主角的特写,Touch Diamond的按键区很简洁,HOme键、Back键、接听和挂机键是最直观的……
中间那个圆圆的按钮,实际是有玄机的,中央具备触控功能,周围一圈同样具有触控功能……

仔细看,中央按钮周围,是有箭头的……而且这机器的确具有触控滚轮功能……
mobile01-f7b564fe34a98b849ab70a675a9f5311
很有Style的背面……不知道是不是八箭八心(肯定不是)
mobile01-64e729553563f005340d4c371912e744
各种镜面处理…………连耳麦都不放过……
mobile01-f7d623ca0f879be2c29c6895fb5a1b49
在一雍买东西,配件都会给的很凌乱…………这么袖珍的机器冲关有这么艰难么??

类似iPod产品系的USB插头处理……镜面的……膜我还没撕

这个……不是镜面板砖……是变压器……变压器也是一整面镜面处理,而且还有玄机哦,下面我有介绍

不到1000mAh的袖珍电池……对此不作评价

来分解一下究竟有什么玄机:
变压器插上去,这是不通电的状态

打开电键……
很华丽的……hTC
不知道大陆多普达是不是就是dopod这5个小圈样的Logo……个人认为大陆多普达的logo很恶心

回到包装
拿出充电器之后,如果再掀开最后一次塑料盖……出现这些玩意
上:Smart Accessories加值附件宣传单
下:贴膜
左:Quick Start
右:白纸?(我照片过曝了……)
看来hTC很会藏东西……一层压着一层……
看来以后包装不能随便丢了……

=========================================================================
嗯……败机传统……
手头的机器叠叠乐

最上:Palm Centro
中间: Touch Diamond
下:PANDA TD988(熊猫 TD988,TD-SCDMA手机)
不难看出,hTC Touch Diamond这个十年磨一剑出来的产品确实很薄…………
鸟瞰图:

TD988最窄,而且屏幕下方还是明显存在山寨机MTK的5个小乌龟按钮……
其次 Diamond稍微宽一点
然后Palm Centro因为全键盘的关系,比较宽

棱角处理……
个人感觉Palm Centro处理的最可爱,Diamond处理比较有个性——为了体现Diamond这个名字嘛……
TD988俺就不评论了……

Friday, September 05, 2008

目前可以解鎖或破解的日系手機 (2008/08/29 更新)+纯美日机图鉴

转自台湾部落格 http://jpmobile.pixnet.net/blog/post/17266485
附注:括号内为下面的标注编号
可解鎖: 這邊指不需要卡貼就可以使用的日系手機
Sharp: 801SH、802SH、902SH、703SH、703SHf、903SH
Toshiba(*1): 705T(*2*4)、902T、903T、803T、904T、810T(*2*4)、811T(*2*4)、813T(*2*4)、814T (*3*4)、815T(*3*4)、910T(*4)、911T(*4)、912T(*4)、920T(*4)、X01T、921T(*4)
Samsung(*5): 804SS、705SC、706SC、707SC、707SCⅡ、708SC、709SC、805SC、920SC(*4*6)
SANYO: 801SA
Sony Ericsson: 802SE
Nokia: 702NK、702NKII、705NK、804NK、X01NK、NM850iG、X02NK(*10)
HTC: X01HT、HTCz、S11HT
Motorola: V702MO、V702sMO、M702iG、M702iS、M1000
可破解: 這邊指利用卡貼達到通話功能的日系手機
Sharp: 705SH、804SH、812SH(*9)、904SH、920SH(*9)、922SH(*9)、SH905i(*8)、SH906i(*8)、 814SH(*9)、SH906iTV(*8)、921SH(*9)、816SH(*9)、923SH(*7*8)
Toshiba: 911T、912T、920T、H11T
Panasonic: 705P、705Px、P905i(*8)、P906i(*8)、920P(*7*8)
Fujitsu: F905i(*8)
NEC: N705i(*8)、N905i(*8)、N905iμ(*8)、804N、N906iμ(*8)、N706i(*8)
Sony Ericsson: SO905i(*8)、SO905ics(*8)
Mitsubishi: D905i(*8)
(*1) 2007/06月之後的Toshiba手機無法日英解鎖
(*2) 這幾隻手機目前只能用韌體解鎖,也就是說要透過刷中文韌體的方式來達到解sim card鎖的目的,沒法使用單純的日英介面解鎖。
(*3) 814T和815T無法用卡貼破解。
(*4) 這幾隻手機只能跟店家買解鎖好的,目前無法讓消費者自行解鎖。
(*5) Samsung手機能否解鎖得看版本決定。確認方法是按者"9"開機,而708SC和805SC則是按者"*"開機。
804SS---所有版本都可以解鎖!
705SC---DOWNLOAD 2.40・ 2.30 (翻新機可以解鎖)
706SC---DOWNLOAD 2.30・ 2.40 (翻新機可以解鎖)
707SC---DOWNLOAD 2.50・ 2.60
707SCⅡ-DOWNLOAD 1.2・ 1.3 (2008/2以後製造或是翻新機則無法解鎖)
708SC---DOWNLOAD 2.4 (2008製造或是翻新機可以解鎖)
709SC---DOWNLOAD 1.01・ 1.11 (2008製造或是翻新機可以解鎖)
805SC---DOWNLOAD 4.0 (Ver.4.1版無法解)
(*6) 據說用卡貼只能利用TMSI方式使用,會常圈外,還是跟店家買解鎖好的比較方便。
(*7) 有多媒體鎖,相機功能無法使用。
(*8) 這幾隻DoCoMo手機只能在2G模式下使用,會常圈外。
(*9) 可比照920SH一樣解開多媒體鎖。
(*10) 這隻就是日版的N95,解鎖要2天工作天,大概是要動到硬體吧~

hTC官方全系列拆机手册

Service Manual 是 HTC 供其内部员工使用的手机拆解封装与测试的说明书,以下型号在网络上早已流传,这里只是进行一下汇总!

按字母顺序排列

更多机型文档:
http://wiki.xda-developers.com/i ... =HTC_Service_Manual
Andes (Qtek 2020i,Dopod 696i 等):
http://www.mediafire.com/?zmjwh5bdjdx
Artemis (HTC P3300,Dopod P800 等):
http://www.mediafire.com/?3z23xn15m4d
Athena (HTC Advantage X7500,Dopod U1000 等):
http://www.mediafire.com/?0giynyj2tzn
BlueAngel (Qtek 9090,Dopod 700 等所谓无头有头版):
http://www.mediafire.com/?n0mgybbxxjf
Charmer (T-Mobile MDA Compact II 所谓818+改版机):
http://www.mediafire.com/?uutuzmzenhz
Diamond (HTC Touch Diamond,T-Mobile MDA Compact IV 等):
http://www.mediafire.com/?jnh4f2ndyzz
Elf/Elfin (HTC Touch,Dopod S1 等):
http://www.mediafire.com/?3fylgylh415
Herald (HTC P4350,Dopod C858 等):
http://www.mediafire.com/?ymid3inoknm
Hermes (HTC Z,Dopod 838 Pro 等 HERM100 与 HERM300 型):
http://www.mediafire.com/?ygc92jjd0py
Himalaya (Qtek 2020,Dopod 699 等):
http://www.mediafire.com/?xvntjelym9z
Kaiser (HTC TyTN II,AT&T Tilt 等):
http://www.mediafire.com/?wuxxkcjhqut
Love (HTC P3350,Dopod D805 等):
http://www.mediafire.com/?cnjzinsl3ut
Magician (Qtek S100,Dopod 818 等):
http://www.mediafire.com/?t4siggbs93d
Mercury (HTC TyTN,Dopod CHT9000 等 HERM200 型):
http://www.mediafire.com/?ysigjg9tjgn
Niki/Neon (HTC Touch Dual, Dopod S600等):
http://www.mediafire.com/?ysigjg9tjgn
Prodigy (HTC Touch Cruise, Dopod P860 等):
http://www.mediafire.com/?kt4a39n5kzo
Prodigy (Qtek 9100,i-mate K-JAM 等所谓838圆头版):
http://www.mediafire.com/?1zxlpxnt2do
Trinity (HTC P3600,Dopod D810 等):
http://www.mediafire.com/?cww9ydchdfs
Universal (Qtek 9000,Dopod 900 等):
http://www.mediafire.com/?clcmwryxxxz
Wallaby (Qtek 1020,Dopod 686 等):
http://www.mediafire.com/?hztm2ctb4dl
Wizard (HTC P4300,Qtek A9100 等所谓838方头版):
http://www.mediafire.com/?nb9kzjzwcmg

Monday, September 01, 2008

ZT-->fedora 9下安装flash player





由于在fedora 9下fire fox默认的flash player安装是不能正确安装的,所以还得手动安装



在默认安装flash player失败后,点击手动安装。



本文介绍安装以.rpm结尾的安装文件



当点击手动安装后,页面会打开Adobe 的flash player插件下载页面,选择以.rpm结尾的文件下载



下载路径默认就可以了 ,但是当下载完后,又时会出现 不能安装的问题,提示是你没有权限去安装,当时我 也很纳闷,居然root权限都没权限安装,是不是安装文件出错了,后来下了几次,还是这样的提示,于是再上网查了下。



得出的 结论是,在终端里安装。



于是打开终端,输入命令 rpm -Uvh 下载下来的文件路径,如果是默认路径的话,命令是这个样子的:
# rpm -Uvh flash-plugin-9.0.124.0-release.i386.rpm



其实以上步骤已经完成安装了,但是有人说还得再在后面输入命令 yum install flash-plugin



后面的命令我也输入了,但是提示是找不到安装包了,本以为没安装成功,但是重新启动了下firefox 居然发现安装成功了



本文地址:http://www.flytercel.com
========================
命令yum install flash-plugin这个完全不用输入了,我个人已经实验过了,用rpm -Uvh已经可以安装完毕,重启Firefox即可看到效果~


Linux 命令行下快速安装Firefox 3.0.1

看到有网友介绍的在 Linux 命令行下只需要复制一条命令,就可以安装好 Firefox 3 之后,自己也试了一下,果然很方便,有必要在这里提一下。其实这条命令可以扩展一下,大家只要将命令中 Firefox 在 Mozilla FTP 的路径改一下,就可以快速的安装所有版本的 Firefox 了(比如这个就是安装最新版的3.0.1的命令):
# wget -P ~ ftp://ftp.mozilla.org/pub/firefox/releases/3.0.1/linux-i686/zh-CN/firefox-3.0.1.tar.bz2 && tar xjf ~/firefox-3.0.1.tar.bz2 -C ~


fedora 9添加新到yum 源和fastestmirror插件

添加新到yum 源和fastestmirror插件
由于版权原因fedora 9官方源里没有很多我们想要到东西,所以我们要添加一些非官方源,其中以livna 源和freshrpms 源最大家所熟知。
#rpm -ivh http://rpm.livna.org/livna-release-9.rpm
#rpm -import http://rpm.livna.org/RPM-LIVNA-GPG-KEY
#rpm -ivh http://ftp.freshrpms.net/pub/freshrpms/fedora/linux/9/freshrpms-release/freshrpms-release-1.1-1.fc.noarch.rpm
#rpm -import http://ftp.freshrpms.net/pub/freshrpms/RPM-GPG-KEY
安装yum-plugin-fastestmirror(自动挑选快的镜像站)
#yum install yum-fastestmirror yum-presto