This commit is contained in:
Saturneic 2018-12-27 10:11:06 +08:00
parent 5b3e2e2640
commit 0138aab21b
8 changed files with 17 additions and 12 deletions

View File

@ -1,2 +1,5 @@
# <#Title#> # 设计内容(数据部分)
## 对于WAV类的分析
1. 传入需要读入的WAV格式文件的路径而后对于WAV格式的文件头进行通过二进制模式读取操作。为了提高程序的鲁棒性程序通过while循环来读入根据读入的标签的特点来进行下一步操作。这样能够在处理少部分不和主流形式一致文件头的情况下仍然能够正确读取文件中必要信息与相关数据。在读取data标签前会对fmt标签是否已读入进行检查。在读取fmt标签时会检查文件数据是否为PCM格式。
2. 数据储存上利用stdint.h中定义的uint32_t来保证一次读入4个字节来符合标准规范。由于WAV文件头中包含很多个小节针对这些小节及其特点建立了相关的结构体。用来一次性读入相关信息确保读入的稳定性与安全性。
3. 在音频数据的处理上由于PCM格式的音频输入含有16位双声道8位双声道16位单声道8位单声道。对于这几种不同的类型实际的处理方式会不同。在工程定义时定义了4个不同的位域用来分割不同类型下的音频数据。并且对于这四种不同的位域给它们配置了4中不同的容器来容纳。所以该类在识别音频文件后会自动选择合适的容器来存放。

View File

@ -3,16 +3,6 @@
#include <type.hpp> #include <type.hpp>
//计算函数执行时间间隔
#define DRAW_TIMER 1
//绘图函数执行时间间隔
#define FRESH_TIMER 20
typedef std::pair<double, double> Size;
typedef std::pair<double, double> Point;
typedef std::vector<double> Point3;
typedef std::vector<double> RawColor;
using std::string; using std::string;
using std::vector; using std::vector;
using std::list; using std::list;

View File

@ -16,4 +16,14 @@
#include <list> #include <list>
#include <map> #include <map>
//计算函数执行时间间隔
#define DRAW_TIMER 1
//绘图函数执行时间间隔
#define FRESH_TIMER 20
typedef std::pair<double, double> Size;
typedef std::pair<double, double> Point;
typedef std::vector<double> Point3;
typedef std::vector<double> RawColor;
#endif /* type_h */ #endif /* type_h */

View File

@ -18,11 +18,13 @@ int main(int argc, char * argv[]) {
nwd.playMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); nwd.playMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
nwd.size({700,700}); nwd.size({700,700});
nwd.position({200,100}); nwd.position({200,100});
twav.getInfo(); twav.getInfo();
twav.setTimer(20); twav.setTimer(20);
int hw = sqrt(twav.m_pss.step); int hw = sqrt(twav.m_pss.step);
nwd.create("Fields"); nwd.create("Fields");
p_avg->setRetangle({{0.98,-0.98},{0.85,-0.85}}); p_avg->setRetangle({{0.98,-0.98},{0.85,-0.85}});
nwd.draw_shape(p_avg); nwd.draw_shape(p_avg);
for(int y = 0; y < hw; y++){ for(int y = 0; y < hw; y++){