Seite 1 von 1
Wie mit QAudioOutput Sound abspielen?
Verfasst: 30. August 2013 11:56
von MADsCIENTIST
Hallo liebe Community,
ich habe eine Frage bezüglich der Klasse "QAudioOutput".
Ist es damit möglich *.wav und/oder *.mp3 Dateien abzuspielen?
Wenn ja, wie würde das genau als Code aussehen?
Bedanke mich für sinnvolle Hilfe schon mal im Vorraus.
PS: Ich nutze Qt5.
Re: Wie mit QAudioOutput Sound abspielen?
Verfasst: 31. August 2013 00:22
von veeman
QAudioOutput wird wohl nur Rohe Audiodaten (pcm oä) abspiel können.
Eine wav Datei könntest du relativ einfach selbst dekodieren und dem Objekt übergeben.
Eine mp3 zu dekodieren wird wohl etwas schwieriger....
Re: Wie mit QAudioOutput Sound abspielen?
Verfasst: 4. September 2013 19:34
von MADsCIENTIST
Danke nochmals für deine Antwort.
Ich hatte schon länger das Problem mit dem Abspielen einer *.wav Datei
mittels QAudioOutput; [annoying "pop"-sound]
Habe nun endlich herausgefunden, wie man den Header überspringt!
Code: Alles auswählen
try {
QFile audioFile(/*audio file path*/);
if(!audioFile.exists())
throw QString("The given audio file does not exist!");
QAudioFormat format;
format.setSampleSize(16);
format.setSampleRate(44100);
format.setChannelCount(2);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::UnSignedInt);
QAudioDeviceInfo device = QAudioDeviceInfo::defaultOutputDevice();
if(!device.isFormatSupported(format))
throw QString("Raw audio format not supported by back-end, cannot play audio.");
if(audioFile.open(QIODevice::ReadOnly)) {
QAudioOutput player(device, format);
QByteArray audioData;
QBuffer audioBuffer;
audioFile.seek(44); // skip wav header
audioData = audioFile.readAll();
audioFile.close();
audioBuffer.setBuffer(&audioData);
audioBuffer.open(QIODevice::ReadOnly); // prepare/open buffer for playback
// start playback thread
player->start(&audioBuffer);
audioBuffer.close(); // close buffer
}
} catch(QString) {
//... do something
}
Re: Wie mit QAudioOutput Sound abspielen?
Verfasst: 4. September 2013 23:50
von veeman
Du solltest noch beachten das im WAV-Header Daten wie SampleRate, SampleSize etc. gespeichert sind und
du diese verarbeiten solltest, da dein Code nur für bestimmte WAV-Typen funktioniert.