Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
a_etot_nik
8 / 8 / 1
Регистрация: 09.04.2010
Сообщений: 58
23.01.2012, 20:05     Звуковой драйвер не сообщяет о завершение воспроизведения #1
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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2012, 20:05     Звуковой драйвер не сообщяет о завершение воспроизведения
Посмотрите здесь:

C++ Написание библиотеки для воспроизведения MP3
Звуковой буфер C++
Эй ХАКЕРЫ! :-) Подкиньте либу для воспроизведения XM формата мелодий ! C++
Ошибка при попытке воспроизведения звука Visual C++
Функция воспроизведения звука через колонки C++
C++ Builder Воспроизведения звука при нажатии клавиши
C++ Звуковой сигнал!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
retmas
Жарю без масла
831 / 713 / 156
Регистрация: 13.01.2012
Сообщений: 1,637
23.01.2012, 20:44     Звуковой драйвер не сообщяет о завершение воспроизведения #2
в колбэках бывают ограничения на вызов ф-ий. может и тут они есть
a_etot_nik
8 / 8 / 1
Регистрация: 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){
           }
}
retmas
Жарю без масла
831 / 713 / 156
Регистрация: 13.01.2012
Сообщений: 1,637
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.
написано все черным по белому.
з.ы. все это вам следовало самому найти, раз используете
a_etot_nik
8 / 8 / 1
Регистрация: 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;
            }      
    }   
}
retmas
Жарю без масла
831 / 713 / 156
Регистрация: 13.01.2012
Сообщений: 1,637
23.01.2012, 22:47     Звуковой драйвер не сообщяет о завершение воспроизведения #6
не "не выполняется изза", а не следует использовать. когда так пишут - это значит, что все - на вашей совести. и вполне даже может выполняться. но более интересный момент
Calling other wave functions will cause deadlock.
вот тут:
Цитата Сообщение от a_etot_nik Посмотреть сообщение
C++
1
pClass->play();
ничего такого не вызывается?
a_etot_nik
8 / 8 / 1
Регистрация: 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; // Не выполняется
      
    }
}
retmas
Жарю без масла
831 / 713 / 156
Регистрация: 13.01.2012
Сообщений: 1,637
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?) или устанавливать флаги, а в другом месте уже колдовать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2012, 23:57     Звуковой драйвер не сообщяет о завершение воспроизведения
Еще ссылки по теме:

Создание списка воспроизведения фильмов C++
C++ WinAPI Функция для воспроизведения видео программно
Звуковой фильтр с++ C++
Воспроизведения звука мгновенно C++ Builder
C++ Builder Подскажите пожалуйста как в MediaPlayer изменить скорость воспроизведения

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

Или воспользуйтесь поиском по форуму:
a_etot_nik
8 / 8 / 1
Регистрация: 09.04.2010
Сообщений: 58
23.01.2012, 23:57  [ТС]     Звуковой драйвер не сообщяет о завершение воспроизведения #9
Да всё уже перепробовал ... Начал грешить на свою звук карту и драйвера ... Ладно буду разбиратся ... Спасибо ...
Yandex
Объявления
23.01.2012, 23:57     Звуковой драйвер не сообщяет о завершение воспроизведения
Ответ Создать тему
Опции темы

Текущее время: 01:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru