Как узнать позицию при записи wav через mciSendString?

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
romserg
Сообщения: 2
Зарегистрирован: 29 мар 2015, 21:50

29 мар 2015, 21:52

Использую код Delphi:

Код: Выделить всё

var s:array [0..255] of char;
begin
 fn := '12.wav';

 mciSendString(PChar('open new type waveaudio alias AGD'), nil, 0, 0);

 mciSendString('set AGD time format milliseconds format tag pcm ' +
                    'bitspersample 16 channels 1 samplespersec 44100 ' +
                    'alignment 2 bytespersec 88200' , nil, 0, 0);

 mciSendString(PChar('record AGD to 5222'), nil, 0, 0);

 repeat
  mciSendString('status AGD position', @s, sizeof(s), 0);
  OnEvt(s);
  mciSendString('status AGD mode', @s, sizeof(s), 0);
  sleep(20);
 until s = 'stopped';

 mciSendString(PChar('save AGD "' + fn + '"'), nil, 0, 0);
 mciSendString('close AGD', nil, 0, 0);
end;
Но выдаёт в ф-цию OnEvt секунды*1000 (т.е. 1000, 2000, 3000...) вместо миллисекунд, только в конце, после 5000, выдаёт 5222. При этом аналогичный код для воспроизведения нормально выдаёт миллисекунды! Как же узнать миллисекунды при записи и почему так происходит?
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

31 мар 2015, 21:40

Возможно причина в размере встроенного буфера записи, равного 1 секунде
Попробуйте получать размер в других единицах: set AGD time format samples, например
It's a long way to the top if you wanna rock'n'roll
romserg
Сообщения: 2
Зарегистрирован: 29 мар 2015, 21:50

01 апр 2015, 04:42

Пробовал и samples, и bytes, но выдаёт значения, кратные 1 секунде (например, по 44100 в samples).
Ответить