opus 压缩率_音频压缩编码 opus 附完整C++代码示例

#include #include#include#include#include

// https://github.com/mackron/dr_libs/blob/master/dr_wav.h

#define DR_WAV_IMPLEMENTATION#include"dr_wav.h"

#define FRAME_SIZE 480

#define MAX_FRAME_SIZE (6*FRAME_SIZE)

#define MAX_CHANNELS 1

#define MAX_PACKET_SIZE (3*1276)

#pragma pack(push)

#pragma pack(1)

structWavInfo {

uint16_t channels;

uint32_t sampleRate;

uint32_t bitsPerSample;

};#pragma pack(pop)#ifndef nullptr#define nullptr NULL

#endif

classFileStream {public:

FileStream() {

cur_pos= 0;

}void Append(const char *data, size_t size) {if (cur_pos + size >Size()) {

vec.resize(cur_pos+size);

}

memcpy(vec.data()+cur_pos, data, size);

cur_pos+=size;

}voidAppendU32(uint32_t val) {

Append((char *) (&val), sizeof(val));

}char *Data() {returnvec.data();

}

size_t Size() {returnvec.size();

}

size_t Read(void *buff, size_t elemSize, size_t elemCount) {

size_t readed= std::min((vec.size() - cur_pos), (elemCount * elemSize)) /elemSize;if (readed > 0) {

memcpy(buff, vec.data()+ cur_pos, readed *elemSize);

cur_pos+= readed *elemSize;

}returnreaded;

}bool SeekCur(intoffset) {if (cur_pos + offset >vec.size()) {

cur_pos= !vec.empty() ? (vec.size() - 1) : 0;return false;

}else{

cur_pos+=offset;return true;

}

}bool SeekBeg(int offset = 0) {

cur_pos= 0;returnSeekCur(offset);

}bool WriteToFile(const char *filename) {

FILE*fin = fopen(filename, "wb");if (!fin) {return false;

}

fseek(fin,0, SEEK_SET);

fwrite(vec.data(),sizeof(char), vec.size(), fin);

fclose(fin);return true;

}bool ReadFromFile(const char *filename) {

FILE*fin = fopen(filename, "rb");if (!fin) {return false;

}

fseek(fin,0, SEEK_END);long fileSize =ftell(fin);

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值