Wie mit QAudioOutput Sound abspielen?

Alles rund um die Programmierung mit Qt
Antworten
MADsCIENTIST

Wie mit QAudioOutput Sound abspielen?

Beitrag 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.
veeman
Beiträge: 280
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Wie mit QAudioOutput Sound abspielen?

Beitrag 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....
Zuletzt geändert von veeman am 5. September 2013 15:39, insgesamt 1-mal geändert.
MADsCIENTIST

Re: Wie mit QAudioOutput Sound abspielen?

Beitrag 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
}
veeman
Beiträge: 280
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Wie mit QAudioOutput Sound abspielen?

Beitrag 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.
Antworten