qt6实现txt音频采样数据转pcm音频的代码,其中txt采样数据为16位深采样的10进制数,数值范围为-32767~32767
时间: 2024-12-14 14:25:47 浏览: 8
qt quick(qml)实现8bit和16bit的pcm的音频波形
在Qt 6中,要将.txt文本文件中的16位深度、10进制表示的音频采样数据转换为PCM音频文件,你可以使用`QDataStream`读取文本文件,然后逐个样本处理成二进制数据。以下是一个基本示例,假设已有一个名为`audio_samples.txt`的文件:
```cpp
#include <QCoreApplication>
#include <QFile>
#include <QDataStream>
#include <QBuffer>
class AudioConverter {
public:
static void convert(const QString& inputFilePath, const QString& outputFilePath) {
QFile inputFile(inputFilePath);
if (!inputFile.open(QIODevice::ReadOnly)) {
qWarning() << "Failed to open input file";
return;
}
QByteArray rawData;
QTextStream in(&inputFile);
qint64 sampleCount = 0;
while (!in.atEnd()) {
qint64 sampleValue;
in >> sampleValue; // 读取10进制的16位样本值
sampleValue = (sampleValue + 32768) % 65536 - 32768; // 将值转换回16位pcm范围(-32768~32767)
QDataStream out(&rawData, QIODevice::Append);
out.writeRawLittleInt(sampleValue); // 写入little-endian格式
++sampleCount;
}
inputFile.close();
QBuffer buffer(&rawData);
if (!buffer.open(QIODevice::WriteOnly)) {
qWarning() << "Failed to create output buffer";
return;
}
QFile outputFile(outputFilePath);
if (!outputFile.open(QIODevice::Truncate | QIODevice::WriteOnly)) {
qWarning() << "Failed to open output file";
return;
}
buffer.writeTo(&outputFile);
outputFile.close();
qDebug() << "Converted " << sampleCount << " samples to PCM format.";
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
AudioConverter::convert("audio_samples.txt", "output_pcm.wav");
return app.exec();
}
```
这段代码首先打开输入文件,读取每一行的16位样本值,将其转换回正确的PCM范围,然后写入到临时缓冲区。最后,将缓冲区的数据写入新的`.wav`文件。
注意:此代码仅作为演示,实际应用中可能需要处理更复杂的情况,如音频帧结构、采样率等,并使用专门的库如`QAudioFormat`和`QAudioEncoder`进行完整的音频转换。
阅读全文