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.
Wie mit QAudioOutput Sound abspielen?
Re: Wie mit QAudioOutput Sound abspielen?
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....
Eine wav Datei könntest du relativ einfach selbst dekodieren und dem Objekt übergeben.
Eine mp3 zu dekodieren wird wohl etwas schwieriger....
Zuletzt geändert von veeman am 5. September 2013 15:39, insgesamt 1-mal geändert.
-
MADsCIENTIST
Re: Wie mit QAudioOutput Sound abspielen?
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!
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?
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.
du diese verarbeiten solltest, da dein Code nur für bestimmte WAV-Typen funktioniert.