作者:虚坏叔叔
早餐店不会开到晚上,想吃的人早就来了!😄
一、读取PCM
音频文件进行播放
接着上节课将:
while (!in.eof())
{
if (out->bytesFree() < size)
{
// 等待继续读取数据,然后进行播放
continue;
}
in.read(tmp, size);
streamsize count = in.gcount();
if (count <= 0)
{
break;
}
io->write(tmp, count); // 向声音设备中写入数据
}
// 关闭文件,释放缓冲区
in.close();
delete[] tmp;
tmp = NULL;
反复读文件 直到文件的末尾(eof()
)
while (!in.eof())
如果当前尺寸小于size时 说明当前的数据不足,
if (out->bytesFree() < size)
{
// 等待继续读取数据,然后进行播放
continue;
}
读取size大小的字节到缓冲区,如果实际读取到的数据小于0,说明读取完成,退出读取。否则 将读取到的数据写到声卡设备上。
in.read(tmp, size);
streamsize count = in.gcount();
if (count <= 0)
{
break;
}
io->write(tmp, count); // 向声音设备中写入数据
最后 关闭文件 并且释放内存
// 关闭文件,释放缓冲区
in.close();
delete[] tmp;
tmp = NULL;
运行程序就可以正常的播放音频了
二、总结
- 本文设置完成了读取pcm文件到二进制流中,并完成了文件的播放 。