28/01/2014 MCAFEE SECURE 認證的網站

https://www.mcafeesecure.com/RatingVerify?ref=www.HongKongCupid.com

2013年6月16日 星期日

***用HTML5 >>>**Audio API开发游戏音乐***~

***用HTML5 >>>
**Audio API开发游戏音乐***~

*介绍
        音频在很大程度
上使得多媒体体验非
常引人注目。如果你
曾经尝试在关闭声音
的情况下看电影,
你就很可能已经注意到 了这一点。
        游戏也不例外!我最喜爱的视频游戏
的回忆里包含了音乐和声效。在二十年后
的今天,大多情况下,当玩我最爱的游戏时
,我仍然不能把“塞尔达”里近藤浩二
乐曲马特大气的暗黑配乐从我的头脑里
驱逐掉。这同样适用于音效,例如魔兽里
单位实时点击的响应,以及任天堂的
经典例子。
        游戏的音频提出了一些有趣的挑战。要创建令人着迷的游戏音乐,设计人员需要调节潜在的不可预知的状态。实际上,部分游戏能持续未知的时间长度,声音可以与环境互动,并以复杂的方式混合起来,例如室内效果和相对声音定位。最后,可能有大量的一次播放声效,这需要不错的混合效果和在渲染时没有性能损失。

网页上的游戏音频

        简单的游戏使用<audio>标签可能就足
够了。然而,许多浏览器提供的简陋实现
导致音频毛刺和高延迟的出现。这可能只
是暂时性的问题,因为厂商们都在努力改
进各自的实现。要了解<audio>标签的支持
情况,我们可以使用areweplayingyet.org
提供的优秀测试工具。
        一旦深入<audio>标签规范,就会清楚了
解到有很多事情根本不能用它实现。这并不
奇怪,因为它主要被设计来支持多媒体播放。
这些限制包括:
  • 无法为声音信号使用滤波器
  • 无法访问原始的PCM(宇捷:即WAV)数据
  • 没有来源和听众位置、方向的概念
  • 没有细粒度的计时

        在下文中,我将深入介绍一些用
WebAudio API编写游戏音频方面的内容。
入门教程里可以了解到此API的简单介绍。

背景音乐

        游戏里往往有循环播放的背景音乐。
例如,一个背景音轨如下:

        如果你的循环音乐很短并且已知,会
相当的烦人。当玩家被困在一个区域或者
关卡上,会同时连续播放相同的背景音乐
,我们可能需要逐渐淡出来防止让玩家厌烦
。另一种策略是,根据游戏中的上下文,
把不同的音效强度通过逐渐的淡入淡出
混合起来。
        如果你的玩家在一个史诗般的BOSS
关卡里,可能需要对几个不同的情绪范围
进行混音,例如从艺术氛围到有心理暗示的
氛围再到激烈的氛围。音乐合成软件通常
允许你通过选择音轨集合来导出几种混音
(它们具有同样长度)。这样音轨之间就
有某种内部一致性,避免出现从一个音轨
切换到另一个时出现不和谐的转换过渡。

然后,利用WebAudio API,你可以使用
某些类例如BufferLoader通过XHR导入所有这
些音效样本(这在介绍网络音频API的文章
中进行了深入介绍)。加载音效需要时间,
所以这些在游戏中使用的音效在每一关开始
时,应该在页面加载时同时载入,或者在播
放器播放时增量加载。
        接下来,你需要为每个节点创建一个源,
并为每个源创建一个增益节点,连接图如下:
完成之后,你可以在一个循环中同时
回放这些音效源,因为它们都具有相同的
长度,WebAudio API将保证它们保持一致。
由于最后的BOSS战时音效风格会变得相近
或更不同,游戏可以使用类似于下面的增量
算法来改变链中各节点对应的增益值:
  1. // Assume gains is an array of AudioGain
  2. Node, normVal is the intensity  
  3. // between 0 and 1.  
  4. var value = normVal * (gains.length - 1);  
  5. // First reset gains on all nodes.  
  6. for (var i = 0; i < gains.length; i++) {  
  7.   gains[i].gain.value = 0;  
  8. }  
  9. // Decide which two nodes we are currently 
  10.  between, and do an equal  
  11. // power crossfade between them.  
  12. var leftNode = Math.floor(value);  
  13. // Normalize the value between 0 and 1.  
  14. var x = value - leftNode;  
  15. var gain1 = Math.cos(x * 0.5*Math.PI);  
  16. var gain2 = Math.cos((1.0 - x) * 0.5*Math.PI);  
  17. // Set the two gains accordingly.  
  18. gains[leftNode].gain.value = gain1;  
  19. // Check to make sure that there's 
  20. a right node.  
  21. if (leftNode < gains.length - 1) {  
  22.   // If there is, adjust its gain.  
  23.   gains[leftNode + 1].gain.value = gain2;  
  24. }  
        在上述方法中,有两个音效源同时播放
,我们使用同等功率的曲线(如介绍所述)
从它们之间淡入淡出。下面的示例使用了这
一策略,演示的背景音乐在魔
兽争霸2的主题上逐渐增强:



缺少的环节:Web Audio的Audio标签

        现在许多游戏开发商为背景音乐使用
<audio>标签,因为它非常适合流媒体内容。
现在你可以通过<audio>标签把内容带入网络
音频的上下文。
        <audio>标签支持流媒体相当有用,
因为它可以让你立即播放背景音乐,而无
须等待下载所有内容。在网络音频API支持
音频流之后,你可以操作或分析它们。
下面的例子为通过<audio>标签播放的音乐
使用了一个低通滤波器:
  1. var audioElement = document.query
  2. Selector('audio');  
  3. var mediaSourceNode = context.create
  4. MediaElementSource(audioElement);  
  5. // Create the filter  
  6. var filter = context.createBiquadFilter();  
  7. // Create the audio graph.  
  8. mediaSourceNode.connect(filter);  
  9. filter.connect(context.destination);  
        关于<audio>标签和网络音频API整合
更多的讨论,可以看看这篇短文

音效

        游戏经常在响应用户输入或者游戏状态
改变时播放声音效果。但是像背景音乐一样
,音效可以很快的让用户厌倦。 为了避免这
种情况,最好有一个音效池放置相似但是不
同的音效。 这可以从轻微变化到急剧变化
间通过固定长度来过渡,像魔兽系列里点击
各单位的时候。
        游戏音效的另外一个关键点是可以同
时有多个。想象一下,你与多个演员拍摄
枪战时。每个机枪每秒触发多次,造成几
十个音效同时播放。从多个源同时播放音效
,还要对音效源精确计时,是网络音频API
真正的亮点。
        下面的例子演示了由多个单独子弹样
本组成的机枪,其创建了多个播放时间
错开的声源。
  1. var time = context.currentTime;  
  2. for (var i = 0; i < rounds; i++) {  
  3.   var source = this.makeSource
  4. (this.buffers[M4A1]);  
  5.   source.noteOn(time + i * interval);  
  6. }  
        下面是这个代码的效果:

如果你觉得声音太响了,我感到抱歉。
我们将在后面的章节讨论测量和动态压缩。
        现在,如果你游戏里所有的机枪都像
这样响起,那将相当无聊。当然,它们会基
于目标的距离和相对位置而有所差异
(稍后讨论),但即使这样做可能还不够。
幸运的是,网络音频API提供了对上面的
示例进行轻松调整的方式,主要有两种:
1.    发射子弹时间上微妙的变化
2.    改变每个音效的播放速率
(同时改变音高),以更好地模拟现实
世界中的随机性。
        这两种方法的效果如下:

        对于这些技术在现实生活中的实际例子
,可以看看台球桌的演示 ,它采用了随机抽
样和变化的播放速率来表现更有趣的球
的碰撞声。

3D定位音效

        游戏往往设定在一个2D或者3D的世界
里。在这样的情况下,立体定位的音频可以
大大增加沉浸感的体验。幸运的是,网络音
频API带来了内置硬件加速的位置音频特性,
可以直接的使用。 顺便说一下,你应该确保
有立体声扬声器(最好是耳机)来运行下面
的例子。 在下面的示例中,你可以通过在画
布上滚动鼠标滚轮来更改声源的角度。

源代码
        上面的例子中,有一个监听者在画
布正中(人的图标),同时鼠标控制声源
(喇叭图标)的位置,这是使用
AudioPannerNode实现这种效果的简单
例子。它的基本思想是通过设置音频信号
源的位置响应鼠标的移动,如下所示:
  1. PositionSample.prototype.changePosition 
  2.  = function(position) {  
  3.   // Position coordinates are in normalized 
  4.  canvas coordinates  
  5.   // with -0.5 < x, y < 0.5  
  6.   if (position) {  
  7.     if (!this.isPlaying) {  
  8.       this.play();  
  9.     }  
  10.     var mul = 2;  
  11.     var x = position.x / this.size.width;  
  12.     var y = -position.y / this.size.height;  
  13.     this.panner.setPosition(x * mul, y * 
  14.  mul, -0.5);  
  15.   } else {  
  16.     this.stop();  
  17.   }  
  18. };  
        关于网络音频空间化处理需要
了解的事情:
  • 监听者默认在原点(0,0,0)。
  • 网络音频位置API没有单位,所以我引
  • 入了一个乘数使得演示的声效更好。
  • 网络音频采用Y-型直角坐标系(和大多
  • 数计算机图形系统相反)。 这就是为什
  • 么我在上面的代码片段进行了y轴的变换。

高级:音锥 

        定位模型非常强大,而且相当先进,
主要基于OpenAL。详细信息请查看上述
规范的第3和第4节。

在有单一的AudioListener连接到网络
音频API的情况下,它可以通过位置和方向
配置空间。每个源可以通过一个Audio
PannerNode(音频声像节点)来使得音频
输入空间化。声像节点有位置和方向,以
及距离和方向性模型。
        距离模型指定的增益取决于和源的接近
程度,而方向模型可以通过指定内外锥来
配置,以决定监听者在内部锥里,在内外
锥之间,或在外部锥之外时增益的大小
(通常为负值)。
  1. var panner = context.createPanner();  
  2. panner.coneOuterGain = 0.5;  
  3. panner.coneOuterAngle = 180;  
  4. panner.coneInnerAngle = 0;  
        虽然我的例子在2D空间,但是这种模
式很容易推广到三维。例如3D声音空间化
的例子可以看看这个位置演示。另外对于
位置来说,网络音频模型也可以选择多普勒
频移的速度。这个例子展示了多普勒效应
的详细信息。
        关于这一主题的更多信息,可以阅读
混合定位音频和WebGL的详细教程 。

室内效果和滤波器

        在现实中,声音被感觉的方式很大程度
上取决于声音所在的房间。相同吱吱作响的
门在地下室与大型的开放式大厅里相比会
发出相当不同的声音。高产值的游戏将会
模仿这些影响,因为为每个环境创建一套
独立的音效是相当昂贵的,并且会产生相
当多的材料和大量的游戏数据。
        严格地说,描述原始声音和现实中所听
到之间不同的音频术语是脉冲响应。这些脉
冲响应可以被精心录制,其实也有网站为了
方便你的使用存放了许多这种预先录制的
脉冲响应文件(作为音频方式存储)。
        对于如何从一个给定的环境创建脉冲
响应的更多信息,可以通读网络音频API规
范卷积部分的“录音设置”一节。
        更重要的是针对我们的目标,网络音频
API提供了一个简单的方法来在我们的声音
里应用脉冲响应,
即通过使用ConvolverNode的方式。
  1. // Make a source node for the sample.  
  2. var source = context.createBufferSource();  
  3. source.buffer = this.buffer;  
  4. // Make a convolver node for the impulse 
  5.  response.  
  6. var convolver = context.createConvolver();  
  7. convolver.buffer = this.impulse
  8. ResponseBuffer;  
  9. // Connect the graph.  
  10. source.connect(convolver);  
  11. convolver.connect(context.destination);  
        下面的示例展示了一些不同脉冲响应
下的军事演讲:




        还可以看看网络音频API规范页面上的
房间效果演示,以及这个让你控制通过一
个伟大的爵士标准混合干(原料)和湿
(通过卷积处理)的例子。

最后的倒计时

        现在你已经创建了一个游戏,添加了
位置音频,而且现在在你的图里有大量的
同时播放的AudioNodes。 太棒了,但是还有
一件事要考虑:
        由于多种声音互相叠加起来播放,你
可能会发现在某种情况下,声音超过了扬声
器的最大承受能力。就像图像超出了画布
边界的情况一样,声音也会在波形超过最
大阈值时进行削波,导致明显的失真。波形
看起来会像下面这样:
        这里有一个真实削波的例子。波形
看起来相当糟糕:
        听起来也很糟糕:

        听到像上面这样严重扭曲的音乐是很
严重的事,或者与此相反,过分的混合会
迫使听众调大音量。如果你现在有这种
情况,你真的需要立即解决它!

检测削波

        从技术角度看,削波发生在任何一个
通道的信号值超出有效范围即-1和1之间时
。一旦检测到削波反生时,视觉反馈会非常
有用。要可靠的实现这点,可以把
JavaScriptAudioNode放到你的图里。
音频图将会按如下进行设置:
  1. // Assume entire sound output is being 
  2. piped through the mix node.  
  3. var meter = context.createJavaScript
  4. Node(2048, 1, 1);  
  5. meter.onaudioprocess = processAudio;  
  6. mix.connect(meter);  
  7. meter.connect(context.destination);  
        同时通过下面的processAudio方法可以 
检测到削波:
  1. function processAudio(e) {  
  2.   var buffer = e.inputBuffer.getChannelData(0);  
  3.    
  4.   var isClipping = false;  
  5.   // Iterate through buffer to check if any 
  6.  of the |values| exceeds 1.  
  7.   for (var i = 0; i < buffer.length; i++) {  
  8.     var absValue = Math.abs(buffer[i]);  
  9.     if (absValue >= 1) {  
  10.       isClipping = true;  
  11.       break;  
  12.     }  
  13.   }  
  14. }  
        在通常情况下要小心,因为性能方面
的原因,不要过度的使用  
JavaScriptAudioNode。 在这种情况下,
一种替代的方法是为getByteFrequencyData在音
频图里加入RealtimeAnalyserNode,在渲染时通过requestAnimationFrame来检测。这个方法更有效
,但会错过多数信号(包括有可能削波的地方)
,因为渲染最多发生60次,而音频信号的变化
更为迅速。
        因为削波的检测非常重要,未来我们很
可能将看到网络音频API节点内置MeterNode

防止削波

        通过调整主要AudioGainNode的增益,你
可以控制混音的水平来防止削波。 然而在实
践中,因为你游戏中所播放的声音可能取
决于大量因素,所以决定主增益值来防止
所有情况下的削波是相当困难的。在通常
情况下,你应该调整增益来预期最坏的
情况,但这是一门艺术,而不是科学。
        要知道这是具体如何实现的,下面是一
个示例,在此你可以调整主增益。如果增益
设置过高,会导致声音削波。监视器会变成
红色来给出削波的视觉反馈。下面的音响生
态环境是Disco Dan的混音作品,原曲
是由Yasunori Mitsuda所做的伟大的
“超时空之轮”。
  
新增說明文字






加一点糖

        音乐和游戏制作中经常使用效果器来平
滑信号和控制尖峰。此功能在网络音频
世界里可以通过DynamicsCompressorNode 来
实现,可以在你的音频图加入一个更响亮,
更丰富,更饱满的音色,这也有利于削波。
直接引用规范里的话,这个节点
“...降低了信号最响亮部分的体积,并提升
了最柔软部分的音量... 尤其重要的是在游戏
和音乐应用里,当大量独立的声音播放时,
控制信号整体水平,并有助于避免削波。”
        使用动态压缩通常来说是一个好主意,
尤其是在游戏的设置里,正如前面所讨论的
一样,你并不知道到底此时什么声音将会
何时播放。DinahMoe实验室的Plink是很好
的例子,因为声音的回放完全取决于你和
其他参与者。效果器在大多数情况下是有
用的,除了一些罕见的情况外,而这种情况
下你可以使用已经精心调整过,并且听起来
“恰到好处”的曲目。
        它的实现是一件简单的事情,只需要在
你的音频图里把DynamicsCompressorNode作
为目标前的最
后一个节点添加进去。
  1. // Assume the output is all going through 
  2. the mix node.  
  3. var compressor = context.createDynamics
  4. Compressor();  
  5. mix.connect(compressor);  
  6. compressor.connect(context.destination);  
        关于动态压缩的更多细节,Wikipedia上
的这篇文章非常翔实。
        总结一下,仔细检查削波,通过插入
主增益节点来防止它的出现。然后使用动态
效果器节点来收紧整个混音。你的音频图
可能看起来像这样:

结论

        以上内容涵盖了我认为使用网络音频
API来开发游戏音乐最重要的方面。有了
这些技术,可以在你的浏览器上构建真正
有吸引力的音频体验。在我结束本文之前,
给你一个提示:如果你的浏览器标签使
page visibility API切换到了后台,一定
要让声音暂停,否则你会为用户提供一个
潜在的令人厌烦的体验。
        对于关于网络音频的其他信息,需要
入门的文章进行更多了解。如果你有问题
,看看它是否已经在网络音频FAQ里得到
解答。最后,如果你有其他问题,
可以在Stack Overflow上的web-audio
标签下提问。
        在本文结束前,让我为你展示网络音
频API现在在实际游戏里的用途:

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

** 威智^【邀请码】& 最新Windows Phone**开发者帐号注册教程~~~!

** 威智^【邀请码】最新Windows Phone**
开发者帐号注册教程~~~!

1).求威盘邀请码  ~
【此帖重新开始编辑更新】*2013-2-25 15:17 编辑
好吧你们赢了,停止更新的帖都往里面戳,新帖反而沉了om/invite=A177GA3C9Jhttp://www.wefiler.com/invite=KGC5ET316Phttp://www.wefiler.com/invite=MQZNPZL5RChttp://www.wefiler.com/invite=8U2675C7V6http://www.wefiler.com/invite=V6W7JN8GSBhttp://www.wefiler.com/invite=PASS5S2PAJhttp://www.wefiler.com/invite=KM47J2RDKDhttp://www.wefiler.com/invite=T3EJMTHGBShttp://www.wefiler.com/invite=1HUCMMTPEFhttp://www.wefiler.com/invite=9KKBTN5KVDhttp://www.wefiler.com/invite=FYFHESP8CRhttp://www.wefiler.com/invite=EYR4UF6MCRhttp://www.wefiler.com/invite=NGRD4VGBJ3http://www.wefiler.com/invite=42G6CWVYYMhttp://www.wefiler.com/invite=VHXJAMSS74http://www.wefiler.com/invite=33BXTXHWT1http://www.wefiler.com/invite=WJLMBMCX49http://www.wefiler.com/invite=FSNRR8GPRShttp://www.wefiler.com/invite=2AR1Z4XGB3http://www.wefiler.com/invite=9Y9DNB5GA8http://www.wefiler.com/invite=FPZ515SRNGhttp://www.wefiler.com/invite=JLUCFNX74Bhttp://www.wefiler.com/invite=SVLQ7P3PMXhttp://www.wefiler.com/invite=WAPJHGT67Khttp://www.wefiler.com/invite=YW9GU23MFFhttp://www.wefiler.com/invite=WQMB9RXPLGhttp://www.wefiler.com/invite=FKHMK2G5WZhttp://www.wefiler.com/invite=28N5Q5FEE1http://www.wefiler.com/invite=ZSNWGDNJT7http://www.wefiler.com/invite=VZAQ5JWDM5http://www.wefiler.com/invite=1K36EUY8FHhttp://www.wefiler.com/invite=W3WXZZUTAThttp://www.wefiler.com/invite=XHHKDB1KMNhttp://www.wefiler.com/invite=QBFBN94MQ5http://www.wefiler.com/invite=1572VS4FVNhttp://www.wefiler.com/invite=1R9X5AZZDYhttp://www.wefiler.com/invite=ZQQPSM4B9Dhttp://www.wefiler.com/invite=T9WAEEF2AMhttp://www.wefiler.com/invite=HE4D4PXGPThttp://www.wefiler.com/invite=ADMCJ7EUMVhttp://www.wefiler.com/invite=XDSG5BQ9T3http://www.wefiler.com/invite=VF35U54NKEhttp://www.wefiler.com/invite=ADE499VU78http://www.wefiler.com/invite=5M3288RAB1http://www.wefiler.com/invite=2ELF9Z9L3Dhttp://www.wefiler.com/invite=TBP15Z2UY8http://www.wefiler.com/invite=A8ENNVG8RLhttp://www.wefiler.com/invite=8FVDZC1W8Ehttp://www.wefiler.com/invite=Y8CHBSHY7Yhttp://www.wefiler.com/invite=VUQMQNBEJ6http://www.wefiler.com/invite=K9QSR2GXWEhttp://www.wefiler.com/invite=JEU3743Z29http://www.wefiler.com/invite=TZMESDF2ENhttp://www.wefiler.com/invite=1LKYMCH29Nhttp://www.wefiler.com/invite=VPH54UKHNMhttp://www.wefiler.com/invite=QSZZ624Y6Mhttp://www.wefiler.com/invite=5LJE7EWR4Ahttp://www.wefiler.com/invite=S34FXSW8TVhttp://www.wefiler.com/invite=KZQU6FWNMBhttp://www.wefiler.com/invite=6UUF8UFLZVhttp://www.wefiler.com/invite=5M3R269BGKhttp://www.wefiler.com/invite=4PC63SC2Y4http://www.wefiler.com/invite=YTHHPGZTRPhttp://www.wefiler.com/invite=Y7YJXYJFPPhttp://www.wefiler.com/invite=NBFTZBNY44http://www.wefiler.com/invite=SEGNWS3F5Hhttp://www.wefiler.com/invite=PUPBS2BK4Nhttp://www.wefiler.com/invite=VRV2JF5PTKhttp://www.wefiler.com/invite=P1BPD2Q88Nhttp://www.wefiler.com/invite=7WP38SWGAEhttp://www.wefiler.com/invite=5SGFW5E2PBhttp://www.wefiler.com/invite=GL6L7XHBLVhttp://www.wefiler.com/invite=2FXYU848QPhttp://www.wefiler.com/invite=3WWB7NNXZVhttp://www.wefiler.com/invite=GSG4DEPEK3http://www.wefiler.com/invite=F8QSQF8N58http://www.wefiler.com/invite=GQNS5RJ9VVhttp://www.wefiler.com/invite=ECZY93Q9D5http://www.wefiler.com/invite=4A9RUVG1XVhttp://www.wefiler.com/invite=F5S1DPT42Rhttp://www.wefiler.com/invite=V32ZHU2AANhttp://www.wefiler.com/invite=58Y124XE4Thttp://www.wefiler.com/invite=UR2NV9749Qhttp://www.wefiler.com/invite=4BTHNZZE56http://www.wefiler.com/invite=DAMT1942ZDhttp://www.wefiler.com/invite=V4R5GUV7JQhttp://www.wefiler.com/invite=V6BBQPSZ9Yhttp://www.wefiler.com/invite=TYHSHTRE78http://www.wefiler.com/invite=NADWA2AYP5http://www.wefiler.com/invite=RF9SXSWHZNhttp://www.wefiler.com/invite=P2AL1NASN1http://www.wefiler.com/invite=6NQ19RB766http://www.wefiler.com/invite=9H9FVX26T7http://www.wefiler.com/invite=XDS5Z7FAP7http://www.wefiler.com/invite=RWK7JEAZY8http://www.wefiler.com/invite=2TEMM8G3VFhttp://www.wefiler.com/invite=9VFTNYLSDZhttp://www.wefiler.com/invite=QFHYW7841Lhttp://www.wefiler.com/invite=FCFB33C1LXhttp://www.wefiler.com/invite=7S7365WVQLhttp://www.wefiler.com/invite=FPRKDN2M7Chttp://www.wefiler.com/invite=5SM4AL4P27http://www.wefiler.com/invite=4D8VWBA7L9http://www.wefiler.com/invite=CY3VFMRL6Uhttp://www.wefiler.com/invite=GNCS1V4L57http://www.wefiler.com/invite=8PXQSM9DTYhttp://www.wefiler.com/invite=95Z8YV2Z3Khttp://www.wefiler.com/invite=BL1EU32KR3http://www.wefiler.com/invite=J6AVWSSAF5http://www.wefiler.com/invite=9NJ5WL8ECPhttp://www.wefiler.com/invite=VNKZ6EDPFYhttp://www.wefiler.com/invite=DEZ854QSH6http://www.wefiler.com/invite=HU9TE8TUMJhttp://www.wefiler.com/invite=3WMQX56BHNhttp://www.wefiler.com/invite=T62VNUTFHZhttp://www.wefiler.com/invite=X5AMSTTNFUhttp://www.wefiler.com/invite=5BZ1L94AXPhttp://www.wefiler.com/invite=BEM7A7RMTWhttp://www.wefiler.com/invite=TUV7CH4H4Phttp://www.wefiler.com/invite=1988XEZLBWhttp://www.wefiler.com/invite=VSF31W3Y3Yhttp://www.wefiler.com/invite=R9RBFSXLN2http://www.wefiler.com/invite=P6FUAPAPTXhttp://www.wefiler.com/invite=PT488V43HHhttp://www.wefiler.com/invite=TH4DC2H8V5http://www.wefiler.com/invite=MHEJBXY3P2http://www.wefiler.com/invite=55YVYQ9GAChttp://www.wefiler.com/invite=6SR1W1YP9Bhttp://www.wefiler.com/invite=1USNK98YVGhttp://www.wefiler.com/invite=REMTYJV5AJhttp://www.wefiler.com/invite=LYXNU4VZ6Qhttp://www.wefiler.com/invite=M1UCXX9DJXhttp://www.wefiler.com/invite=D83NYL9DRQhttp://www.wefiler.com/invite=YHXKYKHGZQhttp://www.wefiler.com/invite=94S3HQR243http://www.wefiler.com/invite=HZYMEL6ADDhttp://www.wefiler.com/invite=B1MHBEZCM6http://www.wefiler.com/invite=X58DKLT5Z6http://www.wefiler.com/invite=FVJYDK2KDEhttp://www.wefiler.com/invite=K1MZ72WUWKhttp://www.wefiler.com/invite=BTJ3S6PG23http://www.wefiler.com/invite=A9VR2EUV8Nhttp://www.wefiler.com/invite=FGH3V8QYVGhttp://www.wefiler.com/invite=18VXTFQSFEhttp://www.wefiler.com/invite=EJ8CSUB3HJhttp://www.wefiler.com/invite=BGNT6UVSKRhttp://www.wefiler.com/invite=SB47655C2Yhttp://www.wefiler.com/invite=92XU17EQYKhttp://www.wefiler.com/invite=P8G2JZJEEMhttp://www.wefiler.com/invite=F4Q6GMBTTShttp://www.wefiler.com/invite=RFJTDX5ESYhttp://www.wefiler.com/invite=781E6DJ9K4http://www.wefiler.com/invite=ZVH8B7DJ24http://www.wefiler.com/invite=JYBJE3D6ZEhttp://www.wefiler.com/invite=8PF9SPBR5Ehttp://www.wefiler.com/invite=JTGR4Z2B74http://www.wefiler.com/invite=2SM4ZGGXXXhttp://www.wefiler.com/invite=YU8DTRVT6Qhttp://www.wefiler.com/invite=6LLZQSGUH4http://www.wefiler.com/invite=EJEXC3ARJChttp://www.wefiler.com/invite=Y5J99A1CR5http://www.wefiler.com/invite=BL94814K81http://www.wefiler.com/invite=QGNHNLK9BRhttp://www.wefiler.com/invite=ZA1M347UFFhttp://www.wefiler.com/invite=Y9QNCBTKP7http://www.wefiler.com/invite=A1172351UAhttp://www.wefiler.com/invite=3XSLA736LKhttp://www.wefiler.com/invite=ZNXGV1EMBNhttp://www.wefiler.com/invite=TXBLFPVBPYhttp://www.wefiler.com/invite=4CXJUHK69Uhttp://www.wefiler.com/invite=X42C1MG15Dhttp://www.wefiler.com/invite=G6GBVUGE6Phttp://www.wefiler.com/invite=FZT9CG458Rhttp://www.wefiler.com/invite=81DK3VVAEDhttp://www.wefiler.com/invite=KDGK9YXCPHhttp://www.wefiler.com/invite=ZHJNQ9ZHTVhttp://www.wefiler.com/invite=QC29ENURC7http://www.wefiler.com/invite=UHQA5AWUK8http://www.wefiler.com/invite=G9W3NATJC9http://www.wefiler.com/invite=H4QEGKXQLDhttp://www.wefiler.com/invite=BENECANKJ9http://www.wefiler.com/invite=KL8SRF6CQXhttp://www.wefiler.com/invite=WEJQ79XF9Shttp://www.wefiler.com/invite=V79RBRGNX8http://www.wefiler.com/invite=J89TJDDAWDhttp://www.wefiler.com/invite=GX1CVDLM43http://www.wefiler.com/invite=UAYZN4WAJKhttp://www.wefiler.com/invite=X7LDX1ZKUHhttp://www.wefiler.com/invite=CX4U24H3JVhttp://www.wefiler.com/invite=E258T5DNL2http://www.wefiler.com/invite=PBF4D736M5http://www.wefiler.com/invite=GK6YQ84UWVhttp://www.wefiler.com/invite=6DU3GQ5BZ2http://www.wefiler.com/invite=Q87NKQ6PB7http://www.wefiler.com/invite=7JXB5WMRJHhttp://www.wefiler.com/invite=WF5T1ADEVHhttp://www.wefiler.com/invite=HEZ1XZNC18http://www.wefiler.com/invite=33MDAE3AR6http://www.wefiler.com/invite=CEL8CYV5MVhttp://www.wefiler.com/invite=AJW2DKQ9XQhttp://www.wefiler.com/invite=SJXFZCERNFhttp://www.wefiler.com/invite=2STVFXC5NBhttp://www.wefiler.com/invite=9XLR2X62FRhttp://www.wefiler.com/invite=DNGVX4SZG9http://www.wefiler.com/invite=ZJR4ADSRYKhttp://www.wefiler.com/invite=C6FSUXZWYFhttp://www.wefiler.com/invite=YENSAMUZR8http://www.wefiler.com/invite=MFQDZWR787http://www.wefiler.com/invite=6BVJGDPT5Lhttp://www.wefiler.com/invite=K9FH31TXPDhttp://www.wefiler.com/invite=K3BRHHPRSGhttp://www.wefiler.com/invite=AERYMXVC83http://www.wefiler.com/invite=EB1L4PTNXBhttp://www.wefiler.com/invite=3LYHADN4MYhttp://www.wefiler.com/invite=YP1EH6P8K1http://www.wefiler.com/invite=WDJ5X7EACZhttp://www.wefiler.com/invite=6F55KJKEWEhttp://www.wefiler.com/invite=PDAX6U5G72http://www.wefiler.com/invite=S3J1UGT43Zhttp://www.wefiler.com/invite=R5MH2TRVZChttp://www.wefiler.com/invite=935K6JB9DDhttp://www.wefiler.com/invite=D2PB3DZGF6http://www.wefiler.com/invite=Z729FPG6FBhttp://www.wefiler.com/invite=SGWZGRCZ3Zhttp://www.wefiler.com/invite=DVCVHEE4H2http://www.wefiler.com/invite=VRQV9PKUS6http://www.wefiler.com/invite=ACFMMZL525http://www.wefiler.com/invite=X9ZEALBPK6http://www.wefiler.com/invite=KE1U2KRT7Fhttp://www.wefiler.com/invite=FGQ5CGEUABhttp://www.wefiler.com/invite=JWH1T6BDMChttp://www.wefiler.com/invite=9L6J5E6FGChttp://www.wefiler.com/invite=MPTBV8MAKKhttp://www.wefiler.com/invite=NY4HH1QL5Whttp://www.wefiler.com/invite=WRZ9525SDLhttp://www.wefiler.com/invite=9AJZ9KKC44http://www.wefiler.com/invite=C5JXQ9M4JZhttp://www.wefiler.com/invite
按下灰色欄空白位置可看到邀請碼**
er.com/invite=VPH54UKHNMhttp://www.wefiler.com/invite=
QSZZ624Y6Mhttp://ww
w.wefiler.com/invite=5LJE7EWR4Ahttp://www.wefiler.com/
invite=S34FXSW8TVhttp
://www.wefiler.com/invite=KZQU6FWNMBhttp://www.wefiler.
com/invite=6U
UF8UFLZVhttp://www.wefiler.com/invite=5M3R269BGK
http://www.wefiler.com/invite=4PC63SC2Y4
http://www.wefiler.com/invite=YTHHPGZTR
Phttp://www.wefiler.com/invite=Y7YJXYJFPP
http://www.wefiler.com/invite=NBFTZBNY4
4http://www.wefiler.com/invite=SEGNWS3F5H
http://www.wefiler.com/invite=PUPBS2BK4N
http://www.wefiler.com/invite=VRV2JF5PTK
http://www.wefiler.com/invite=P1BPD2Q88N
http://www.wefiler.com/invite=7WP38S
WGAEhttp://www.wefiler.com/invite=5SGFW5E2PB
http://www.wefiler.com/invite=GL6L7XHBLV
http://www.wefiler.com/invite=2FXYU848QP
http://www.wefiler.com/invite=3WWB7NNXZV
http://www.wefiler.com/invite=GSG4DEPEK3
http://www.wefiler.com/invite=F8QSQF8N58
http://www.wefiler.com/invite=GQNS5RJ9VV
http://www.wefiler.com/invite=ECZY93Q9D5
http://www.wefiler.com/invite=4A9RUVG1XV
http://www.wefiler.com/invite=F5S1DPT42R
http://www.wefiler.com/invite=V32ZHU2AAN
http://www.wefiler.com/invite=58Y124XE4T

* 【威智出品】最新))
Windows Phone开发者帐号注册教程*
*微软开发者中心由于改版,新基友们都说找不到开发者注册入口。
现在入手WP8的基友也越来越多,在此特地从新更新Windows Phone开发

者帐号注册。用于SDK开发者解锁设备,现在开发者帐号解锁的设备,
能部署几个应用望基友们反馈呀。

1,登陆Windows Phone开发者中心
http://dev.windowsphone.com/zh-cn/ 

  右上角,登陆一个中国区的ID

00.png    


2,点击仪表板为ID的开发者中心资料,点击下面的立即加入  
(本网页的内容,请详细阅读哦!)

01.png     



3,跳转到开发者注册页面,英文ABC哦,英语不好的基友不要惊慌,
这里告诉大家一个小技巧:看网址链接,将en-us改为zh-cn就是中文
网页啦,这个方法对微软任何网页都有效,直接更换语言不用在那
么麻烦去选区域。

02.png   



4,更改为中文后的界面,是不是明白多了。 哈哈,选择所在
区域-中国;账户类型选择-个人或学生;勾上同意法律协议,
如果是开发者请仔细阅读微软的开发者协议条款呢!!

03.png   



5,请仔细填写你的账户信息,发行商信息请检测可用之后再确定!

04.png    



6,付款选项选择-我是学生

06.png    



7,提示未关联DreamSpark账户,点超链接跳转到DreamSpark
账户验证,也就是edu邮箱验证。 中文超链接很小,
本蛋第一眼也没看到  看图!!

07.png   


8,重点到了!!!又是蛋疼的edu邮箱注册部分了,
本蛋百度谷歌各种edu邮箱实在是找不到能用的,就花了两块钱
在淘宝淘了一个。 哼哼!   有edu邮箱的基友们 一定要珍惜啊!!!!
在这里填入edu邮箱对应的学校名称,填入时

下面会自动生成学校名,如果没有就是没有
微软没有收入该学校,再换一个

08.png 



9,填入所选学校的edu邮箱

09.png  


10,邮箱若正确,提示向edu邮箱发送
验证邮件

10.png     



11,到edu邮箱接受右键并打开验证链接

11.png  



12,恭喜!验证成功!!!

12.png  



13,验证学生身份注册开发者帐号

13.png  



14,注册成功!

14.png  


15,到此开发者帐号就注册完了,可以返
http://dev.windowsphone.com/zh-cn/ 仪表
盘里查看自己的开发者资料,

提交的应用相关资料

15.png  



账户信息

16.png



手机目录下是注册的设备,就是用开发
者解锁的设备。

17.png 


OK啦*



&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

new*** Nokia Lumia ~WP8系列使用**~NSU更新固件教程*^~*

New** Nokia Lumia ~
WP8系列使用**~
NSU更新固件教程*^~*

*发表于 2013-5-23 22:35:17 *
*1 下载工具Nokia Software 
 Updater for Retail 3.0.4并安装*

*往下看~~*


*NOKIA固件下载器就无法下载固件了,同时NOKIA开始更新
澳版的最新ROM:1232.5962.1314.0004,(请看此帖)今天下午
已经发布最新版本的港版本ROM,如下:
               059Q805 RM-821 VAR APAC HK CV BLACK

                             RM821_059Q805_1232.5962.1314.0004_103
               059Q851 RM-821 VAR HK CV YELLOW
                            RM821_059Q851_1232.5962.1314.0004 

***如果你的手机不是港行,请根据自己手机的Code码自行使用Nokia_Care_Suite_PST_5.0_2013.13.4.4下载ROM,NCS登陆的问题
请看Nokia Care Suite PST 5.0 2013.13.4.4解决需要NOKIA客服账号
登陆问题的方法


2 我们先到C:\ProgramData\Nokia\Packages目录下(vista以下系统到目录

C:\Documents and Settings\ALL Users\Application Data\Nokia\Packages\Products\),
新建文件夹Products\rm-xxx,xxx是你的手机代码,代码一般会印在电池仓SIM卡
卡槽里。本文以Lumia 820 rm-825为例。
QQ截图20130503214935.png   



然后将下载好的ROM解压,将所有文件复制到  C:\ProgramData\Nokia\Packages\Products\rm-825
目录下(vista以下系统到
目录C:\Documents and Settings\ALL Users\Application Data\Nokia\Packages\Products\ 
Products\rm-825)。注意!
将个别文件前的CRC32码删掉!
QQ截图20130512111424.png


ps:NSU不可以跨Code刷ROM!跨Code
请用NCS!!

安装好NSU后,打开,会看到以下界面
QQ截图20130503211950.png  



这时,连接你的手机  QQ截图20130503211500_meitu_1.jpg  


连接手机后,会提示你更新手机,我们点击更新 

QQ截图20130503211529_meitu_2.jpg  



继续QQ截图20130503212139_meitu_3.jpg   


   

QQ截图20130503212419_meitu_5.jpg


QQ截图20130503214728_meitu_7.jpg  


很快就刷好了~Enjoy it~*


                    此ROM为官方完整刷机文件,请使用Nokia_Care_Suite_PST_5.0_2012.51.4.4刷机
工具刷机,刷机将清除手机里所有的资料,请
提前做好备份。

也可以使用Nokia Software Updater for Retail 3.0.4刷机,
刷机教程:Nokia Lumia WP8系列手机使用NSU更新固件教程 

下载地址:
      
059Q805 RM-821 VAR APAC HK CV BLACK 
*解压密码:bbs.wper.com   **
**

*已刷

目测系统自带少了一个香港金融软件 多了两个诺基亚

自家照相软件:大头照 和 动态图
来电未接听时多一项礼貌短信拒接
*


!!*好消息,真的是大好消息。nokia wp8 gdr2终于
要来了,已经开始更新ROM了。还是NOKIA快呀
,已经有ROM了, 版本号为:
wp8 8.0.103XX.7X,配套的驱动也更新了,
时间是2013年5月份的,版本为:wp8_cxe_gdr2.

             具体请看图: 未命名.jpg 


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~``


**发表于 2013-6-11 *[Lumia 822]官方ROM:1532.2108.1244.0003
  1. 机型:Nokia Lumia 822
  2. 工厂代码:RM-845 
  3. 区域:VZW  
  4. OS版本:8.0.9903
  5. 驱动版本:1532.2108.1244.0003
复制代码 

   很多机友在更新到新版本:8.0.10211.204 (驱动版本:1532.5951.1250.1012)后出现打发送短消息
失败的问题,需要恢复此固件,但是NOKIA固件下载器
已经无法使用,而且ncs只能下载最新版本的ROM,所以
现在将此ROM上传,给需要的机友,当升级后出现问题的
时候使用此固件来恢复。

QQ截图20130611122445.jpg 



固件只上传了机器为红色的,其它颜色可以
通过修改CODE来进行刷机的。
059P497        RM-845 VAR VRZ RED

固件下载地址:059P497        RM-845 VAR VRZ RED

  *
*解压密码:
  1. bbs.wper.com
复制代码 *
 

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

*Core Effects Overview***核心的影響概覽***

*Core Effects Overview*

***核心的影響概覽**

*Introduction
The local array
autocompleter. Used
when you’d prefer
to inject an array of
autocompletion options
 into the page, rather than sending out Ajax queries*

*Syntax
new Autocompleter.Local
(id_of_text_field, id_of_div_to_populate,
 array_of_strings, options  *
 
*The constructor takes four parameters.
 The first two are, as usual, the id of the 
monitored textbox, and id of the 
autocompletion menu. The third is an array
 of strings that you want to autocomplete 
from, and the fourth is the options block.  *
 
*Extra local autocompletion options*
*
OptionDefault ValueDescription
choices10How many autocompletion choices to offer
partialSearchtrueIf false, the autocompleter will match entered 
text only at the beginning of strings in the 
autocomplete array. Defaults to true, which will
 match text at the beginning of any word in the 
strings in the autocomplete array. If you want to 
search anywhere in the string, additionally set the
 option fullSearch to true
fullSearchfalseSearch anywhere in autocomplete array strings.
partialChars2How many characters to enter before triggering
 a partial match (unlike minChars, which defines
 how many characters are required to do any
match at all).
ignoreCasetrueWhether to ignore case when autocompleting
It’s possible to pass in a custom function as the ‘selector’ option, if you prefer to write your own autocompletion logic. In that case, the other options above will not apply unless you support them * *Example

HTML

<p>
  <label for="bands_from_the_70s">Your 
favorite rock  band from the 70's:</label> 
  <br />
  <input id="bands_from_the_70s" autocomplete=
"off" size="40" type="text" value="" /></p><div class="autocomplete" id="band_list" style 
="display:none"></div>

**Javascript :

var bandsList = [ 
  'ABBA',
  'AC/DC',
  'Aerosmith',
  'America',
  'Bay City Rollers',
  'Black Sabbath',
  'Boston',
  'David Bowie',
  'Can',
  'The Carpenters',
  'Chicago',
  'The Commodores',
  'Crass',
  'Deep Purple',
  'The Doobie Brothers',
  'Eagles',
  'Fleetwood Mac',
  'Haciendo Punto en Otro Son',
  'Heart',
  'Iggy Pop and the Stooges',
  'Journey',
  'Judas Priest',
  'KC and the Sunshine Band',
  'Kiss',
  'Kraftwerk',
  'Led Zeppelin',
  'Lindisfarne (band)',
  'Lipps, Inc',
  'Lynyrd Skynyrd',
  'Pink Floyd',
  'Queen',
  'Ramones',
  'REO Speedwagon',
  'Rhythm Heritage',
  'Rush',
  'Sex Pistols',
  'Slade',
  'Steely Dan',
  'Stillwater',
  'Styx',
  'Supertramp',
  'Sweet',
  'Three Dog Night',
  'The Village People',
  'Wings (fronted by former Beatle 
Paul McCartney)',
  'Yes'
];

new Autocompleter.Local('bands_from_the_70s',
 'band_list', bandsList, { });                  *
 
***CSS  *Styling the div and the returned ul is 

very important:
Applying a visual cue that an item is selected 

allows the user to take advantage of the keyboard 

 navigation of the dropdown and adding background 

 colors, borders, positioning, etc to the div 

(as the demo does) allows the user interface 

elements to stand out. The CSS from the demo 

applied to the examples would be:
div.autocomplete {
  margin:0px;  
  padding:0px;  
  width:250px;
  background:#fff;
  border:1px solid #888;
  position:absolute;
}div.autocomplete ul {
  margin:0px;
  padding:0px;
  list-style-type:none;
}div.autocomplete ul li.selected { 
  background-color:#ffb;
}div.autocomplete ul li {
  margin:0;
  padding:2px;
  height:32px;
  display:block;
  list-style-type:none;
  cursor:pointer;
}
 
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&