Thursday, 15 September 2011

qt - Playing ulaw file with QAudioOutput -



qt - Playing ulaw file with QAudioOutput -

i'm trying set simple working illustration play .raw file , sound seems distorted. when .raw file plays, can still create out everything, distorted, listening radio station going out of range.

qstring mresourcepath ="test.raw"; qfile audio_file(mresourcepath); if(audio_file.open(qiodevice::readonly)) { audio_file.seek(4); // skip wav header qbytearray audio_data = audio_file.readall(); audio_file.close(); qbuffer audio_buffer(&audio_data); audio_buffer.open(qiodevice::readonly); qdebug() << audio_buffer.size(); qaudioformat format; format.setsamplesize(8); format.setsamplerate(8000); format.setchannelcount(1); format.setcodec("audio/pcm"); format.setbyteorder(qaudioformat::bigendian); format.setsampletype(qaudioformat::unsignedint); qaudiodeviceinfo info(qaudiodeviceinfo::defaultoutputdevice()); if (!info.isformatsupported(format)) { qwarning()<<"raw sound format not supported backend, cannot play audio."; return; } qdebug() << info.devicename(); qaudiooutput output(info, format); output.start(&audio_buffer); // ...then wait sound finish qeventloop loop; qobject::connect(&output, signal(statechanged(qaudio::state)), &loop, slot(quit())); { loop.exec(); } while(output.state() == qaudio::activestate); }

the title of question indicates wish play u-law audio, logarithmic pcm. yet, line

format.setcodec("audio/pcm");

initializes playback linear pcm. 2 possible solutions:

initialize playback appropriate log pcm codec. docs study qaudiodeviceinfo::supportedcodecs() homecoming list of supported codecs. convert log pcm samples linear pcm in real time. it's pretty low impact , can performed using lookup table.

qt audio

No comments:

Post a Comment