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