原文http://blog.csdn.net/lvbian/article/details/18226741

最近在做Android与C#录音并互相通信的小东西。但是卡在C#录音这儿了。找了好久,说的都是DirectX,可是我总是安装不上,这才找到了这个简单的录音方法。当然,如果你想要录得好并且处理音频,那还是用用DirectX吧!原文:http://www.cnblogs.com/zrx401558287/archive/2008/11/28/1343160.html

  1. using System.Runtime.InteropServices;
  2. [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
  3. public static extern int mciSendString(
  4. string lpstrCommand,
  5. string lpstrReturnString,
  6. int uReturnLength,
  7. int hwndCallback
  8. );
  9. private void button1_Click(object sender, EventArgs e)
  10. {
  11. mciSendString("set wave bitpersample 8", "", 0, 0);
  12. mciSendString("set wave samplespersec 20000", "", 0, 0);
  13. mciSendString("set wave channels 2", "", 0, 0);
  14. mciSendString("set wave format tag pcm", "", 0, 0);
  15. mciSendString("open new type WAVEAudio alias movie", "", 0, 0);
  16. mciSendString("record movie", "", 0, 0);
  17. }
  18. private void button2_Click(object sender, EventArgs e)
  19. {
  20. mciSendString("stop movie", "", 0, 0);
  21. mciSendString("save movie 1.wav", "", 0, 0);
  22. mciSendString("close movie", "", 0, 0);
  23. }

button1是开始录音,button2是结束录音。你当然也可以通过逻辑判断来只使用一个button。

录音文件保存到了该项目下bin/Debug目录下了。文件名是1.wav。所以你可以在这里改成你自己的文件名

  1. mciSendString("save movie "+yourfilename, "", 0, 0);

很简单吧?

下面是放音。

放音我使用的是WindowsMediaPlayer这个组件:

我将它设为不可见,自己用按键控制它的播放与暂停。

  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. if(!playing)
  4. {
  5. playing = true;
  6. button1.Text = "停止";
  7. this.axWindowsMediaPlayer1.URL ="your voice file name";
  8. axWindowsMediaPlayer1.Ctlcontrols.play();
  9. }
  10. else
  11. {
  12. axWindowsMediaPlayer1.Ctlcontrols.stop();
  13. playing=false;
  14. button1.Text="播放";
  15. }
  16. }

也就是通过URL属性设置播放的文件。

那如果它自己播放结束了怎么办呢?

当然就需要事件啦!

  1. private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
  2. {
  3. if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsStopped)
  4. {
  5. if (playing)
  6. {
  7. playing = false;
  8. button1.Text = "播放";
  9. }
  10. if (playing_my)
  11. {
  12. playing_my = false;
  13. btn_playmy.Text = "播放我的";
  14. }
  15. }
  16. }

这两个强大的工具让我们完成了简单的开发!

(收藏)mci 录音和播放的更多相关文章

  1. IOS关于录音,播放实现总结

    //音频录制(标准过程5,9更新) 准备:导入AVFoundation框架及头文件 1 设置会话类型,允许播放及录音AVAudioSession *audioSession = [AVAudioSes ...

  2. Android开发教程 录音和播放

    首先要了解andriod开发中andriod多媒体框架包含了什么,它包含了获取和编码多种音频格式的支持,因此你几耍轻松把音频合并到你的应用中,若设备支持,使用MediaRecorder APIs便可以 ...

  3. Android平台下实现录音及播放录音功能的简介

    录音及播放的方法如下: package com.example.audiorecord; import java.io.File; import java.io.IOException; import ...

  4. windows phone 7 通过麦克风录音,并且播放

    原文:windows phone 7 通过麦克风录音,并且播放 //模拟XNA的框架(凡是在wp7中应用xna的都必须先模拟此类) public class XNAAsyncDispatcher : ...

  5. iOS 实时录音和播放

    需求:最近公司需要做一个楼宇对讲的功能:门口机(连接WIFI)拨号对室内机(对应的WIFI)的设备进行呼叫,室内机收到呼叫之后将对收到的数据进行UDP广播的转发,手机(连接对应的WIFI)收到视频流之 ...

  6. Android 实时录音和回放,边录音边播放 (KTV回音效果)

    上一篇介绍了如何使用Mediarecorder来录音,以及播放录音.不过并没有达到我的目的,一边录音一边播放.今天就讲解一下如何一边录音一边播放.使用AndioRecord录音和使用AudioTrac ...

  7. Android 录音和播放

    今天工作上需要做一个一边录音一边播放的功能,大致原因是有一个外部设备输入音频到我们机器,然后我们机器需要马上把音频播放出来.所以了解了一些有关录音和播放的知识.接到这个任务的第一反应就是看看Andro ...

  8. AudioUnit录音和播放同时进行的一些注意点

    录音(播放)和暂停 -(void)start { self.soundTotalLength = 0.0f; if (!self.unitHaveStart) { NSError *error = n ...

  9. [Android] 录音与播放录音实现

    http://blog.csdn.net/cxf7394373/article/details/8313980 android开发文档中有一个关于录音的类MediaRecord,一张图介绍了基本的流程 ...

随机推荐

  1. CSS 小结笔记之盒子模型

    网页标签可以看成是一个个盒子,页面设计就像垒积木一样,在网页中将盒子摆好显示出来.在浏览器中可以很清楚的去看到一个标签的盒子,具体方法如下: 打开浏览器的开发人员工具,在Elements中选中一个标签 ...

  2. 【matlab】 幂法 求解最大特征值

    一. 算法: 1.输入矩阵A,初始向量x误差限ep,最大迭代次数N 2.置 k = 1, m1 = 0; 3.求Xr-> norm(x)   abs(Xr)=max[Xi] 1<=i< ...

  3. Hadoop HBase概念学习系列之HBase表的一些设置(强烈推荐好好领悟)(十三)

    压缩格式:默认压缩格式是NONE.可选值有GZ.LZO.SNAPPY. 版本数:HBase默认定义为3个版本. 以秒为单位的存活时间TTL:使用对象是行中的列簇,一旦达到过期时间,HBase会删除这些 ...

  4. 【教程】【FLEX】#005 拖动

    在Flex中,组件的拖动分为: 1. 加强型(即本身就可以拖动设置是否可以拖动的属 [dragEnabled ,dropEnabled ] 即可) 2. 非加强型(可以通过DragManager,Dr ...

  5. debian 7 终端上无法调出输出法

    debian 7 终端konsole上无法调出输出法,无法输入汉字的问题解决方案, export GTK_IM_MODULE=fcitxexport QT_IM_MODULE=fcitxexport ...

  6. 操作系统的三个接口 shell gui api

    操作系统的三个接口 shell gui api 编程语言是用来告诉操作系统干什么的语言. 编程语言是人机交互语言. 程序.进程:任务集.

  7. Golang channel 用法简介

    channel 是 golang 里相当有趣的一个功能,大部分时候 channel 都是和 goroutine 一起配合使用.本文主要介绍 channel 的一些有趣的用法. 通道(channel), ...

  8. Java实现数据库操作

    Java实现数据库操作 这里的样例是使用mysql数据库 代码实现 /* MySQLHelper.java */ import java.io.*; import java.util.*; impor ...

  9. 关于SpringApplication包无法导入报错问题

    问题描述:一直再报红线,包始终无法导入,参考过好几个博友分享的解决方案,依然没有效果,对了补充一点SprinBoot版本为2.0.3. 问题解决:目前通过更换版本得到解决1.5.6或者1.5.8都可以 ...

  10. jenkins 构建触发器 Poll SCM 和 Build periodically区别

    Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作.我的配置如下: */5 * * * * (每5分钟检查一次源码变化) Bu ...