C〓〓播音【6つの方法】


C〓〓の中の音の放送は主に6種類の方法があります.1.システムのイベントの音を放送します.  2.SoundPlayer 3を使ってAPI関数を使って放送する4.axWindows MediaPlayerのCOMコンポーネントを使って5.Microsoft speech oject Libraryを再生する
6.directXを使用する
1.システムイベント音を再生 
System.Media.SystemSounds.Asterisk.Play(); 
System.Media.SystemSounds.Beep.Play(); 
System.Media.SystemSounds.Exclamation.Play(); 
System.Media.SystemSounds.Hand.Play(); 
System.Media.SystemSounds.Question.Play();
2.
SoundPlayerを使う
SoundPlayer player = new SoundPlayer();
player.SoundLocation = @"D:\test.wav";
player.Load(); //      
player.Play(); //       
//player.PlayLooping(); //      
//player.PlaySync(); //UI      
3.
API関数を使って再生する
using System.Runtime.InteropServices;

public static class WavPlayer
{
    [DllImport("winmm.dll", SetLastError = true)]
    static extern bool PlaySound(string pszSound, UIntPtr hmod, uint fdwSound);
    [DllImport("winmm.dll", SetLastError = true)]
    static extern long mciSendString(string strCommand, 
        StringBuilder strReturn,int iReturnLength, IntPtr hwndCallback);
    [DllImport("winmm.dll")]
    private static extern long sndPlaySound(string lpszSoundName, long uFlags);

    [Flags]
    public enum SoundFlags
    {
        /// play synchronously (default)
        SND_SYNC = 0x0000,
        /// play asynchronously
        SND_ASYNC = 0x0001,
        /// silence (!default) if sound not found
        SND_NODEFAULT = 0x0002,
        /// pszSound points to a memory file
        SND_MEMORY = 0x0004,
        /// loop the sound until next sndPlaySound
        SND_LOOP = 0x0008,
        /// don’t stop any currently playing sound
        SND_NOSTOP = 0x0010,
        /// Stop Playing Wave
        SND_PURGE = 0x40,
        /// don’t wait if the driver is busy
        SND_NOWAIT = 0x00002000,
        /// name is a registry alias
        SND_ALIAS = 0x00010000,
        /// alias is a predefined id
        SND_ALIAS_ID = 0x00110000,
        /// name is file name
        SND_FILENAME = 0x00020000,
        /// name is resource name or atom
        SND_RESOURCE = 0x00040004
    }

    public static void Play(string strFileName)
    {
        PlaySound(strFileName, UIntPtr.Zero, 
           (uint)(SoundFlags.SND_FILENAME | SoundFlags.SND_SYNC | SoundFlags.SND_NOSTOP));
    }
    public static void mciPlay(string strFileName)
    {
        string playCommand = "open " + strFileName + " type WAVEAudio alias MyWav";
        mciSendString(playCommand, null, 0, IntPtr.Zero);
        mciSendString("play MyWav", null, 0, IntPtr.Zero);

    }
    public static void sndPlay(string strFileName)
    {
        sndPlaySound(strFileName, (long)SoundFlags.SND_SYNC);
    }
}
mciSendStringの詳細なパラメータについて説明します.MSDNを参照してください.http://blog.csdn.net/psongchao/archive/2007/01/19/1487788.aspx
4.axWindows MediaPlayerのCOMコンポーネントを使って再生する
メニューの「ツール」の「カスタムツールボックス(ツールボックスのアイテムを追加/削除)」を選択し、カスタムツールボックスのウィンドウで「COMコンポーネント」の項目を展開し、「WindowMedia Player」オプションを選択します.確定したら「ツールボックス」に「Windows Media Player」という項目が現れます.そしてFormにドラッグしてサイズを調整します.システムは「引用」に自動的にdllの引用を入れました.AxMediaPlayerは私達が使っているNamespaceとclassです.
Windows Media PlayerコントロールをWinformフォームにドラッグし、axWindowsMediaPlayer 1のURL属性をMP 3またはAVIのファイルパスに設定します.
private voidmenuItem1_Click(object sender, System.EventArgs e)
{
OpenFileDialogofDialog = new OpenFileDialog();
ofDialog.AddExtension= true;
ofDialog.CheckFileExists= true;
ofDialog.CheckPathExists= true;
//the nextsentence must be in single line
ofDialog.Filter= "VCD  (*.dat)|*.dat|Audio  (*.avi)|*.avi
  |WAV  (*.wav)|*.wav|MP3  (*.mp3)|*.mp3|     (*.*)|*.*";
ofDialog.DefaultExt= "*.mp3";
if(ofDialog.ShowDialog()== DialogResult.OK)
{
	// 2003       this.axMediaPlayer1.FileName = ofDialog.FileName;
	this.axMediaPlayer1.URL=ofDialog.FileName;//2005  
}
}
5.Microsoft speech object Library
///
///     
public voidPlaySound(string FileName)
{//   COM  :Microsoft speech object Library
           if (!System.IO.File.Exists(FileName))
           {
               return;
           }
           SpeechLib.SpVoiceClass pp = new SpeechLib.SpVoiceClass();
 
           SpeechLib.SpFileStreamClass spFs = new SpeechLib.SpFileStreamClass();
 
           spFs.Open(FileName, SpeechLib.SpeechStreamFileMode.SSFMOpenForRead,true);
           SpeechLib.ISpeechBaseStream Istream = spFs as SpeechLib.ISpeechBaseStream;
           pp.SpeakStream(Istream, SpeechLib.SpeechVoiceSpeakFlags.SVSFIsFilename);
           spFs.Close();
}
6. 
directXを使う
準備作業:1.DirectX SDK(9つのDLLファイルがあります)をインストールしました.ここではMicrosoft.DirectX.dllとMicrosoft.Directx.DirectSound.dll 2.一つのW**ファイルだけを使っています.(このような書類は探しやすいです.QQのカタログにはたくさんありますよ.ここでは多く言いません.)名前はSND.W**といいます.最後の目標プログラムの同じディレクトリの下に置いてプログラムを書き始めました.UltraEditを自由に使えばいいです.1.DirectXを導入するDLLファイルの名前空間:
using Microsoft.DirectX;using Microsoft.DirectX.DirectSound;
2.設備を構築する.私たちが導入したMicrosoft.DirectX.DirectSound空間には、Deviceの種類があります.これはシステム中の音声装置を表しています.
Device dvd=new Device()
3.Cooperate Levelを設定します.windowsはマルチタスクのシステムであり、設備は独占的ではないので、この設備を使用する前にCooperative Levelを設置します.Deviceを呼び出すSet Cooperative Level方法:ここで、最初のパラメータはControlで、二つ目のパラメータはエニュメレーションタイプです.
このプログラムの中で、Controlは勝手にパラメーターを入れました.windowsプログラムであれば、thisで代替できます.第二のパラメータは優先順位です.ここで優先再生を表します. 
DVD.Set Cooperative Level((new UF),Cooperative Level.Priority)
4.バッファエリアを開拓します.上の音の設備に対して、彼は自分のバッファがあります.メインバッファといいます.システムでは、一つのデバイスには唯一のメインバッファがあります.windowsはマルチタスクなので、いくつかのプログラムが同時に一つのデバイスを使って音声を再生することができます.だから、各プログラムは自分で二つのバッファを開いて、自分の声を流します.
システムは、各プログラムの優先度に応じて、それぞれの第二段バッファにコンテンツを読み込み、メインバッファに再生します.ここでは、SND.W***のためのバッファを開発します.
その中で、一番目のパラメータはファイル名を表しています.二つ目は必要な設備です.
Secondary Buffer buf=new SecondaryBuffer(@“snd.wav”、dvd);
5.これからは放送できます.最初のパラメータは優先レベルを表し、0は最低レベルです.2番目のパラメータは再生方式で、ここでは循環再生です.
buf.Play(0,BufferPlayFlags.Looping);
6.コマンドラインプログラムはメッセージループがないので、コードを実行したら終了します.ですから、プログラムを一時停止する必要があります.
Consone.Read()
7.肝心なところはもう終わりました.ここでは先ほどの不幸なnew UF()は何ですか?これは完全にSet Cooperative Levelのパラメータ要求に対応するためです.このようにするとどんな効果があるか分かりません.
class UF:Form{}
8.コードを書き終わりました.ここでコンパイルするのはちょっと複雑です.
csc/r:directX/MicroSoft.DirectX.dll;directX/Microsoft.Directx.DirectSound.dll dxnds.cs
ここで、DLLファイル2つを現在のディレクトリのdirectxディレクトリに置いておきます.(これは私が作ったものです.この2つのファイルの位置を指摘してください.)
ついでに私のカタログの構成を説明します.
𞓜
|--dxsnd.cs
|--snd.wav
|--
𞓜
|--Microsoft.DirectX.dll
|--Microsoft.Directx.dll
以下は完全コードです.
//dxsnd.cs using System;using Microsoft.DirectX;using Microsoft.DirectX.DirectSound;using System.Windows.Forms;namespace test 1{class test{public static void Main(string[]args){Device dd=new Device();DVD.Set Cooperaphive Level(new UF()、CooperabieLevel.Prioty); SecondaryBuffbububububububububudaf=Seffininininininingggggggggl(((((((((((new))))))))))))));Secondadadadadadadadadadadadadadadadadadadadadasbububububububububububububububububububububububu();class UF:Form{}
参考:http://blog.csdn.net/holyrong/article/details/1748500
    http://www.cnblogs.com/net-study/archive/2013/07/10/3181674.html
    http://www.sufeinet.com/thread-459-1-1.html