Не удается создать волновой файл через mciSendString

Я пытаюсь перехватить звонок через Skype и сохранить его на своем компьютере с расширением волны, но каждый раз, когда я пытаюсь mciSendString не удается создать звуковой файл.

Вот мой код

public void Skype_CallStatus(Call call, TCallStatus status)
{
    int result = 0;
     Configuration config = ConfigurationManager.OpenExeConfiguration(System.Windows.Forms.Application.ExecutablePath);
    if (status == TCallStatus.clsInProgress)
    {
        mciSendString("open new Type waveaudio Alias recsound", "", 0, 0);
        mciSendString("record recsound", "", 0, 0);

    }
    //else if (status == TCallStatus.clsFinished)
    else if (status == TCallStatus.clsFinished)
    {
        DateTime currdate = DateTime.Now;
        //string datetime = currdate.Day + currdate.Month + currdate.Year + "_" + currdate.Hour + currdate.Minute + currdate.Second;
        string datetime = string.Format("{0:yyyyMMddhhmmss}.wav", DateTime.Now);

        string wavfilename = "";
        if (config.AppSettings.Settings["VoiceRecordsPath"].Value != null)
        {
            //wavfilename = config.AppSettings.Settings["VoiceRecordsPath"].Value.Replace(",","") + "_" + CSRBusiness.User.Country + "_" + datetime + @".wav";
            wavfilename = CSRBusiness.User.Country + "_" + datetime;
        }
        Directory.SetCurrentDirectory(config.AppSettings.Settings["VoiceRecordsPath"].Value.Replace(",", ""));

        result = mciSendString("save recsound " + wavfilename, "", 0, 0);
        //result = mciSendString("save recsound d://test.wav", "", 0, 0);
        mciSendString("close recsound ", "", 0, 0);
        MessageBox.Show(result.ToString());
    }
   // MessageBox.Show(result.ToString());
}

Путь, где мне нужно сохранить файл:

C:\\Users\\tridip.BBAKOLKATA\\Documents\\Visual Studio 2010\\Projects\\CSRAssistant\\CSRAssistant\\bin\\Debug\\VoiceRecords

Что за ошибка в моем коде?

Но когда я жестко кодирую путь и имя файла в mciSendString лайк result = mciSendString("save recsound d://test.wav", "", 0, 0); затем был создан файл, но звонок по скайпу не был записан, когда я воспроизводил этот волновой файл.

Что не так в моей спецификации пути?

Во-вторых, когда генерировался волновой файл, голос не записывался. Зачем?

2 ответа

Вызов API может завершиться ошибкой, если путь или имя файла в командной строке имеют встроенные пробелы. Поэтому включите путь в двойные кавычки:

result = mciSendString("save recsound \"" + wavfilename + "\"", "", 0, 0);

или, начиная с C# 6.0:

result = mciSendString($"save recsound \"{wavfilename}\"", "", 0, 0);

См. KB191089 PRB: вызовы API мультимедиа могут завершаться ошибкой с длинными именами файлов

Перед вызовом "сохранить запись" необходимо создать папку "VoiceRecords" по нужному пути.

Другие вопросы по тегам