范例
当前位置:首页 > 其他范文 > 范例 > 列表页

cmp播放器,范例

小草范文网  发布于:2017-05-11  分类: 范例 手机版

篇一:Cplay和cMP的相关 资 料

Cplay相关资源

CMP和Cplay二者搭配的使用方法,网上搜搜比较多,英文、繁体、简体中文都有。我这里就不重复了。个人经验,一定要注意以下几点:

1、Cplay菜单内选择CMP。

2、(xp界面)在CMP里用“Add”选择播放目录

3、选择start CMP,退出软件,电脑就自动重启到CMP界面,除了听歌,别的什么事都做不了。

4、在CMP界面要回到xp界面,选择start XP退出软件重启即可。

在CMP下如果“死机”,任务管理器调不出来,键盘鼠标都不起作用了,按win 键也是徒劳,只能是按主机箱上的键重启。

本来打算在XP界面下,抓几张CMP的设置图给大家看(这些图网上没看到有),遗憾的是print screen sysrq之后,退出CMP电脑就重启了,挡都挡不住哎。相机也不在家,手机拍的清晰度没参考价值,只好作罢。

图片:

图片:

另一收获是验证了:96/8的输出采样率不能通过驱动程序的控制面板调节,但可以在播放器里调节。

昨天空闲时搜集整理了一些相关网页上的使用说明,一并转贴在这里,以节省各位的搜索时间。同时向原贴的诸位先行者道一声感谢!

1、cMP 的基本设定:

首先关掉所有不用的软件,包括防毒软件、QQ、WMA 等,再打开 cPlay 在菜单内设定 cMP>> Yes,关掉 cPlay 。打开 cMP,在菜单内 Folders 位置点 Add 放入音讯档的文件夹,Diagnostics .... Yes,再点 start cMP >> OK >> X,电脑自动重启。重启后反回 cMP;现在已经脱离 Window 的控制,进入 cMP 模式,下面的 Window 快速键没有了,不能够打开其他档案。

播 cPlay 的菜单设定:

RAM Load........No

Start up............None

Suspend..........svchost...Yeslsass....Yes ( EMU 声卡两者都要设定为 No)

Optimize...........Critical

Diagnoctics.......No

点OK 后反回目录,点歌后 cPlay 开启,自动播放。播完后关掉 cPlay 反回 cMP 再点歌播放。这是有 RAM Load 功能的全 cMP 模式,音频质最好。

cMP 还可以开启其他播放器如 foobar、winamp 等播歌、放 DVD、CD 等,但没有 RAM Load 功能,我称之为半cMP 模式,声音比全 cMP模式差一点,但比 XP 模式好30% 以上。

播其他播放器的设定:

RAM Load........Yes

Start up.............None

Suspend...........suchost....Nolsass....No

Optimize...........Real time

Diagnostics......No

点 OK 后反回目录,点 Exploer 打开文件夹,找到其他播放器的路径,打开播放器播放歌曲。可以将各播放器的快速键放入一个文件夹,在 cMP 菜单中 folders >> Add 加入。

(原文链接:http://bbs.hifi168.com/showtopic-113302-386.aspx)

2、cMP下用其他播放器播放的设定

Folders是指cue image的存放位置, cMP本身是以Cplay作設計的, 當然大家也可以用其他program播放, 在cicsMemoryPlayer.pth中, 大家可以更改以cMP, 預設的播放Program, 而這個file可以用記事本來打開,打開後, 大家會見到, highlight了的部份是預設的播放Program, 大家只要在這兒更改, 便可以對應大家喜愛的播放program, 即使是wavelab, foobar, 千千靜聽等, 大家也可用上。

……(对这部分内容有兴趣的dx可以参看原文:/forum/viewthread.php?action=printable&tid=72199)

小的最近改用Cplay在CAS播放音樂..

音色真的比foobar2000好...

可是cplay超級不方便...介面very user-unfriendly...

cplay本身只支援cue, flac, wave

sound card一定要支援ASIO才用到...

若你的sound card不支援ASIO, 那麼便要用ASIO4ALL來作對應..

除非你播放cue(可當作Audio CD image), 否則沒有playlist...

若大家想有自己的playlist

那要先將自己想要的音樂file, 放於foobar的playlist...

再將playlist全部歌都選...convert to Album Images with Cuesheets or Chapters

那麼造出來的wave, 是將playlist的歌...都轉做一首wave的Audio CD image...

cplay會認到Audio CD image, 再分成一個playlist的...

但要注意..若你聽的是mp3..ogg or 其他破壞式音樂格式...轉回wave後, 音色不會改善, 即使聽到的改善..也只是來自cplay的播放能力, 但音樂格式的size會比mp3大很多的...

因小的歌曲全是wave, 經測試foobar只是將wave, copy至Audio CD image, 音色與原來的wave是沒有分別的...大家可以放心...

雖然要用這麼間接的方法做playlist, 但也很值得推薦給大家...

希望往後的版本會user friendly大為改善...

下載地點:

http://sourceforge.net/project/showfiles.php?group_id=226826

希望大家也喜歡她的音色...

3、怎样使用EAC重新制作cue

EAC也可整cue給Cplay 及wavelab用,但只限wave,不過整出來的cue用在cplay上沒有歌名,我自己用記事簿開出來另加,有點麻煩,但不用copy多一個audio file不同音樂檔的單曲WAV樂曲,可以經EAC再做一個CUE,cPlay 便可以實現連續自動播放。設定如下:

打開 EAC, 點左下角 CUE WRI 快速鍵打開CD Layout Editor;Layout >> Append Files As New Track >>點WAV 音樂檔 >> 開啟 >>撰曲 >> 開啟。可以撰多首不同的樂曲。第二步:點 File >> Save CUE Sheet 完成。

不同音乐档的单曲WAV乐曲,可以经EAC再做一个CUE,cPlay 便可以实现连续自动播放。设定如下:打开 EAC, 点左下角 CUE WRI 快速键打开CD Layout Editor;Layout >> Append Files As New Track >>点WAV 音乐档 >> 开启 >>撰曲 >> 开启。可以撰多首不同的乐曲。第二步:点 File >> Save CUE Sheet 完成。

APE转一下也不算太慢,用foobar或者monkey's audio解压后将cue文件内文件名改为"wav"后缀即可,而如果是直接抓盘,EAC有直接生成CUE文件的选项,简单方便。

原文链接:http://bbs.hifi168.com/showtopic-151755-8.aspx

從友站看到EAC也可整cue給Cplay 及wavelab用,但只限wave,

不過整出來的cue用在cplay上沒有歌名,我自己用記事簿開出來另加,有點麻煩,

但不用copy多一個audio file

不同音樂檔的單曲WAV樂曲,可以經EAC再做一個CUE,cPlay 便可以實現連續自動播放。設定如下:

打開 EAC, 點左下角 CUE WRI 快速鍵打開CD Layout Editor;

Layout >> Append Files As New Track >>點WAV 音樂檔 >> 開啟 >>撰曲 >> 開啟。可以撰多首不同的樂曲。 第二步:點 File >> Save CUE Sheet 完成。

另外EAC的cue在wavelab上分成單曲,click(示波圖?)是可以重播某一首, 或選從那一首(甚至某一段)開始播放的.但不知跟1212的Lite版有沒有這個功能..(我是用5.01,6.0未試過)

1212的lite版, 好像是沒有cue輸入的功能, 所以沒有playlist...

小的最近認識一個ram management program, 她的名字是cMP..

她會製造一個environemnt來給播放program, 除了已load的program(即cMP startup前已load的program), 但是當cMP started up後, 電腦已不可作其他用途, 否則容易hang機, 因電腦大部份resource已交給播放音樂的program, 當然若電腦started up後, 甚麼都沒有做, 來開動cMP出來的environment, 則效果是最好的, 但大家要知道, 聽音樂不需要的功能, 還是不要啟動, 因會對播放作出負面影響, 包括anti virus, 基本上, cMP的最佳效果的要求, 是大家有一部專用來聽音樂的電腦, 不作其他用途, 或是聽音樂時, 電腦可以不作其他用途...

cMP下載:

http://sourceforge.net/project/showfiles.php?group_id=111495

這兒討論的中段有較詳細的教學, 附有圖片

/cgi/vt.mpl?f=pcaudio&m=41469

若大家沒有興趣看...

那小的節錄一些給大家..

以下是cMP的setting

Folders是指cue image的存放位置, cMP本身是以Cplay作設計的, 當然大家也可以用其他program播放, 以下是一般的setting建議

篇二:Alpha测试例子(完整代码)

Alpha测试例子(完整代码)

#define WindowWidth400

#define WindowHeight 400

#define WindowTitle "OpenGL纹理测试"

#define BMP_Header_Length 54

#include <gl/glut.h>

#include <stdio.h>

#include <stdlib.h>

/* 函数power_of_two

* 检查一个整数是否为2的整数次方,如果是,返回1,否则返回0

* 实际上只要查看其二进制位中有多少个,如果正好有1个,返回1,否则返回0 * 在“查看其二进制位中有多少个”时使用了一个小技巧

* 使用n &= (n-1)可以使得n中的减少一个(具体原理大家可以自己思考)

*/

GLuint texGround;

GLuint texWall;

int power_of_two(int n)

{

if( n <= 0 )

return 0;

return (n & (n-1)) == 0;

}

/* 函数load_texture

* 读取一个BMP文件作为纹理

* 如果失败,返回0,如果成功,返回纹理编号

*/

GLuint load_texture(const char* file_name)

{

GLint width, height, total_bytes;

GLubyte* pixels = 0;

GLint last_texture_ID;

GLuint texture_ID = 0;

// 打开文件,如果失败,返回

FILE* pFile = fopen(file_name, "rb");

if( pFile == 0 )

return 0;

// 读取文件中图象的宽度和高度

fseek(pFile, 0x0012, SEEK_SET);

fread(&width, 4, 1, pFile);

fread(&height, 4, 1, pFile);

fseek(pFile, BMP_Header_Length, SEEK_SET);

// 计算每行像素所占字节数,并(本文来自:WWW.xiaocaoFanwEn.cOM 小草范文网:cmp播放器,范例)根据此数据计算总像素字节数

{

GLint line_bytes = width * 3;

while( line_bytes % 4 != 0 )

++line_bytes;

total_bytes = line_bytes * height;

}

// 根据总像素字节数分配内存

pixels = (GLubyte*)malloc(total_bytes);

if( pixels == 0 )

{

fclose(pFile);

return 0;

}

// 读取像素数据

if( fread(pixels, total_bytes, 1, pFile) <= 0 )

{

free(pixels);

fclose(pFile);

return 0;

}

// 在旧版本的OpenGL中

// 如果图象的宽度和高度不是的整数次方,则需要进行缩放

// 这里并没有检查OpenGL版本,出于对版本兼容性的考虑,按旧版本处理// 另外,无论是旧版本还是新版本,

// 当图象的宽度和高度超过当前OpenGL实现所支持的最大值时,也要进行缩放{

GLint max;

glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max);

if( !power_of_two(width)

|| !power_of_two(height)

|| width > max

|| height > max )

{

const GLint new_width = 256;

const GLint new_height = 256; // 规定缩放后新的大小为边长的正方形 GLint new_line_bytes, new_total_bytes;

GLubyte* new_pixels = 0;

// 计算每行需要的字节数和总字节数

new_line_bytes = new_width * 3;

while( new_line_bytes % 4 != 0 )

++new_line_bytes;

new_total_bytes = new_line_bytes * new_height;

// 分配内存

new_pixels = (GLubyte*)malloc(new_total_bytes);

if( new_pixels == 0 )

{

free(pixels);

fclose(pFile);

return 0;

}

// 进行像素缩放

gluScaleImage(GL_RGB,

width, height, GL_UNSIGNED_BYTE, pixels,

new_width, new_height, GL_UNSIGNED_BYTE, new_pixels);

// 释放原来的像素数据,把pixels指向新的像素数据,并重新设置width和height

free(pixels);

pixels = new_pixels;

width = new_width;

height = new_height;

}

}

// 分配一个新的纹理编号

glGenTextures(1, &texture_ID);

if( texture_ID == 0 )

{

free(pixels);

fclose(pFile);

return 0;

}

// 绑定新的纹理,载入纹理并设置纹理参数

// 在绑定前,先获得原来绑定的纹理编号,以便在最后进行恢复

glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture_ID);

glBindTexture(GL_TEXTURE_2D, texture_ID);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0,

GL_BGR_EXT, GL_UNSIGNED_BYTE, pixels);

glBindTexture(GL_TEXTURE_2D, last_texture_ID);

// 之前为pixels分配的内存可在使用glTexImage2D以后释放

// 因为此时像素数据已经被OpenGL另行保存了一份(可能被保存到专门的图形硬件中)

free(pixels);

return texture_ID;

}

void texture_colorkey(GLubyte r, GLubyte g, GLubyte b, GLubyte absolute)

{

GLint width, height;

GLubyte* pixels = 0;

// 获得纹理的大小信息

glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width); glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height); // 分配空间并获得纹理像素

pixels = (GLubyte*)malloc(width*height*4);

if( pixels == 0 )

return;

glGetTexImage(GL_TEXTURE_2D, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, pixels); // 修改像素中的Alpha值

// 其中pixels[i*4], pixels[i*4+1], pixels[i*4+2], pixels[i*4+3]

//分别表示第i个像素的蓝、绿、红、Alpha四种分量,0表示最小,255表示最大 {

GLint i;

GLint count = width * height;

for(i=0; i<count; ++i)

{

if( abs(pixels[i*4] - b) <= absolute

&& abs(pixels[i*4+1] - g) <= absolute

&& abs(pixels[i*4+2] - r) <= absolute )

pixels[i*4+3] = 0;

else

pixels[i*4+3] = 255;

}

}

// 将修改后的像素重新设置到纹理中,释放内存

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0,

GL_BGRA_EXT, GL_UNSIGNED_BYTE, pixels);

free(pixels);

}

void display(void)

{

static int initialized= 0;

static GLuint texWindow = 0;

static GLuint texPicture = 0;

// 执行初始化操作,包括:读取相片,读取相框,将相框由BGR颜色转换为BGRA,启用二维纹理

if( !initialized )

{

texPicture = load_texture("pic.bmp");

texWindow = load_texture("window.bmp");

glBindTexture(GL_TEXTURE_2D, texWindow);

texture_colorkey(255, 255, 255, 10);

glEnable(GL_TEXTURE_2D);

initialized = 1;

}

// 清除屏幕

glClear(GL_COLOR_BUFFER_BIT);

// 绘制相片,此时不需要进行Alpha测试,所有的像素都进行绘制 glBindTexture(GL_TEXTURE_2D, texPicture);

glDisable(GL_ALPHA_TEST);

glBegin(GL_QUADS);

glTexCoord2f(0, 0); glVertex2f(-1.0f, -1.0f);

glTexCoord2f(0, 1); glVertex2f(-1.0f, 1.0f);

glTexCoord2f(1, 1); glVertex2f( 1.0f, 1.0f);

glTexCoord2f(1, 0); glVertex2f( 1.0f, -1.0f);

glEnd();

// 绘制相框,此时进行Alpha测试,只绘制不透明部分的像素 glBindTexture(GL_TEXTURE_2D, texWindow);

glEnable(GL_ALPHA_TEST);

glAlphaFunc(GL_GREATER, 0.5f);

glBegin(GL_QUADS);

glTexCoord2f(0, 0); glVertex2f(-1.0f, -1.0f);

glTexCoord2f(0, 1); glVertex2f(-1.0f, 1.0f);

glTexCoord2f(1, 1); glVertex2f( 1.0f, 1.0f);

glTexCoord2f(1, 0); glVertex2f( 1.0f, -1.0f);

glEnd();

// 交换缓冲

glutSwapBuffers();

}

int main(int argc, char* argv[])

{

// GLUT初始化

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);

glutInitWindowPosition(100, 100);

glutInitWindowSize(WindowWidth, WindowHeight);

glutCreateWindow(WindowTitle);

glutDisplayFunc(&display);

// 开始显示

glutMainLoop();

return 0;

}

篇三:AE开发实例代码总结

1、AE开发技术文档

一、数据加载问题

1、加载个人数据库

个人数据库是保存在Access中的数据库。加载方式有两种:通过名字和通过属性加载(也许不只是这两种,AE中实现同一功能可以有多种方式)

A、通过设置属性加载个人数据库

首先通过IPropertySet接口 定义要连接数据库的一些相关属性,在个人数据库中为数据库的路径,例如:

IPropertySet Propset= new PropertySetClass();

Propset.SetProperty(“DATABASE”,@”D:\test\Ao\data\sh\Mapdata.mdb”); 当定义完属性并设置属性后就可以进行打开数据库的操作了,在ArcEngine开发中存在IWorkspaceFactory 、IFeatureWorkspace 、IFeatureClass 、IFeatureLayer等几个常用的用于打开和操作数据空间地物的接口。IWorkspaceFactory 是一个用于创建和打开工作空间的接口,它是一个抽象的接口,我们在具体应用时要用对应的工作空间实例化它,如下:

IWorkspaceFactory Fact = new AccessWorkspaceFactoryClass ();如果我们打开的是SDE 数据库就要用 SdeWorkspaceFactoryClass 实例化Fact。当我们完成了工作空间的实例化后就可以根据上边设置的属性打开对应的Access 数据库了。打开方式如下:

IFeatureWorkspace Workspace = Fact.Open( Propset,0) as IFeatureWorkspace;

打开Access 工作空间后接下来的事情是做什么了,很简单,找到对应的地物类,赋给相应的层,通过MapControl 控件添加对应的层,然后刷新地图。以下为添加某一层的代码:

IFeatureClass Fcls = Workspace.OpenFeatureClass("District");//找到对应的地物类 IFeatureLayer Fly = new FeatureLayerClass();//建立新图层

Fly.FeatureClass = Fcls;//将地物赋给相应的层

MapCtr.Map.AddLayer (Fly);//添加层

MapCtr.ActiveView.Refresh();//刷新地图

其中District 为地物类的名字,MapCtr 为AE中MapControl 的对象。上边的通过属性设置加载数据空间的方式还可以用于SDE 数据库,在SDE 数据库加载时会介绍。

以下为通过设置属性加载Access 数据库的完整C#代码:

public void AddAccessDBByPro()

{

IPropertySetPropset = new PropertySetClass();

Propset.SetProperty("DATABASE",@"D:\test\Ao\data\sh\MapData.mdb" );

IWorkspaceFactory Fact = new AccessWorkspaceFactoryClass ();

IFeatureWorkspace Workspace = Fact.Open(Propset,0) as IFeatureWorkspace;

IFeatureClass Fcls = Workspace.OpenFeatureClass ("District");

IFeatureLayer Fly = new FeatureLayerClass();

Fly.FeatureClass = Fcls;

MapCtr.Map.AddLayer(Fly);

MapCtr.ActiveView.Refresh();

}

B、通过数据库名字加载个人数据库

publicvoid AddAccessDBByName()

{

IworkspaceName pWorkspaceName = new WorkspaceNameClass(); pWorkspaceName.WorkspaceFactoryProgID=

“esriDataSourcesGDB.AccessWorkspaceFactory”;

pWorkspaceName.PathName =@“D:\test\Ao\data\sh\MapData.mdb”;

IName n=pWorkspaceName as IName;

IFeatureWorkspaceWorkspace= n.Open() as IFeatureWorkspace;

IFeatureClass Fcls = Workspace.OpenFeatureClass ("District");

IFeatureLayer Fly = new FeatureLayerClass();

Fly.FeatureClass = Fcls;

MapCtr.Map.AddLayer(Fly);

MapCtr.ActiveView.Refresh();

}

首先创建一个个人数据库工作空间名,再指定工作空间名的ProgID,以确定打开的是什么类型的工作空间,例如在打开Access个人数据库时,使用下面代码;

IworkspaceName pWorkspaceName = new WorkspaceNameClass(); pWorkspaceName.WorkspaceFactoryProgID=

“esriDataSourcesGDB.AccessWorkspaceFactory”;

pWorkspaceName.PathName =@“D:\test\Ao\data\sh\MapData.mdb”;

属性WorkspaceFactoryProgID可以确保工作空间是AccessWorkspaceFactory,即个人数据库,同时要指定打开数据库路径。为了打开数据库,打开工作空间必须使用IName接口(思考有没有其他办法),,所以接着定义IName、对象,并把工作空间名转换成IName类型,并赋值给IName对象,然后通过IName对象的open方法打开相应的工作空间,代码如下:

IName n=pWorkspaceName as IName;

IFeatureWorkspaceWorkspace= n.Open() as IFeatureWorkspace;

2、AE开发编辑功能

数据编辑问题

1. 需要了解的概念 长事务 短事务 编辑空间

2、最基本的添加点线面功能

添加点(方法有多种,基本思路一样,只是少量的接口有变化) 通过FeatureClass的CreatFeature函数来添加地物。

public voidAddPointByStore()

{

//得到要添加地物的图层

IFeatureLayer l=MapCtr.Map.get_Layer(0) as IFeatureLayer;

//定义一个地物类,把要编辑的图层转化为定义的地物类

IFeatureClassfc= l.FeatureClass;

//先定义一个编辑的工作空间,然后把它转化为数据集,最后转化为编辑工作空间,

IWorkspaceEditw=(fc as IDataset).Workspace as IWorkspaceEdit; IFeature f;

IPoint p;

//开始事务操作

w.StartEditing(false);//////????????????????????????

//开始编辑

w.StartEditOperation();

for(int i=0;i<100;i++)

{

//创建一个地物

f=fc.CreateFeature();

p=new PointClass();

//设置点的坐标

p.PutCoord(i,i);

//确定图形类型

f.Shape=p;

//保存地物

f.Store()

}

//结束编辑

w.StopEditOperation();

//结束事务操作

w.StopEditing(true);

}

二、添加线

方法跟添加点一样,不同的只是地物类型不一样而已,

本文已影响