用COM里面的media player试试看:)

解决方案 »

  1.   

    用DirectX的DirectSound可以实现,SDK中就有例子,很简单
      

  2.   

    用DirectX的DirectSound可以实现,SDK中就有例子,很简单好象运行了 也没有反映!
      

  3.   

    using System;
    using System.Runtime.InteropServices;
    namespace VedioAudioTransfer
    {
    /// <summary>
    /// Wave 的摘要说明。
    /// </summary>
    public class Wave
    {
    public Wave()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
    //读取录音设备
    [DllImport("winmm.dll", EntryPoint="waveInGetNumDevs")]
    public static extern int waveInGetNumDevs (); //打开录音设备函数 
    [DllImport("winmm.dll", EntryPoint="waveInOpen")]
    public static extern int waveInOpen (
    ref int lphWaveIn,
    int uDeviceID,
    ref WAVEFORMAT lpFormat,
    int dwCallback,
    int dwInstance,
    int dwFlags
    ); //为录音设备准备缓存函数
    [DllImport("winmm.dll", EntryPoint="waveInPrepareHeader")]
    public static extern int waveInPrepareHeader (
    int hWaveIn,
    ref WAVEHDR lpWaveInHdr,
    int uSize
    ); //给输入设备增加一个缓存
    [DllImport("winmm.dll", EntryPoint="waveInAddBuffer")]
    public static extern int waveInAddBuffer (
    int hWaveIn,
    ref WAVEHDR lpWaveInHdr,
    int uSize
    );

    //开始录音
    [DllImport("winmm.dll", EntryPoint="waveInStart")]
    public static extern int waveInStart (
    int hWaveIn
    ); //清除缓存 
    [DllImport("winmm.dll", EntryPoint="waveInUnprepareHeader")]
    public static extern int waveInUnprepareHeader (
    int hWaveIn,
    ref WAVEHDR lpWaveInHdr,
    int uSize
    );
    //停止录音
    [DllImport("winmm.dll", EntryPoint="waveInReset")]
    public static extern int waveInReset (
    int hWaveIn
    ); //关闭录音设备
    [DllImport("winmm.dll", EntryPoint="waveInClose")]
    public static extern int waveInClose (
    int hWaveIn
    ); //Wave_audio数据格式
    [StructLayout(LayoutKind.Sequential)]
    public struct WAVEFORMAT 
    {
    public int wFormatTag;
    public int nChannels;
    public int nSamplesPerSec;
    public int nAvgBytesPerSec;
    public int nBlockAlign;
    }
    /// <summary>
    /// waveform-audio 缓存格式
    /// </summary>
    [StructLayout(LayoutKind.Sequential)]
    public struct WAVEHDR 
    {
    /// <summary>
    /// 指向锁定的数据缓冲区的指针 
    /// </summary>
    public string lpData;
    /// <summary>
    /// 数据缓冲区的大小
    /// </summary>
    public int dwBufferLength;
    /// <summary>
    /// 录音时指明缓冲区中的数据量
    /// </summary>
    public int dwBytesRecorded;
    /// <summary>
    /// 用户数据
    /// </summary>
    public int dwUser;
    /// <summary>
    /// 提供缓冲区信息的标志
    /// </summary>
    public int dwFlags;
    /// <summary>
    /// 循环播放的次数
    /// </summary>
    public int dwLoops;
    /// <summary>
    /// 保留
    /// </summary>
    public int lpNext;
    /// <summary>
    /// 保留
    /// </summary>
    public int Reserved;
    } //打开回放设备
    [DllImport("winmm.dll", EntryPoint="waveOutOpen")]
    public static extern int waveOutOpen (
    ref int lphWaveOut,
    int uDeviceID,
    ref WAVEFORMAT lpFormat,
    int dwCallback,
    int dwInstance,
    int dwFlags
    ); //为回放设备准备内存块
    [DllImport("winmm.dll", EntryPoint="waveOutPrepareHeader")]
    public static extern int waveOutPrepareHeader (
    int hWaveOut,
    ref WAVEHDR lpWaveOutHdr,
    int uSize
    ); //写数据(放音)
    [DllImport("winmm.dll", EntryPoint="waveOutWrite")]
    public static extern int waveOutWrite (
    int hWaveOut,
    ref WAVEHDR lpWaveOutHdr,
    int uSize
    ); //打开设备时消息,在此期间我们可以进行一些初始化工作
    public const int MM_WIM_OPEN = 0x3BE;
    //当缓存已满或者停止录音时的消息,处理这个消息可以对缓存进行重新分配,实现不限长度录音
    public const int MM_WIM_DATA = 0x3C0;
    //关闭录音设备时的消息
    public const int MM_WOM_CLOSE = 0x3BC;
    //
    public const int WAVE_FORMAT_PCM = 1 ;
    public const int WAVE_MAPPER = -1;
    }
    }
      

  4.   

    上次已经收藏了
    stdotleo(大雨仔|南京程序员协会招会员中...) 
    不错,
    用DirectX的DirectSound很简单。安装DirectX SDK后里面有很多例子,分C#和C++两个版本,其中有一个录音的例子。
    http://msdn.microsoft.com/library/en-us/directx9_m/directx/sound/capturingwaveforms/capturing_waveforms_entry.asp?frame=true