Странная ошибка, возвращаемая из mciSendString - Может кто-нибудь помочь?

Несколько месяцев назад я добавил аудиозапись в приложение MFC, над которым я работаю. Это оказалось достаточно просто, и через час или два код работал на моем ПК и на нескольких клиентских тестовых машинах (одна с XP, другая с Vista). Однако недавно одна из их тестовых машин была обновлена, и теперь функция записи отказывается работать.

Основной код для начала записи:

mcierr=mciSendString("open new type waveaudio alias mysound",tmpstr,80,NULL);
mcierr=mciSendString("set mysound time format ms bitspersample 8 samplespersec 11025",tmpstr,80,NULL);
mcierr=mciSendString("record mysound",tmpstr,80,NULL);

который, кажется, работает нормально. Чтобы остановить запись, выполняется следующий код.

mcierr=mciSendString("stop mysound",tmpstr,80,NULL);
mcierr=mciSendString("save mysound C:\\filename.wav",tmpstr,80,NULL);   
mcierr=mciSendString("close mysound",tmpstr,80,NULL);

Следующая ошибка возникает при отправке инструкции "save mysound C:\filename.wav". Ошибка возвращается..

MCI Error A parameter or value was specified twice.  Only specify it once.

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

Спасибо за ваше время

Ян

2 ответа

ОК, мне удалось найти решение этой проблемы. Эта строка в коде..

mcierr=mciSendString("save mysound C:\\filename.wav",tmpstr,80,NULL); 

отлично работает на моем ПК под управлением XP, но вызывает ошибки на некоторых тестовых ПК под управлением XP и на всех из них под управлением Vista. Однако ошибка исчезнет, ​​если само имя файла будет заключено в кавычки, подобные этой.

mcierr=mciSendString("save mysound "C:\\filename.wav"",tmpstr,80,NULL);

Теперь код отлично работает на всех компьютерах с XP и Vista, на которых он был протестирован.

Ян

Чтобы это работало, нужно больше деталей. Пожалуйста, смотрите двойной "" до и после имени файла:

mcierr=mciSendString("save mysound ""C:\\filename.wav""",tmpstr,80,NULL);

Это тоже хорошо:

mcierr=mciSendString(@"save mysound ""C:\filename.wav""",tmpstr,80,NULL);

С этими двойными кавычками теперь код работает на моей Windows 7.

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