实验项目名称:声音录制、处理及MIDI音乐制作Array实验日期:2011.12.6 实验室:5205试验台号:同组者:一、实验目的本实验旨在加深学生对声音的数字化原理及过程理解,了解计算机处理和存储声音方式,了解WAVE、MIDI和MP3声音数据文件的差别和用法,了解制作简单MIDI音乐方法,掌握几种常用声音处理工具软件的用法,掌握录音、编辑声音、制作MP3格式声音的方法。
二、主要软件与硬件(1) 带有声卡、麦克风、音响(或耳机)和光驱的MPC(2) Windows 2000操作系统,自带声音工具“音量控制”和“录音机”。
(3) 声音处理软件Cool Edit Pro三、实验原理模拟声音三要素,即音高、音色和音强。
数字波形声音技术指标主要包括:采样频率、量化位数和编码算法等。
根据这些技术指标我们把数字波形声音分为五个等级:电话音质、AM音质、FM音质、CD音质和数字录音带。
MP3是MPEG声音层3(Layer3)压缩标准,可以“无失真”的将WAVE文件压缩到原来大小的1/12。
MIDI(musical instrument digital interface,电子乐器数字接口)是计算机特有的数字音乐格式,播放MIDI乐曲需要音乐合成器,合成器合成声音的方法有两种:FM合成法和波表合成法。
MIDI文件的特点有:文件小、易编辑、可以做背景音乐。
四、实验要求1、使用录音软件把10秒钟CD音乐录制成CD音质(44.1kHz、16位、双声道、PCM)的WAVE文件。
2、练习使用Cool Edit Pro,尝试它的各项功能。
制作一段声音文件(作为实验一中设计的数字电视图像伴音文件),这段声音必须既有音乐,又有自己录制的话语,并存为无压缩的WAVE文件。
3、把前一步制作的WAVE声音转换成MP3格式,比较两种格式声音文件的数据量和试听效果。
五、实验条件带有声卡、麦克风、音响(或耳机)和光驱的MPC、Windows XP操作系统,自带声音工具“音量控制”和“录音机”、声音处理软件Cool Edit Pro、一张CD唱盘。
六、实验步骤1.打开cool edit pro 软件:2.点击录音按钮,开始录音,首先在轨道1上录一段音,再在轨道2上录一段音,如图:…3.在文件里选“混缩另存为”,将文件保存为后缀为.wav的文件即可。
总结:经过这次实验,我初步接触了cool edit pro 软件,对音频的制作也有了初步的了解;懂得了音频格式的转换。
.思考题1、如何对不同格式的音频文件进行格式转换。
答:1、打开cool edit pro 软件;2、点击文件菜单下的打开工程选项;3、在软件里打开文件后,再点击文件将文件另存为想要转换的格式即可。
实验项目名称:图像处理及编辑Array实验日期:2011.12. 实验室:5205试验台号:同组者:一、实验目的本实验旨在加深学生对数字图像有关知识的理解,增进对多媒体图像的认识和体会。
掌握数字图像处理中经常用到的基本概念和名词,掌握数字图像处理的基本技能,学习使用图像处理软件Photoshop编辑和处理图像。
二、主要软、硬件(1) MPC,若有条件,则最好配有扫描仪和数字相机。
(2) Windows 2000操作系统。
(3) 图像处理软件Photoshop 6.0。
三、实验原理色调、亮度和饱和度是人的眼睛对客观存在的颜色主观感受的结果。
在计算机产生图形的过程中,计算机显示器通过将不同比例的红色、绿色和蓝色的光波进行混合,构成显示图形上不同颜色,这是一个典型的加色过程。
计算机中常用的色彩空间有:RGB色彩空间、CMYK色彩空间、YCrCb色彩空间等。
数字图像有两类:矢量图与位图,位图图像的基本属性有图像分辨率和图像深度。
数字图像文件有多种存储格式,如BMP、TIFF、GIF、JPG、PNG等,掌握这些图像文件格式的特点及采用的压缩算法。
四、实验要求1、从多种途径搜集制作网页的原始图片。
2、根据网页制作规划中的内容,使用Photoshop对原始图片进行编辑处理,使之符合网页制作要求。
3、使用Photoshop制作网页中需要使用的部分图片,如按钮、标题、背景等。
4、将制作完成的图片保存为GIF或JPEG格式。
五、实验条件连接到因特网的MPC、扫描仪、数字相机、Windows XP操作系统、图像处理软件Photoshop 7.0。
六、实验基本步骤打开图像文件:♦选择【文件】→【打开】选择图片♦Photoshop允许一次打开多个图像文件,按住【Shift】键可以选择连续的文件,按住【Ctrl】键可以选择不连续的文件图像的放大和缩小:♦利用工具箱的放大镜工具就可以方便地对图像成比例地放大与缩小。
设置图像大小:♦【图像】→【图像大小】命令可以调整图像的大小,但调整尺寸后,会影响图像的质量。
可以通过按快捷键来快速选择工具箱中的某一工具:选框-M 移动-V 套索-L 魔棒-W 喷枪-J 画笔-B 铅笔-N 橡皮图章-S 历史记录画笔-Y 橡皮擦-E 模糊-R 减淡-O 钢笔-P 文字-T 度量-U 渐变-G 油漆桶-K 吸管-I 抓手-H 缩放-Z 默认前景和背景色-D 切换前景和背景色-X 编辑模式切换-Q 显示模式切换-F填充工具:Shift+Backspace打开填充对话框;Alt+Backspace和Ctrl+Backspace组合键分别为填充前景色和背景色;按Alt+Shift+Backspace及Ctrl+Shift+Backspace组合键在填充前景及背景色的时候只填充已存在的像素(保持透明区域)。
实验项目名称:Huffman编码算法实现实验日期:2011.12. 实验室:5205试验台号:同组者:一、实验目的本实验旨在加深学生对压缩理论和技术的理解,增进对压缩编码算法的设计和编写能力。
掌握Visual C++编程软件和Huffman算法。
二、主要软、硬件(1) MPC。
(2) Windows 2000操作系统。
(3) VC++。
三、实验内容多媒体数据压缩分为有损数据压缩和无损数据压缩,熵编码(统计编码)是典型的无损数据压缩。
Huffman编码属于统计编码的一种,是最优的整数编码。
三、实验要求1、掌握Huffman编码的原理及算法。
2、了解VC++编程环境。
3、编写代码实现Huffman算法。
四、实验条件MPC、Windows XP操作系统、Visual C++。
五、调试及结果测试#include<stdio.h>#include<iostream>#include<string.h>#include<stdlib.h>using namespace std;const MAXSIZE=100;typedef struct Huffmantree{char cname;int weight,mark;struct Huffmantree *parent,*lchild,*rchild,*next;}Hftree,*linktree;linktree tidy_string(char ch[]){int i=0;linktree tree,ptr,beforeptr,node;tree=(linktree)malloc(sizeof(Hftree)); if(!tree)return NULL;tree->next=NULL;for(i=0;ch[i]!='\0'&&ch[i]!='\n';i++) {ptr=tree;beforeptr=tree;node=(linktree)malloc(sizeof(Hftree)); if(!node)return NULL;node->parent=NULL;node->lchild=NULL;node->rchild=NULL;node->next=NULL;node->mark=0;node->cname=ch[i];node->weight=1;if(tree->next==NULL)tree->next=node;else{ptr=tree->next;while(ptr&&ptr->cname!=node->cname) {ptr=ptr->next;beforeptr=beforeptr->next;}if(ptr&&ptr->cname==node->cname){ptr->weight+=1;free(node);}else{node->next=beforeptr->next;beforeptr->next=node;}}return tree;}linktree squent_node(linktree tree) {linktree head,ph,pt,beforeph;head=(linktree)malloc(sizeof(Hftree)); if(!head)return NULL;head->next=NULL;ph=head;beforeph=head;while(tree->next){pt=tree->next;tree->next=pt->next;pt->next=NULL;ph=head->next;beforeph=head;if(head->next==NULL)head->next=pt;else{while(ph&&ph->weight<pt->weight){ph=ph->next;beforeph=beforeph->next;}pt->next=beforeph->next;beforeph->next=pt;}}free(tree);return head;}linktree createHtree(linktree tree){linktree p,q,newnode,beforep;for(p=tree->next,q=p->next;p!=NULL&&q!=NULL;p=tree->next,q=p->next) {tree->next=q->next;q->next=NULL;p->next=NULL;newnode=(linktree)malloc(sizeof(Hftree));if(!newnode)return NULL;newnode->next=NULL;newnode->mark=0;newnode->lchild=p;newnode->rchild=q;p->parent=newnode;q->parent=newnode;newnode->weight=p->weight+q->weight;p=tree->next;beforep=tree;if(p!=NULL&&p->weight>=newnode->weight){newnode->next=beforep->next;beforep->next=newnode;}else{while(p!=NULL&&p->weight<newnode->weight){p=p->next;beforep=beforep->next;}newnode->next=beforep->next;beforep->next=newnode;}}return (tree->next);}void Huffman_Coding(linktree tree){int index=0;char *code;linktree ptr=tree;code=(char*)malloc(10*sizeof(char));printf("字符以及它的相应权数:哈夫曼编码:\n\n"); if(ptr==NULL){printf("哈夫曼树是空的!\n");exit(0);}else{while(ptr->lchild&&ptr->rchild&&ptr->mark==0){while(ptr->lchild&&ptr->lchild->mark==0){code[index++]='0';ptr=ptr->lchild;if(!ptr->lchild&&!ptr->rchild){ptr->mark=1;code[index]='\0';printf("\tw[%c]=%d\t\t\t",ptr->cname,ptr->weight); for(index=0;code[index]!='\0';index++)printf("%c",code[index]);printf("\n");ptr=tree;index=0;}}if(ptr->rchild&&ptr->rchild->mark==0){ptr=ptr->rchild;code[index++]='1';}if(!ptr->lchild&&!ptr->rchild){ptr->mark=1;code[index++]='\0';printf("\tw[%c]=%d\t\t\t",ptr->cname,ptr->weight); for(index=0;code[index]!='\0';index++)printf("%c",code[index]);printf("\n");ptr=tree;index=0;}if(ptr->lchild->mark==1&&ptr->rchild->mark==1){ptr->mark=1;ptr=tree;index=0;}}}printf("\n");free(code);}void Huffamn_Decoding(linktree tree,char code[]){int i=0,j=0;char *char0_1;linktree ptr=tree;char0_1=(char*)malloc(10*sizeof(char));cout<<"哈夫曼编码相应的字符\n\n";for(j=0,ptr=tree;code[i]!='\0'&&ptr->lchild&&ptr->rchild;j=0,ptr=tree) {for(j=0;code[i]!='\0'&&ptr->lchild&&ptr->rchild;j++,i++){if(code[i]=='0'){ptr=ptr->lchild;char0_1[j]='0';}if(code[i]=='1'){ptr=ptr->rchild;char0_1[j]='1';}}if(!ptr->lchild&&!ptr->rchild){char0_1[j]='\0';for(j=0;char0_1[j]!='\0';j++)cout<<char0_1[j];printf("\t\t%c\n",ptr->cname);}if(code[i]=='\0'&&ptr->lchild&&ptr->rchild){char0_1[j]='\0';cout<<" 没有与最后几个字符的0,1序列:"<<char0_1<<"相匹配的字符!"<<endl; return;}}free(char0_1);}void deletenode(linktree tree){linktree ptr=tree;if(ptr){deletenode(ptr->lchild);deletenode(ptr->rchild);free(ptr);}}int main(){char string[MAXSIZE],code[MAXSIZE];linktree temp,ht,htree,ptr=NULL;cout<<"编码:请输入要当前字符串:"<<endl;cin>>string;cout<<endl;temp=tidy_string(string);ht=squent_node(temp);htree=createHtree(ht);Huffman_Coding(htree);cout<<"解码:请输入要解码的0,1序列:"<<endl;cin>>code;cout<<endl;Huffamn_Decoding(htree,code);deletenode(htree);return 0;}运行结果:六、思考题1、总结实验体会。