PDA

View Full Version : Why use QAudioOutput play audio is fail?



tiaoweiliao
8th February 2017, 08:39
hi , all.

i use QAudioInput record sound.

input code is :


void start(){
file = new QFile("C:/audiorecord.raw");
file->open(QIODevice::WriteOnly | QIODevice::Truncate);
//set format
QAudioFormat format;
format.setSampleRate(8000);
format.setChannelCount(1);
format.setSampleSize(32);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::Float);

input = new QAudioInput(format, this);//input is QAudioInput * input;
input->start(file);
}

void finish(){
input->stop();
file->close();
}



write data to successful , call function "void finish()" later.



void play(){
file->setFileName("C:/audiorecord.raw");
file->open(QIODevice::ReadOnly);

QAudioFormat format;
format.setSampleRate(8000);
format.setChannelCount(1);
format.setSampleSize(32);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::Float);

output = new QAudioOutput(format,0);
output->start(file);
}


if the program not restarted , in "start()" later call function "play()" is no problem, Play success.

but if program restarted , call play() is program crash.

What's the problem?

I will very much appreciate it.

anda_skoa
8th February 2017, 09:18
play() accesses "file" without checking it is a valid pointer.
start() creates the file, so play() works after start().

Cheers,
_

tiaoweiliao
8th February 2017, 10:11
play() accesses "file" without checking it is a valid pointer.
start() creates the file, so play() works after start().

Cheers,
_

thank you.

oh!!! sorry , a very stupid mistake , I was too careless.