Umieściłem to pytanie na forum Qt, ale nie otrzymałem odpowiedzi. Dlatego zamieszczam go tutaj.Qt - jak nagrywać i odtwarzać dźwięk jednocześnie
Chciałem wiedzieć, czy istnieje sposób nagrywania i odtwarzania dźwięku w tym samym czasie w Qt. Chcę nagrywać dźwięk z mikrofonu, a jednocześnie chcę go odtwarzać w głośniku/słuchawce.
Czy jest jakiś sposób to zrobić w Qt? Czy muszę użyć innej biblioteki?
Byłoby świetnie, gdyby to rozwiązanie było wieloplatformowe (muszę zakryć okna, linux i mac). Jeśli nie jest to możliwe, rozwiąże się rozwiązanie linuksowe.
Używam Qt 4.7 przy okazji.
Edit
Moja najnowsza realizacja podano here. Stworzyłem podklasę QIODevice i ponownie zaimplementowałem jej metodę writeData i readData, tak aby odczyt i zapis można było wykonać za pomocą bufora kołowego. Zrobiłem to jak na this suggestion. Kod ten również nie działa, ponieważ instancja QAudioOutput twarze Underrun Error
, który według this documentation oznacza -
dane audio nie jest podawany do urządzenia audio w wystarczająco szybkim tempie
Mam stosowane hack do tymczasowego rozwiązania tego problemu. W metodzie outputStateChanged
sprawdzam, czy stan wyjścia zmienił się na IDLE
, a jeśli tak, to ponownie wołam o metodę start()
, określając wspólny bufor. Nie chcę tego używać jako stałego rozwiązania, ponieważ czuje się naprawdę beznadziejnie i dlatego, że połknę błąd bez odpowiedniego zbadania jego przyczyn.
Co należy zrobić, aby rozwiązać ten problem?
Próbowałem również rozwiązać ten problem, używając Phonon, ale nie udało mi się, ponieważ nie mam wystarczającej wiedzy o tym module.
@BrianRoach: Nic nie próbowałem, ponieważ nie mogłem znaleźć sposobu na początek. Wiem, że mogę wziąć dźwięk wejściowy za pomocą QAudioInput i zagrać dźwięk. Mogę użyć QAudioOutput, ale oba te elementy działają na pliku, tzn. QAudioInput przechowuje dane wejściowe w pliku, a QAudioOutput odtwarza dźwięki z tego pliku. Takie podejście na pewno nie zadziała w pełnym dupleksie, prawda? Znalazłem kilka poprzednich odpowiedzi, ale wszystkie są dość stare i sugerują użycie innych bibliotek, takich jak openAL, portAudio itp.Chciałem wiedzieć, czy dostępne jest jakieś rozwiązanie, które wykorzystuje biblioteki Qt. –