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

C++

Войти
Регистрация
Восстановить пароль
 
a_etot_nik
8 / 8 / 1
Регистрация: 09.04.2010
Сообщений: 58
#1

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

23.01.2012, 20:05. Просмотров 680. Ответов 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2012, 20:05     Звуковой драйвер не сообщяет о завершение воспроизведения
Посмотрите здесь:
Воспроизведения звука мгновенно C++ Builder
Создание списка воспроизведения фильмов C++
C++ WinAPI Функция для воспроизведения видео программно
Функция воспроизведения звука через колонки C++
C++ Builder Воспроизведения звука при нажатии клавиши
C++ Написание библиотеки для воспроизведения MP3
Ошибка при попытке воспроизведения звука Visual C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
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
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
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
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
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
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
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++ Builder Подскажите пожалуйста как в MediaPlayer изменить скорость воспроизведения
Эй ХАКЕРЫ! :-) Подкиньте либу для воспроизведения XM формата мелодий ! C++
Звуковой буфер C++
Звуковой фильтр с++ C++
C++ Звуковой сигнал!

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

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

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