用winmm.dll在c#中记录

本文关键字:记录 winmm dll | 更新日期: 2023-09-27 18:06:41

我想记录在我的应用程序与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文件的格式和我设置的不完全一样。记录时如何设置比特率?

用winmm.dll在c#中记录

您需要在调用"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