2 changed files with 156 additions and 0 deletions
@ -0,0 +1,77 @@ |
|||||
|
#pragma once
|
||||
|
#include <stdio.h>
|
||||
|
#include <stdlib.h>
|
||||
|
#include <string.h>
|
||||
|
|
||||
|
#include <fstream>
|
||||
|
#include <iostream>
|
||||
|
#include <list>
|
||||
|
#include <map>
|
||||
|
#include <memory>
|
||||
|
#include <set>
|
||||
|
#include <sstream>
|
||||
|
#include <string>
|
||||
|
#include <vector>
|
||||
|
|
||||
|
/**
|
||||
|
* @brief |
||||
|
* |
||||
|
* service: |
||||
|
* |
||||
|
* 监听事件: |
||||
|
* 依赖状态: |
||||
|
* 依赖服务: |
||||
|
* 作用: |
||||
|
* |
||||
|
*/ |
||||
|
|
||||
|
namespace iflytop { |
||||
|
namespace core { |
||||
|
using namespace std; |
||||
|
using namespace core; |
||||
|
class Binary { |
||||
|
uint8_t* m_data = nullptr; |
||||
|
size_t m_size = 0; |
||||
|
|
||||
|
public: |
||||
|
Binary(int size) { |
||||
|
m_data = (uint8_t*)malloc(size); |
||||
|
m_size = size; |
||||
|
} |
||||
|
Binary(uint8_t* data, size_t size) { |
||||
|
m_data = (uint8_t*)malloc(size); |
||||
|
m_size = size; |
||||
|
memcpy(m_data, data, size); |
||||
|
} |
||||
|
Binary(const Binary& other) { |
||||
|
m_data = (uint8_t*)malloc(other.m_size); |
||||
|
m_size = other.m_size; |
||||
|
memcpy(m_data, other.m_data, m_size); |
||||
|
} |
||||
|
Binary(Binary&& other) { |
||||
|
m_data = other.m_data; |
||||
|
m_size = other.m_size; |
||||
|
other.m_data = nullptr; |
||||
|
other.m_size = 0; |
||||
|
} |
||||
|
~Binary() { |
||||
|
if (m_data) { |
||||
|
free(m_data); |
||||
|
m_data = nullptr; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
uint8_t* data() const { return m_data; } |
||||
|
|
||||
|
size_t size() const { return m_size; } |
||||
|
|
||||
|
void resize(size_t size) { |
||||
|
uint8_t* newdata = (uint8_t*)realloc(m_data, size); |
||||
|
if (newdata) { |
||||
|
m_data = newdata; |
||||
|
m_size = size; |
||||
|
} |
||||
|
} |
||||
|
}; |
||||
|
} // namespace core
|
||||
|
} // namespace iflytop
|
@ -0,0 +1,79 @@ |
|||||
|
//
|
||||
|
// Created by zwsd
|
||||
|
//
|
||||
|
|
||||
|
#pragma once
|
||||
|
#include <fstream>
|
||||
|
#include <iostream>
|
||||
|
#include <list>
|
||||
|
#include <map>
|
||||
|
#include <memory>
|
||||
|
#include <set>
|
||||
|
#include <sstream>
|
||||
|
#include <string>
|
||||
|
#include <vector>
|
||||
|
|
||||
|
#include "iflytopcpp/core/spdlogfactory/logger.hpp"
|
||||
|
#include "iflytopcpp/core/thread/thread.hpp"
|
||||
|
|
||||
|
/**
|
||||
|
* @brief |
||||
|
* |
||||
|
* service: |
||||
|
* |
||||
|
* 监听事件: |
||||
|
* 依赖状态: |
||||
|
* 依赖服务: |
||||
|
* 作用: |
||||
|
* |
||||
|
*/ |
||||
|
|
||||
|
namespace iflytop { |
||||
|
namespace core { |
||||
|
class WAVHeader { |
||||
|
public: |
||||
|
struct WAVHeaderBinary { |
||||
|
char chunk_id[4]; // 固定为 "RIFF"
|
||||
|
uint32_t chunk_size; // 文件总大小 - 8
|
||||
|
char format[4]; // 固定为 "WAVE"
|
||||
|
char subchunk1_id[4]; // 固定为 "fmt "
|
||||
|
uint32_t subchunk1_size; // 固定为 16
|
||||
|
uint16_t audio_format; // 编码格式,1 表示 PCM 编码
|
||||
|
uint16_t num_channels; // 声道数,1 为单声道,2 为立体声
|
||||
|
uint32_t sample_rate; // 采样率,如 44100
|
||||
|
uint32_t byte_rate; // 数据传输速率,即采样率 * 声道数 * 位数 / 8
|
||||
|
uint16_t block_align; // 数据块对齐,即每个采样点占用的字节数,如 2 表示 16 位,即 2 字节
|
||||
|
uint16_t bits_per_sample; // 位数,如 8、16、24、32
|
||||
|
char subchunk2_id[4]; // 固定为 "data"
|
||||
|
uint32_t subchunk2_size; // 数据长度,即文件总大小 - 44
|
||||
|
}; |
||||
|
WAVHeaderBinary header; |
||||
|
|
||||
|
public: |
||||
|
WAVHeader(uint32_t sample_rate, uint16_t bits_per_sample, uint16_t num_channels, uint32_t num_samples) { |
||||
|
// 填充 RIFF 头
|
||||
|
strcpy(header.chunk_id, "RIFF"); |
||||
|
header.chunk_size = num_samples * num_channels * bits_per_sample / 8 + 44; |
||||
|
strcpy(header.format, "WAVE"); |
||||
|
|
||||
|
// 填充 fmt 子块
|
||||
|
strcpy(header.subchunk1_id, "fmt "); |
||||
|
header.subchunk1_size = 16; |
||||
|
header.audio_format = 1; // PCM 编码
|
||||
|
header.num_channels = num_channels; |
||||
|
header.sample_rate = sample_rate; |
||||
|
header.bits_per_sample = bits_per_sample; |
||||
|
header.byte_rate = sample_rate * num_channels * bits_per_sample / 8; |
||||
|
header.block_align = num_channels * bits_per_sample / 8; |
||||
|
|
||||
|
// 填充 data 子块
|
||||
|
strcpy(header.subchunk2_id, "data"); |
||||
|
header.subchunk2_size = num_samples * num_channels * bits_per_sample / 8; |
||||
|
} |
||||
|
|
||||
|
uint8_t* data() { return (uint8_t*)&header; } |
||||
|
size_t size() { return sizeof(header); } |
||||
|
}; |
||||
|
|
||||
|
} // namespace core
|
||||
|
} // namespace iflytop
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue