Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.12.19;
Скачать: [xml.tar.bz2];

Вниз

Сбой звуковой системы !   Найти похожие ветки 

 
YDV   (2003-09-26 13:00) [0]

Добрый день !
Кому-нибудь приходилось сталкиваться с таким:
программка написанная на DELPHI постоянно записывает данные с линейного входа звуковой карты ПК и сохраняет их на диск. Совместно с этой программкой работают и другие не относящиеся к звуковой карте никаким образом, но их достаточно много...
Программка справляется со своими обязанностями, но нередко возникает какой-то сбой: никаких сообщений об ошибках не выводится, но программа просто перестает записывать данные(о чем свидетельствует счетчик событий прихода данных со звуковой карточки)...после такого сбоя программа, записывающая данные может быть опять таки без проблем закрыта, никаких ошибок нет, но повторный запуск ее не к каким положительным результатам не приводит-она просто не работает и нет никаких ошибок ! Не работает после этого нетолько одна моя программа, а и все стандартные, которые работают со звуковой картой !...

вот исходник "звуковой" части:

Запуск записи:
var
header: TWaveFormatEx;
BufLen: word;
buf: pointer;
begin
with header do begin
wFormatTag:=WAVE_FORMAT_PCM;
nChannels:=1;
nSamplesPerSec:=8000;
wBitsPerSample:=8;
nBlockAlign:=nChannels*(wBitsPerSample div 8);
nAvgBytesPerSec:=nSamplesPerSec * nBlockAlign;
cbSize:=0;
end;
WaveInOpen(Addr(WaveIn), WAVE_MAPPER, addr(header),
Form1.Handle, 0, CALLBACK_WINDOW);
BufLen := header.nBlockAlign * BufSize;
hBuf := GlobalAlloc(GMEM_MOVEABLE and GMEM_SHARE, BufLen);
Buf := GlobalLock(hBuf);
with BufHead do begin
lpData := Buf;
dwBufferLength := BufLen;
dwFlags := WHDR_BEGINLOOP;
end;
WaveInPrepareHeader(WaveIn, Addr(BufHead), sizeof(BufHead));
WaveInAddBuffer(WaveIn, addr(BufHead), sizeof(BufHead));
stop := true;
WaveInStart(WaveIn);
end;

Останов записи:
begin
if stop=false then Exit;
stop:=false;
WaveInReset(WaveIn);
WaveInUnPrepareHeader(WaveIn, addr(BufHead), sizeof(BufHead));
WaveInClose(WaveIn);
GlobalUnlock(hBuf);
GlobalFree(hBuf);
end;

Обработка сообщений:
type
TData8 = array [0..127] of byte;
PData8 = ^TData8;
var
Data8:PData8;
begin
Data8:=PData8(PWaveHdr(Msg.lParam)^.lpData);
CopyMemory(@TmpBuf,Data8,BufSize);
if stop then
WaveInAddBuffer(WaveIn, PWaveHdr(Msg.lParam),SizeOf(TWaveHdr)) else stop:=true;
//...а тут обрабатываем полученные данные, помещенные в TmpBuf
end;


Буду благодарен за помощь в разрешении этой непонятности ! Заранее спасибо за Ваши ответы !


 
YDV   (2003-09-26 15:03) [1]

если сбой из-за "переполения" очереди сообщений, то можно ли их от туда как-нибудь удалить и переинициализировать звуковую систему ?


 
Verg   (2003-09-26 16:11) [2]

http://delphimaster.net/view/8-1064314893/


 
YDV   (2003-10-08 06:45) [3]

Все делается попорядку - как это описано в SDK, но совершенно хаотически(и не на всех компьютерах, а только на некоторых) возникает следующая ситуация:
1. все команды работы со звуком обрабатываются с кодом завершения MMSYSTEM_NOERROR
2. при получении сообщения вместо данных получаем код ошибки с номером MMSYSTEM033: нельзя выполнить эту операцию во время воспроизведения.Выполните перезапуск устройства или дождитесь окончания воспроизведения
3. только вот проблема - ничего не воспроизводилось !
4. повторный перезапуск процесса записи ни к чему положительному не приводит - возникает та же ошибка
5. самое непонятное это то, что ошибка возникает в совсем неопределенное время !

может кто сталкивался с такой проблемой ?

заранее спасибо за ответ !


 
YDV   (2003-10-08 07:10) [4]

Похоже что зависает звуковая карта ! - можно ли ее программно перезапустить ? Звуковая карта интегрированная AC97.


 
isko   (2003-10-09 16:29) [5]

да нет, модуль этот зависает - mmsystem или что там.
если бы звуковая, то не слышно было бы
проверь - второй раз запускай из дельфи и читай что там пишет


 
YDV   (2003-10-13 07:11) [6]

>isko:
пишет то же самое:
MMSYSTEM033: нельзя выполнить эту операцию во время воспроизведения ...
... следующие попутки приводят к такому же результату...
... интересно, а mmsystem.dll можно как-нибудь выгрузить из системы, а потом заново загрузить ?



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.12.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
3-61972
ViJen
2003-11-26 12:29
2003.12.19
проблема с индексами на другой машине


3-61984
V-A-V
2003-11-26 10:38
2003.12.19
Компоненты ADO или DbExpress


3-61901
Olga_Oo
2003-11-27 13:40
2003.12.19
Qreport


6-62175
Vygantas
2003-10-20 21:17
2003.12.19
Клиент ждет пока появится сервер.


1-62012
Helg
2003-12-06 21:18
2003.12.19
Как закрыть форму при помощи ESC





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский