社区
C#
帖子详情
高手看过来:winform里用C#怎么播放音频文件(例如:*.wav)?C#中怎样调用api函数和com组件?
beckham88
2005-10-19 12:45:10
一共三个问题:
1,winform里用C#怎么播放音频文件(例如:*.wav)?
2,C#中怎样调用api函数?
3,C#中怎样调用com组件?
...全文
616
4
打赏
收藏
高手看过来:winform里用C#怎么播放音频文件(例如:*.wav)?C#中怎样调用api函数和com组件?
一共三个问题: 1,winform里用C#怎么播放音频文件(例如:*.wav)? 2,C#中怎样调用api函数? 3,C#中怎样调用com组件?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
saucer
2005-10-19
打赏
举报
回复
1.
http://www.codeguru.com/Csharp/Csharp/cs_graphics/sound/article.php/c6143/
http://blog.monstuff.com/archives/000070.html
2.
Platform Invoke Tutorial
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vcwlkplatforminvoketutorial.asp
http://www.pinvoke.net/
3.
COM Interop Tutorials
http://msdn.microsoft.com/library/en-us/csref/html/vcoriCOMInteropTutorial.asp?frame=true
3
beckham88
2005-10-19
打赏
举报
回复
谢谢两位高手指点,我先试试看!
jetxia
2005-10-19
打赏
举报
回复
1、可以调用MediaPlayer
2、比如
[DllImport("user32.dll", EntryPoint="SetWindowLong")]
public static extern int SetWindowLong (
int hwnd,
int nIndex,
int dwNewLong
);
3、把com组件在工程中添加引用
beckham88
2005-10-19
打赏
举报
回复
saucer,兄弟经常看英文资料?给的答案都是英文的,呵呵!
C#
版编写的俄罗斯方块游戏
C#
版俄罗斯方块 摘要 2008-07-07 09:38 阅读87 评论0 字号: 大大
中
中
小小 C++是游戏编程的首选语言,但我相信C++能做到的C#也能做到。 本篇介绍用C#编写一个俄罗斯方块程序的原理,以及在
C#
里
面
播放
声音,保存游戏设置的方法。 游戏界面预览: 菜单预览: 自定义每个小方块颜色功能界面: 游戏主要有四部分组成:Square类,Block类,gameField类,游戏引擎 Square类: 这个类描述的对象是组成大方块
中
的每个小正方形实体。 类设计: class Square { public Point location; //小方块的坐标 public Size size; //小方块大小 public Color foreColor; //小方块前景色 public Color backColor; //小方块背景色 public Square(Size initSize,Color initForeColor,Color initBackColor) //构造
函数
{ ……} public void Draw(System.IntPtr winHandle) //在指定设备上画方块 { …… } public void Erase(System.IntPtr winHandle)//擦除方块 { …… } } Block类: 这个类描述的对象是某一个大方块的实体。每个大方块由四个小正方形组成,一共有7种组合方式。这个类需要实现一个大方块实体所有的属性和动作。包括:方块的形状,位置,方块左移,右移,下移,旋转等。 类设计: class Block { public Square square1; //组成block的四个小方块 public Square square2; public Square square3; public Square square4; private const int squareSize = GameField.SquareSize; //小方块的边长 public enum BlockTypes { undefined = 0, square = 1, line = 2, J = 3, L = 4, T = 5, Z = 6, S = 7 };//一共有7种形状 public BlockTypes blockType; //方块的形状 //七个小方块的颜色数组 private Color foreColor; private Color backColor; //方块的方向 public enum RotateDirections { North = 1, East = 2, South = 3, West = 4 }; public RotateDirections myRotation = RotateDirections.North; public Block(Point thisLocation,BlockTypes bType) { ……} //含有自定义颜色的重载 public Block(Point thisLocation, BlockTypes bType,Color fc,Color bc) { ……} /*画方块*/ public void Draw(System.IntPtr winHandle) {…… } /*擦方块*/ public void Erase(System.IntPtr winHandle) {…… } /*移动*/ public bool down() {……} public bool left() {……} public bool right() {……} /*旋转block*/ public void Rotate() {……} /*检测是否到顶*/ public int Top() {……} } GameField类: 这个类描述的对象是游戏场景实体,包括场景的背景色,大小,方块是否还可以移动,以及场景
中
填满一行的检测等。 类设计: class GameField { public const int width = 20; //场景的宽,以方块个数为单位 public const int height = 30; public const int SquareSize = 15; //每个四分之一小方块的边长 public static Color BackColor; //场景的背景色 public static System.IntPtr winHandle; //场景的handle public static Color[] BlockForeColor ={ Color.Blue, Color.Beige, Color.DarkKhaki, Color.DarkMagenta, Color.DarkOliveGreen, Color.DarkOrange, Color.DarkRed }; public static Color[] BlockBackColor ={ Color.LightCyan, Color.DarkSeaGreen, Color.Beige, Color.Beige, Color.Beige, Color.Beige, Color.Beige }; public static bool isChanged=false; //设置是否被更改的标志位 public static SoundPlayer sound = new SoundPlayer(); //
播放
声音 public static Square[,] arriveBlock = new Square[width, height]; //保存已经不能再下落了的方块 public static int[] arrBitBlock=new int[height]; //位数组:当某个位置有方块时,该行的该位为1 private const int bitEmpty = 0x0; //0000 0000 0000 0000 0000 private const int bitFull = 0xFFFFF; //1111 1111 1111 1111 1111 /*检测某个位置是否为空*/ public static bool isEmpty(int x, int y) {……} /*将方块停住*/ public static void stopSquare(Square sq, int x, int y) {……} /*检测行是否满 * 返回:成功消除的行数和 (方便统计分数) */ public static int CheckLines() { ……} /*
播放
声音*/ public static void PlaySound(string soundstr) {……} /*重画*/ public static void Redraw() { …… } //结束 } 游戏引擎: 游戏引擎正如其名,就像一个发动机一样让游戏不间断运行。本游戏
中
就是让方块以一定的速度下落。并响应键盘事件,实行左右移动,和向下加速功能。(代码见源码) 声音
播放
: 音效是游戏不可缺少的一部分。在.Net2.0
中
已经提供了一个类来
播放
声音。在using System.Media;命名空间。 本游戏
中
播放
声音的代码如下:(在 GameField类
中
) using System.Media; public static SoundPlayer sound = new SoundPlayer(); /*
播放
声音*/ public static void PlaySound(string soundstr) { switch (soundstr) { case "FinishOneLine": //消除一行的声音 if (!File.Exists("FinishOneLine.
wav
")) return; sound.SoundLocation = "FinishOneLine.
wav
"; break; case "CanNotDo": //当无法操作时 if (!File.Exists("CanNotDo.
wav
")) return; sound.SoundLocation = "CanNotDo.
wav
"; break; } sound.Play(); } 要
播放
的时候
调用
PlaySound()方法即可。 其实步骤很简单,先引用System.Media空间,然后创建一个SoundPlayer 对象,用SoundLocation 属性设置声音文件的地址,然后
调用
Play()方法即可
播放
。不过注意,这个类可以
播放
的声音格式只有
Wav
文件。 保存游戏设置: 在游戏
中
经常要保存用户自定义的设置。本游戏通过写进ini文件来保存。 主要代码如: /*加载窗体时从配置文件Setting.ini
中
读取游戏设置*/ private void getSettings() { if (!File.Exists("Setting.ini")) return; FileStream fs = new FileStream("Setting.ini", FileMode.OpenOrCreate, FileAccess.ReadWrite); StreamReader sr = new StreamReader(fs); string line1=sr.ReadLine(); string line2=sr.ReadLine(); string line3=sr.ReadLine(); if (line1 != null && line1.Split('=').Length > 1) { GameField.BackColor = Color.FromArgb(int.Parse(line1.Split('=')[1])); picBackGround.BackColor = GameField.BackColor; } if (line2 != null && line2.Split('=').Length > 1) GameField.BlockForeColor = strToColor(line2.Split('=')[1]); if (line3 != null && line3.Split('=').Length > 1) GameField.BlockBackColor = strToColor(line3.Split('=')[1]); sr.Close(); fs.Close(); } /*如果游戏设置被更改,将新的设置保存到Setting.ini*/ private void saveSettings() { FileStream fs = new FileStream("Setting.ini", FileMode.Create, FileAccess.ReadWrite); StreamWriter sw = new StreamWriter(fs); sw.WriteLine("GameFieldColor="+GameField.BackColor.ToArgb()); sw.WriteLine("BlockFroeColor=" + colorToStr(GameField.BlockForeColor)); sw.WriteLine("BlockBackColor=" + colorToStr(GameField.BlockBackColor)); sw.Flush(); sw.Close(); fs.Close(); }
c#
使用SoundPlayer
播放
wav
格式音频
SoundPlayer类的缺点:只能
播放
wav
文件;在winxp下
播放
文件比较大或位率比较高的情况,PlaySync同步
播放
会有
播放
不完全的问题。 实现 引用System.Media名称空间下的类SoundPlayer SoundPlayer player = new SoundPlayer(); 方法
调用
Play(); public void Play() { **player.SoundLocation** = @".x0pbk-swz4q.
wav
"; //读取
音频文件
**player.
C#
播放
音频文件
(
播放
提示音)
System.Media名称空间下的类SoundPlayer 可以让我们很方便的
播放
wav
波形声音文件。SoundPlayer类其实就是对winmm.dll文件
中
API
函数
的封装。其
中
Play方法是异步方法,会在另一个线程
中
播放
。如果我们有时候需要等声音
播放
完毕之后再进行下一步操作。即声音
播放
需要阻塞当前线程。
c语言 同时
播放
多个
wav
,用
C#
实现多种方式
播放
Wav
声音
using System;using System.Collections.Generic;using System.
Com
ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Media;using System.Resources;...
C#
播放
声音【六种方法】
C#
中
声音的
播放
主要有六种方法: 1.
播放
系统事件声音 2.使用SoundPlayer 3.使用
API
函数
播放
4.使用axWindowsMediaPlayer的
COM
组件
来
播放
5.Microsoft speech object Library 6.使用directX 1.
播放
系统事件声音 System.Media.SystemSounds.Asterisk.Play(); Syst...
C#
110,583
社区成员
642,560
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章