钢琴程序小结

(2011年11月纪念:转眼间时间就这么过去了,现今自己的水平也早已不像当年那般稚嫩,但是这个钢琴程序作为我构思良久、耗费很多心血的作品,依然是我的最爱,恐怕也将是我此生的最爱,因为它真正凝聚了我自己的感情在里面,也融入我自己对一个女孩纯真的爱。是否那些真正爱过的人,都会明白人生中的最爱,永远是懵懂时期才会有的粗糙的感情。——纪念那些逝去的日子)

从去年就要写的钢琴程序终于完成了,虽然网上也有一些,但还是需要收费什么的,而且,本人不屑于用他们的这个东西,网络就要开源!记下用到的东西。写了一个特别版本,花了一点时间修饰了一下,自我感觉效果还不错!免得以后再查,没有兴趣的可以不看了。主要思想就是调图片,调声音文件发出声音就行了。

        完全用了网上的资源,以前教我们C++的老师说如果你能做到从一点不会,自己找到东西完成目标的话,月薪能拿到5k,我的这个东西不算困难,就算我3k好了,哈哈~!

        第一个:http://www.cnblogs.com/yangbeibei/archive/2006/08/30/490270.html

建立第一个directX程序——在C#下利用DirectSound实现声音播放

这是给directX初学者的教程,如果你是大虾,大可不必理会本文。

第1步:下载并安装DirectX 9 SDK

DirectX 9 SDK下载地址:http://msdn.microsoft.com/directx/sdk/ ,目前最新版本是2006年8月,下载包500MB多。

第2步:建立C#应用程序

新建一个C#的windows应用程序,名称这里输mydirectXtest。

解决方案管理器里,右击项目,“添加引用”,选中DirectX和DirectSound,如下图:


在Form1.cs里面添加:

using  Microsoft.DirectX;
using  Microsoft.DirectX.DirectSound;

往Form1上面拉一个Label和一个Button,在Button onclick事件里面写入:

 1 //  建立声音设备
 2 Microsoft.DirectX.DirectSound.Device dev  =
 3      new  Microsoft.DirectX.DirectSound.Device();
 4
 5 dev.SetCooperativeLevel( this ,
 6   Microsoft.DirectX.DirectSound.CooperativeLevel.Normal);
 7
 8 //  为声音建立二级缓冲区
 9 try
10 {
11    Microsoft.DirectX.DirectSound.SecondaryBuffer snd =
12    new Microsoft.DirectX.DirectSound.SecondaryBuffer(
13      "../../NewDrums.wav", dev);
14
15    // 播放声音
16    snd.Play(0, Microsoft.DirectX.DirectSound.BufferPlayFlags.Default);
17}
18 catch  (Exception ex)
19 {
20    label1.Text = ex.ToString();
21}

 

Microsoft.DirectX.DirectSound.Device dev = new Microsoft.DirectX.DirectSound.Device(); ——建立device的类;

dev.SetCooperativeLevel(this, Microsoft.DirectX.DirectSound.CooperativeLevel.Normal); ——设置CooperativeLevel。因为Windows是多任务的系统,设备不是独占的,所以在使用设备前要为这个设备设置CooperativeLevel。调用Device的SetCooperativeLevel方法:其中,第一个参数是一个Control;第二个参数是个枚举类型,用来设置优先级的。

SecondaryBuffer snd =new Microsoft.DirectX.DirectSound.SecondaryBuffer("../../NewDrums.wav", dev); —— 开辟缓冲区。声音设备有个自己的缓冲区,叫主缓冲区。系统中,一个设备有唯一的主缓冲区。由于windows是多任务的,所以可以有几个程序同时利用一个设备播放声音,每个程序都自己开辟一个二级缓冲区,放自己的声音。
 

这里需要注意播放声音的路径,一开始初学者容易把wav声音放到项目里面,在SecondaryBuffer里面直接写“NewDrums.wav”,调试是会显示“应用程序错误”。因为调试的默认文件夹是Debug,需要的声音文件应该放到Debug目录下,用“NewDrums.wav”的格式;或者放在项目下面,用“../../NewDrums.wav”的格式。很傻的错误吧。

这样,调试程序,按button就会播放声音了。全部代码如下:
Form1.cs:

 1 using  System;
 2 using  System.Collections.Generic;
 3 using  System.ComponentModel;
 4 using  System.Data;
 5 using  System.Drawing;
 6 using  System.Text;
 7 using  System.Windows.Forms;
 8
 9 using  Microsoft.DirectX;
10 using  Microsoft.DirectX.DirectSound;
11
12
13 namespace  mydirectXtest
14 {
15    public partial class Form1 : Form
16    {
17        public Form1()
18        {
19            InitializeComponent();
20        }
21
22        private void button1_Click(object sender, EventArgs e)
23        {
24
25            // 建立声音设备
26            Microsoft.DirectX.DirectSound.Device dev =
27                new Microsoft.DirectX.DirectSound.Device();
28
29            dev.SetCooperativeLevel(this,
30              Microsoft.DirectX.DirectSound.CooperativeLevel.Normal);
31
32            // 为声音建立二级缓冲区
33            try
34            {
35                Microsoft.DirectX.DirectSound.SecondaryBuffer snd =
36                new Microsoft.DirectX.DirectSound.SecondaryBuffer(
37                  "../../NewDrums.wav", dev);
38
39                // 播放声音
40                snd.Play(0, Microsoft.DirectX.DirectSound.BufferPlayFlags.Default);
41            }
42            catch (Exception ex)
43            {
44                label1.Text = ex.ToString();
45            }
46
47        }
48    }
49}

   //

//

第二个:http://www.cnblogs.com/chenbg2001/archive/2008/12/22/1360092.html

1.绝对路径:
this.pictureBox2.Image=Image.FromFile("D://001.jpg");

2.相对路径:
Application.StartupPath; 
可以得到程序根目录 
string picPath=Application.StartupPath+"//1.gif";

3.获得网络图片的路径

this.pictureBox2.Image= Image.FromStream(System.Net.WebRequest.Create(http://www.xyhhxx.com/images/logo/logo.gif).GetResponse().GetResponseStream()); 

/

///

第三个:http://zhidao.baidu.com/question/109687978.html?si=5

C#如何将图片存入可执行文件

悬赏分:10 - 解决时间:2009-8-3 15:35
public int imgflag = 0;
        public string str;

        private void timer1_Tick(object sender, EventArgs e)
        {
            imgflag++;
            if (imgflag == 37) imgflag = 1;
            str = Environment.CurrentDirectory + "//test//" + imgflag + ".jpg";
            pictureBox1.Image = Image.FromFile(str);
        }

我用以上的代码实现动态图片。但是本地必须有一个名为TEST的文件夹存放图片才可以调用。否则就报错。但是我不想让别人看到这个文件夹

我该如何将这些图片存入可执行文件中?

并且不影响程序的效果

请帖出操作步骤和代码。。。最好有例子可以看 
问题补充:
pictureBox1.Image = Properties.Resources.资源名字;

这个方法的确可以实现动态图片。。但是图片的显示速度跟原来比。不是慢了就是快了

怎么解决这个问题呢
提问者: hack1026 - 实习生 一级
最佳答案
首先  我想说下 你你直接用Adobe ImageReady 把那些图片做成一个动态的gif图片不久得了 何必这样一张一张的换   虽然灵活性可能高 但是 纯粹的浪费电脑资源! 

如何导入图片:项目  —  (项目名字)属性 — 资源 —添加  就可以了!


///

 

完成.

我就用这些写成这个程序,当然还有我从网上下载的一些图片,声音文件啦什么的,不过最关键的还是这些技术。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值