96 lines
2.9 KiB
C++
96 lines
2.9 KiB
C++
#include <extra2d.h>
|
||
#include <cstdint>
|
||
#include <fstream>
|
||
#include <cstdio>
|
||
#include <string>
|
||
#include <vector>
|
||
|
||
using namespace extra2d;
|
||
|
||
static bool writeTestWav(const std::string &path) {
|
||
const int sampleRate = 22050;
|
||
const int channels = 1;
|
||
const int bitsPerSample = 16;
|
||
const int durationMs = 250;
|
||
const int sampleCount = sampleRate * durationMs / 1000;
|
||
const int byteRate = sampleRate * channels * bitsPerSample / 8;
|
||
const int blockAlign = channels * bitsPerSample / 8;
|
||
const int dataSize = sampleCount * blockAlign;
|
||
const int riffSize = 36 + dataSize;
|
||
|
||
std::ofstream file(path, std::ios::binary);
|
||
if (!file.is_open()) {
|
||
return false;
|
||
}
|
||
|
||
file.write("RIFF", 4);
|
||
file.write(reinterpret_cast<const char *>(&riffSize), 4);
|
||
file.write("WAVE", 4);
|
||
file.write("fmt ", 4);
|
||
const int fmtChunkSize = 16;
|
||
const short audioFormat = 1;
|
||
const short numChannels = static_cast<short>(channels);
|
||
const short bps = static_cast<short>(bitsPerSample);
|
||
file.write(reinterpret_cast<const char *>(&fmtChunkSize), 4);
|
||
file.write(reinterpret_cast<const char *>(&audioFormat), 2);
|
||
file.write(reinterpret_cast<const char *>(&numChannels), 2);
|
||
file.write(reinterpret_cast<const char *>(&sampleRate), 4);
|
||
file.write(reinterpret_cast<const char *>(&byteRate), 4);
|
||
const short ba = static_cast<short>(blockAlign);
|
||
file.write(reinterpret_cast<const char *>(&ba), 2);
|
||
file.write(reinterpret_cast<const char *>(&bps), 2);
|
||
file.write("data", 4);
|
||
file.write(reinterpret_cast<const char *>(&dataSize), 4);
|
||
|
||
std::vector<int16_t> samples(static_cast<size_t>(sampleCount), 0);
|
||
file.write(reinterpret_cast<const char *>(samples.data()), dataSize);
|
||
return file.good();
|
||
}
|
||
|
||
int main(int argc, char **argv) {
|
||
// 创建应用(自动创建窗口)
|
||
auto app = Application::create();
|
||
|
||
AppConfig config;
|
||
config.title = "Hello World";
|
||
config.width = 1280;
|
||
config.height = 720;
|
||
|
||
if (!app->init(config)) {
|
||
printf("初始化失败!\n");
|
||
return -1;
|
||
}
|
||
|
||
printf("窗口: %dx%d\n", app->getWindowWidth(), app->getWindowHeight());
|
||
|
||
AssetsModule *assets = getAssets();
|
||
if (assets) {
|
||
Handle<Font> font = assets->load<Font>("assets/font.ttf");
|
||
if (font.isValid()) {
|
||
Font *fontPtr = assets->get(font);
|
||
float lineHeight = fontPtr ? fontPtr->lineHeight(32.0f) : 0.0f;
|
||
printf("字体加载成功,32px 行高: %.2f\n", lineHeight);
|
||
} else {
|
||
printf("字体加载失败\n");
|
||
}
|
||
|
||
const std::string testMusicPath = "assets/generated_test.wav";
|
||
if (writeTestWav(testMusicPath)) {
|
||
Handle<Music> music = assets->load<Music>(testMusicPath);
|
||
if (music.isValid()) {
|
||
printf("音乐加载成功: %s\n", testMusicPath.c_str());
|
||
} else {
|
||
printf("音乐加载失败: %s\n", testMusicPath.c_str());
|
||
}
|
||
} else {
|
||
printf("测试音频文件生成失败\n");
|
||
}
|
||
}
|
||
|
||
// 运行应用
|
||
app->run();
|
||
|
||
// 自动销毁
|
||
return 0;
|
||
}
|