Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
8 / 8 / 4
Регистрация: 09.04.2010
Сообщений: 58
1

Звуковой драйвер не сообщяет о завершение воспроизведения

23.01.2012, 20:05. Просмотров 823. Ответов 8
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
void  CALLBACK func (HWAVEOUT hwi, UINT Msg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2){
    if (Msg == WOM_OPEN) std::cout<<"open"<<std::endl;
    if (WOM_DONE == Msg){  // Не выполняется ...
       std::cout<<"end_play"<<std::endl;
       sound_play * pClass = (sound_play * )dwInstance;
       pClass->buffer->pop();
       pClass->start = true;
       pClass->play();
    }
}
А так открываю ....
C++
1
  waveOutOpen(&devais,WAVE_MAPPER,format,(DWORD_PTR)func ,(DWORD)this, CALLBACK_FUNCTION)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.01.2012, 20:05
Ответы с готовыми решениями:

audio, завершение воспроизведения
Вопрос заключается в следующем: Как узнать, закончилось ли воспроизведение? (саундтрек кончился?)

Подозрительный звуковой драйвер
Всем привет! Недавно стал замечать, что после 5 минут работы ноутбук резко стал нагреваться и...

Не устанавливается звуковой драйвер
Нету звука. Устанавливал Realtek HD драйвер, ошибок не было, однако после перезагрузки нету...

Звуковой драйвер полетел
Подскажите кто нить кто знает.Вылетел звук на компе вообще.Сканировал комп,мол из за того что...

8
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.01.2012, 20:44 2
в колбэках бывают ограничения на вызов ф-ий. может и тут они есть
0
8 / 8 / 4
Регистрация: 09.04.2010
Сообщений: 58
23.01.2012, 21:10  [ТС] 3
Врятли ... Когда записываю с микрофона колбек срабатывает
C++
1
2
3
4
5
void  CALLBACK ReadWaveData(HWAVEIN hwi, UINT Msg, DWORD dwInstance,
                 DWORD dwParam1,DWORD dwParam2){
    if (WIM_DATA == Msg){
           }
}
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.01.2012, 21:26 4
так тут я не вижу никаких ф-й до проверки
вход в колбэк, проверка условия - должно выполняться

Добавлено через 2 минуты
не поленился, поискал. вот вам ссылка и конкретно цитата
Applications should not call any system-defined functions from inside a callback function, except for EnterCriticalSection, LeaveCriticalSection, midiOutLongMsg, midiOutShortMsg, OutputDebugString, PostMessage, PostThreadMessage, SetEvent, timeGetSystemTime, timeGetTime, timeKillEvent, and timeSetEvent. Calling other wave functions will cause deadlock.
написано все черным по белому.
з.ы. все это вам следовало самому найти, раз используете
1
8 / 8 / 4
Регистрация: 09.04.2010
Сообщений: 58
23.01.2012, 22:10  [ТС] 5
Если я правельно Вас понял :
C++
1
2
3
4
5
6
7
8
9
10
void  CALLBACK func (HWAVEOUT hwi, UINT Msg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2){
        if (Msg == WOM_OPEN) std::cout<<"open"<<std::endl;
        if (WOM_DONE == Msg){  // Не выполняется ...
           std::cout<<"end_play"<<std::endl;
           sound_play * pClass = (sound_play * )dwInstance;
           pClass->buffer->pop();
           pClass->start = true;
           pClass->play();
        }
}
Не выполняестя изза вызова системных функций кроме EnterCriticalSection, LeaveCriticalSection, midiOutLongMsg, midiOutShortMsg, OutputDebugString, PostMessage, PostThreadMessage, SetEvent, timeGetSystemTime, timeGetTime, timeKillEvent, and timeSetEvent .

Но почему тогда выполняется :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void  CALLBACK ReadWaveData(HWAVEIN hwi, UINT Msg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2){
    if (WIM_DATA == Msg){
       sound_caps * pClass = (sound_caps * )dwInstance;
       LPWAVEHDR Hdr = (LPWAVEHDR)dwParam1;      
       std::cout<<"caps_unprepar ="<<(waveInUnprepareHeader(hwi, Hdr, sizeof              (WAVEHDR))==MMSYSERR_NOERROR)<<std::endl;       
       elem * el;
       el = new elem;
       el->data = new BYTE [pClass->m_WF->nBlockAlign * pClass->m_nRecSamples] ;
       CopyMemory(el->data, Hdr->lpData, pClass->m_WF->nBlockAlign * pClass->m_nRecSamples);
       pClass->buffer->push(*el);
       if (pClass->start == TRUE)
            { // добавить еще 1 буфер (тот же самый)
         Hdr->dwFlags = WHDR_BEGINLOOP ; 
                Hdr->dwBufferLength = (pClass->m_WF->nBlockAlign * pClass->m_nRecSamples);
                waveInPrepareHeader(hwi, Hdr, sizeof(WAVEHDR));
                std::cout<<"DOUBLE ADD ="<<(waveInAddBuffer(hwi, Hdr, sizeof(WAVEHDR))==MMSYSERR_NOERROR)<<std::endl;
        std::cout<<"DOUBLE START ="<<(waveInStart  (pClass>devais)==MMSYSERR_NOERROR)<<std::endl;
            }      
    }   
}
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.01.2012, 22:47 6
не "не выполняется изза", а не следует использовать. когда так пишут - это значит, что все - на вашей совести. и вполне даже может выполняться. но более интересный момент
Calling other wave functions will cause deadlock.
вот тут:
Цитата Сообщение от a_etot_nik Посмотреть сообщение
C++
1
pClass->play();
ничего такого не вызывается?
1
8 / 8 / 4
Регистрация: 09.04.2010
Сообщений: 58
23.01.2012, 23:10  [ТС] 7
Спасибо. Начал разбиратся. А почему тогда :
C++
1
2
3
4
5
6
7
8
9
  void  CALLBACK func (HWAVE hwo, UINT Msg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2){
    if (Msg == WOM_OPEN){
              std::cout<<"open"<<std::endl;  // Выполняется
           }
    if (WOM_DONE == Msg){
       std::cout<<"done"<<std::endl; // Не выполняется
      
    }
}
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
23.01.2012, 23:31 8
по отдельным кускам мне сложно понять, поэтому могу лишь давать догадки...
проверьте так:
Цитата Сообщение от a_etot_nik Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
void  CALLBACK func (HWAVE hwo, UINT Msg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2){
        if (Msg == WOM_OPEN){
              //std::cout<<"open"<<std::endl;
           }
        if (WOM_DONE == Msg){
           std::cout<<"done"<<std::endl; // выполняется ли?
          
        }
}
а вообще, если вам по получению какого-то месега нужно пользоваться тем, чем не стоит, то может попробовать сигнализировать(PostMessage?) или устанавливать флаги, а в другом месте уже колдовать
0
8 / 8 / 4
Регистрация: 09.04.2010
Сообщений: 58
23.01.2012, 23:57  [ТС] 9
Да всё уже перепробовал ... Начал грешить на свою звук карту и драйвера ... Ладно буду разбиратся ... Спасибо ...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2012, 23:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Нужен звуковой драйвер
Realtek HD Audio output Добавлено через 27 секунд на Windows 7

Не устанавливается драйвер звуковой карты
Заранее прошу прощения за ,возможно, глупый вопрос. Ситуация Следующая: Накрылся комп, купил в...

Звуковой драйвер не идёт на Windows 7
есть ли на материнскую плату такой модели &quot;asus p5gd2-x&quot; совместимы звуковой драйвер на windows...

Как установить звуковой драйвер?
Здравствуйте! как востановить звук на компе, мне кажется что я удалила нечайно звукойвой драйвер,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.