原文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. MYSQL数据类型 表基本操作 表记录增删改 单表查询

    一.数据类型 常用的数据类型如下: 整数:int,bit 小数:decimal 字符串:varchar,char 日期时间: date, time, datetime 枚举类型(enum) 特别说明的 ...

  2. error MSB3552: Resource file "**/*.resx" cannot be found. [/ConsoleApp1.csproj]

    问题场景: 练习在docker下操作netcore,镜像为centos7,安装完netcore sdk 2.2后,执行操作: dotnet new consoledotnet run 出现报错: /u ...

  3. JSP九大内置对象与Servlet的对应关系

    JSP对象                              Servlet中怎样获得 request service方法中的request参数 response service方法中的res ...

  4. Go语言-windows安装配置篇

    Go-windows安装配置 前言 学习完了python基础,顺便也要提前学习一下go啦,抱着这样的心情,今晚尝试了安装一下go,很顺利的完成了,没有难度. 需要了解更多的关于Go的基本信息可以去维基 ...

  5. MFC调试时可以,使用生产的exe时,显示未响应解决方案

    首先,使用release模式,生成解决方案和exe. 对生成的exe,选择属性,兼容性,win7,应用,即可解决. 此方法对debug无用

  6. python3 80行代码实现贪吃蛇

    上面是实现的截图,废话不说,直接开始说一下代码 pos = { 'UP': (-1,0), 'DOWN':(+1,0), 'LEFT':(0,-1), 'RIGHT':(0,+1), } curren ...

  7. php添加mongo模块

    可以从 http://pecl.php.net/package/mongo 下载目前的stable稳定版 我添加的是mongo-1.5.2.tgz # wget http://pecl.php.net ...

  8. android小游戏模版—重力感应

               好久没更新博客了,今天来谈谈android小游戏---重力感应,一般在游戏里运用的比較多,比方这类游戏有:神庙逃亡.极品飞车,平衡球.三围重力迷宫,重力赛车等. 首先什么是重力感 ...

  9. UVa 1252 - Twenty Questions(状压DP)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  10. Linux终端里的记录器

    我们在调试程序的时候,免不了要去抓一些 log ,然后进行分析. 如果 log 量不是很大的话,那很简单,只需简单的复制粘贴就好. 但是如果做一些压力测试,产生大量 log ,而且系统内存又比较小(比 ...