1

WAV ファイルを再生および録音できる単純な録音再生アプリケーションを実装しています。
要件は次のとおりです。

1) Windows 7、Visual Studio 2010 (または 2012)、C#
2) スペック情報を含む Wav ファイルの録音、再生: samplerate 22050、mono、bitspersample 16
3) 録音中にマイクロ サウンド レベルを表示可能

1) と 2) では、lib (winmm.dll) と mciSendString() を次のように使用できます。

[DllImport("winmm.dll")]  
private static extern long mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);

// Open file to play
public void open(string file)
{
    string command = "open \"" + file + "\" type waveaudio  alias MyWav";
    mciSendString(command, null, 0, 0);
}

// Start playing
public void play()
{
    string command = "play MyWav";
    mciSendString(command, null, 0, 0);
}

// Stop playing
public void stop()
{
    string command = "stop MyWav";
    mciSendString(command, null, 0, 0);

    command = "close MyWav";
    mciSendString(command, null, 0, 0);
}

// Start recording
public void record()
{
   string command = "open new Type waveaudio Alias MyRec";
    mciSendString(command, "", 0, 0);

    command = "set capture time format ms bitspersample 16 channels 1 samplespersec 22050 alignment 4";
    mciSendString(command, "", 0, 0);

    command = "record MyRec";
    mciSendString(command, "", 0, 0);
}

// Stop recording
public void stoprec()
{
    string fileName = @"""D:\Rec1.wav""";

    string command = "stop MyRec";
    mciSendString(command, "", 0, 0);

    command = @"save MyRec " + fileName;

    Debug.WriteLine(command);
    mciSendString(command, "", 0, 0);

    command = "close MyRec";
    mciSendString(command, "", 0, 0);
}

3)では、mciSendStringも使いたいです。次のコマンド (ステータス) を見つけました。

string command = "status MyRec level ";
long mci_ret = mciSendString(command, "", 0, 0);

しかし、上記のコマンドからボリュームを取得する方法がわかりません。誰か教えてもらえますか?

参照: mciSendString() からのステータス コマンドは Microsoft doc にあります: http://msdn.microsoft.com/en-us/library/windows/desktop/dd798683%28v=vs.85%29.aspx
それは言う: レベル: 現在の PCM オーディオ サンプル値を返します。

4

1 に答える 1

0

録音/再生用 (track1) とレベル取得用 (waveLevel) の 2 つのデバイスを開いてレベルを監視します。以下はfoxproにあります。

* OPEN WAVE DEVICE FOR LEVEL READINGS 
= mciSendString("open new type waveaudio alias waveLevel", '0&', 0, 0) 

* START RECORDING
= mciSendString("open new type waveaudio alias track1", '0&', 0, 0)

次に、track1 のレベルを取得するために、waveLevel デバイスを使用します

= mciSendString("status waveLevel level", @cBuff, LEN(cBuff) ,0)
于 2013-05-07T18:01:17.260 に答える