2010-12-08 2 views
1

QT의 Phonon 구성 요소를 사용하여 C++에서 사용자 상호 작용을위한 사운드를 재생하고 있습니다. 많은 테스트가 끝나면 메인 스레드가 메인 메시지 루프로 돌아갈 때 대기중인 사운드가 재생되기 시작한다는 것을 확인할 수 있습니다. 코드를 오래 처리하면 사운드 재생이 지연됩니다. 지연을 피할 수있는 방법을 찾아야합니다.QT Phonon에서 즉시 사운드 재생 (이벤트 루프를 기다리지 않음)

소리를 별도의 스레드에서 시도했지만 Phonon의 defect은 해당 스레드에서 일부 개체가 생성되지 않도록합니다. 따라서 일부 신호는 항상 주 스레드에 고정되어 있습니다. 간단히 신속하게 이벤트 루프로 돌아

는 몇 가지 이유에 대한 옵션이되지 않습니다 :

  1. 일부 개체 작품은 단순히 느리고 스레드에서 가속화 또는 쉽게 수행 할 수 없습니다 (데이터베이스 연결 등)
  2. 포논은 이벤트 그럼에도 불구하고 난 그냥 소리 API의 가장 기본적인 사용 사례를 충당하기 위해 찾고 있어요 포논 신호

방해/차단/빨리 다른 신호를 반환 그렇게하더라도, 다수의 신호를 사용 : 사용자가 somethi 할 때 소리를 내라. 버튼을 클릭하는 것과 같이) 소리를 즉시 재생할 수 있습니다. 확실하게 Phonon에서 어떻게 든 다뤄야 만합니까?

+0

사운드 재생이 실행 된 직후에'QApplication :: processEvents'를 호출 해 볼 수 있습니다 ... – smerlin

+0

Point # 2는 여전히 processEvents를 호출하여 수정할 수 없다는 것을 의미합니다 - 누군가가 Phonon 이벤트/신호. –

답변

1

qt 4.7의 포논이 향상되었지만 유사한 목적 (qt 4.6)으로 사용하는 것을 고려해 보았습니다. 동시에 두 개의 사운드를 재생/믹싱 할 수 없기 때문에 거부했습니다. 나는 심지어 어떤 실행 시간 테스트에 도착하지 않았다. 나는 SDL Audio와 함께 갔는데, 특히 SDL Mixer은 재생시 레이턴시가 낮으며 동시에 여러 사운드를 재생할 수 있습니다.

+0

크로스 플랫폼 솔루션 (Linux/Windows/이상)이 필요합니다. 또한 나의 필요는 매우 제한적이므로 나는 더 진보 된 도서관을 배우고 싶지 않다. (만약 내가 그것을 피할 수 있다면). BTW, Phonon 동시에 여러 소리를 재생할 수 있습니다. –

+0

SDL 패밀리는 여러분이 얻을 수있는만큼 크로스 플랫폼입니다. –

+0

@edA 매우 얇아서 얻을 수있는 것처럼, 심지어 약 10 개의 호출을 사용합니다. 나는 아주 얇은 클래스로 싸였습니다. 그렇습니다. Mihai가 말했듯이, SDL은 여러분이 얻을 수있는 크로스 플랫폼입니다. –