QtMultimedia 라이브러리와 함께 VC++를 사용하여 오디오 스트림에서 오디오를 재생하려고합니다. 내가 너무 Qt의 라이브러리와 경험이 아니에요 때문에 내가 .wav 파일에 읽고 버퍼에 쓰기 시작 : 그 후QIODevice를 사용하여 오디오 데이터 재생 (VC++의 Qt4.6)
ifstream wavFile;
char* file = "error_ex.wav";
wavFile.open(file, ios::binary);
, 나는 ifstream의 .read() 함수를 사용에 모든 데이터를 기록 버퍼. QBuffer가 준비되면 내가 버퍼를 재생하려고
QByteArray fData;
for(int i = 0; i < (int)data.size(); ++i)
{
fData.push_back(data.at(i));
}
m_pBuffer->open(QIODevice::ReadWrite);
m_pBuffer->write(fData);
m_pBuffer->close();
(m_pBuffer 유형 QBuffer이다)
: 버퍼가 기록 된 후에는 Qt를 위해 준비 오디오 라이터에 퇴장 것
QIODevice* ioDevice = m_pAudioOut->start();
ioDevice->write(m_pBuffer->buffer());
는
이 스피커에서 작은 팝업 결과 후 재생이 중지 (m_pAudioOut 유형 QAudioOutput이다). 어떤 아이디어?
Windows XP SP2에서 Visual Studio 2008을 Qt 라이브러리를 사용하여 실행 4.6.3.
아! Qt 설명서보다 훨씬 좋은 정보원입니다. 필자의 필요에 맞는 예제 코드를 "복제"하고 있습니다. 나는 두 가지 문제를 겪었다. 풀 모드를 사용하려고 할 때 QTimers를 스레드에서 시작해야하는 방법에 대한 일부 QObject 경고와 함께 이전과 동일한 결과를 얻습니다. 그런 다음 푸시 모드를 사용하면 읽기 호출이 -1 (오류)을 반환합니다. 내 완충제로 무언가를 믿게 만드는 것은 잘못된 것입니다. 나는 이것을 계속 연구 할 것이다. 도와 주셔서 감사합니다. – Tony
그래서 나는 pull 메소드를 더보고 있습니다. 내 "재생"방법은 단순히 QBuffer를 연 다음 QAudioOutput이이를 시작합니다 (Qt 문서와 함께 예제를 따라). 그것은 첫 번째 음을 연주하고 멈춘 것처럼 들립니다. 이 방법을 사용하면 수동으로 모든 패킷을 재생할 필요가 없습니다. 아이디어? – Tony
내 직감이 옳았습니다. 명령 줄 응용 프로그램에서 실행하면 프로그램이 거의 즉시 오디오 출력을 종료하고 종료시킵니다. 내 코드를 GUI 응용 프로그램에 추가했는데 성공했습니다! 도와 주셔서 감사합니다! – Tony