0

winmm.dll を使用してアプリに記録したいのですが、コードは次のとおりです。

mciSendString("open new Type waveaudio Alias recsound", "", 0, 0);
mciSendString("record recsound", "", 0, 0);

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

しかし、wave ファイルのフォーマットは、私が設定したとおりではありません。録画時にビットレートを設定するにはどうすればよいですか?

4

1 に答える 1

1

「record」を呼び出す前に「set」を呼び出す必要があります。

MSDNから:

波形オーディオ データのいくつかのプロパティは、データを格納するファイルの作成時に定義されます。これらのプロパティは、ファイル内でデータがどのように構造化されているかを示しており、記録が開始されると変更できません

補足として; 私の経験では、すべてのパラメーターを一度に設定する必要があります。チャンネルを単独で設定してから、bitspersample を設定することはできません。これはどこにも文書化されていませんが、試行錯誤+グーグルはそう言っています。

これが私がやった方法です:

string command = "set recsound time format ms";
command += " bitspersample " + WaveBitsPerSample;
command += " channels " + WaveChannels;
command += " samplespersec " + WaveSamplesPerSec;
command += " bytespersec " + WaveBytesPerSec;
command += " alignment " + WaveAlignment;
error = mciSendString(command, _mciReturnData, 0, IntPtr.Zero);

bytespersec は、bitspersample、channels、および samplespersec に対して相対的であり、アライメントは、bitspersample および channels に対して相対的です。

bytespersec = bitspersample * channels * samplespersec / 8
alignment = bitspersample * channels / 8
于 2013-06-12T10:19:35.157 に答える