69 lines · 1.9 KB · C++
RawDownload
////  AudioWavFile.h//  libraries/audio-client/src////  Created by Luis Cuenca on 12/1/2017.//  Copyright 2017 High Fidelity, Inc.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// #include "AudioFileWav.h" bool AudioFileWav::create(const QAudioFormat& audioFormat, const QString& filepath) {    if (_file.isOpen()) {        _file.close();    }    _file.setFileName(filepath);    if (!_file.open(QIODevice::WriteOnly)) {        return false;    }    addHeader(audioFormat);    return true;} bool AudioFileWav::addRawAudioChunk(char* chunk, int size) {    if (_file.isOpen()) {        QDataStream stream(&_file);        stream.writeRawData(chunk, size);        return true;    }    return false;} void AudioFileWav::close() {    QDataStream stream(&_file);    stream.setByteOrder(QDataStream::LittleEndian);     // fill RIFF and size data on header    _file.seek(4);    stream << quint32(_file.size() - 8);    _file.seek(40);    stream << quint32(_file.size() - 44);    _file.close();} void AudioFileWav::addHeader(const QAudioFormat& audioFormat) {    QDataStream stream(&_file);     stream.setByteOrder(QDataStream::LittleEndian);     // RIFF    stream.writeRawData("RIFF", 4);    stream << quint32(0);    stream.writeRawData("WAVE", 4);     // Format description PCM = 16    stream.writeRawData("fmt ", 4);    stream << quint32(16);    stream << quint16(1);    stream << quint16(audioFormat.channelCount());    stream << quint32(audioFormat.sampleRate());    stream << quint32(audioFormat.sampleRate() * audioFormat.channelCount() * audioFormat.sampleSize() / 8); // bytes per second    stream << quint16(audioFormat.channelCount() * audioFormat.sampleSize() / 8); // block align    stream << quint16(audioFormat.sampleSize()); // bits Per Sample    // Init data chunck    stream.writeRawData("data", 4);    stream << quint32(0);}