main.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #include <iostream>
  2. #include <vector>
  3. #include <random>
  4. #include <nlohmann/json.hpp>
  5. #include "signalstats.h"
  6. #include "ThreadPool.h"
  7. #include "RingQueueManualMutex.hpp"
  8. #include "spdlog/spdlog.h"
  9. void test1();
  10. void test2();
  11. void test3();
  12. int main() {
  13. // 初始化Python解释器
  14. // signalstats_wrapper::initialize();
  15. // CPPTP.add_task(test1);
  16. // std::this_thread::sleep_for(std::chrono::seconds(1));
  17. // CPPTP.add_task(test2);
  18. // std::this_thread::sleep_for(std::chrono::seconds(5));
  19. test3();
  20. std::this_thread::sleep_for(std::chrono::seconds(2)); // 等待任务执行
  21. // signalstats_wrapper::finalize();
  22. return 0;
  23. }
  24. void test1()
  25. {
  26. try {
  27. // 创建测试音频信号 (C++版本)
  28. const int sample_rate = 44100;
  29. const int duration_seconds = 1;
  30. const int num_samples = sample_rate * duration_seconds;
  31. std::vector<double> audio_signal(num_samples);
  32. std::random_device rd;
  33. std::mt19937 gen(rd());
  34. std::normal_distribution<> dist(0.0, 1.0);
  35. for (auto& sample : audio_signal) {
  36. sample = dist(gen);
  37. }
  38. std::cout << "生成测试音频信号完成" << std::endl;
  39. // 调用C++接口函数
  40. nlohmann::json output;
  41. std::vector<std::string> window_params = {"tukey", "0.25"};
  42. nlohmann::json& result = signalstats::detect_signal(
  43. output,
  44. audio_signal,
  45. sample_rate,
  46. 3e-3, // silence_threshold
  47. -70.0, // db_threshold
  48. -70.0, // cv_threshold
  49. window_params,
  50. 256, // nperseg
  51. 32, // noverlap
  52. 256, // nfft
  53. true // debug
  54. );
  55. std::cout << "源数据: " << std::endl;
  56. for(const auto it : audio_signal)
  57. {
  58. std::cout << it << " ";
  59. }
  60. std::cout << std::endl;
  61. // 处理输出结果
  62. if (!output.empty()) {
  63. std::cout << "信号检测完成,输出结果: " << output.dump(4) << std::endl;
  64. // 这里可以添加具体的结果解析逻辑
  65. } else {
  66. std::cout << "信号检测完成,但无输出结果" << std::endl;
  67. }
  68. std::cout << "程序执行完成" << std::endl;
  69. } catch (const std::exception& e) {
  70. std::cerr << "错误: " << e.what() << std::endl;
  71. return;
  72. }
  73. // signalstats_wrapper::finalize();
  74. }
  75. void test2()
  76. {
  77. // signalstats_wrapper::initialize();
  78. try {
  79. // 创建测试音频信号 (C++版本)
  80. const int sample_rate = 44100;
  81. const int duration_seconds = 1;
  82. const int num_samples = sample_rate * duration_seconds;
  83. std::vector<double> audio_signal(num_samples);
  84. std::random_device rd;
  85. std::mt19937 gen(rd());
  86. std::normal_distribution<> dist(0.0, 1.0);
  87. for (auto& sample : audio_signal) {
  88. sample = dist(gen);
  89. }
  90. std::cout << "生成测试音频信号完成" << std::endl;
  91. // 调用C++接口函数
  92. nlohmann::json output;
  93. std::vector<std::string> window_params = {"tukey", "0.25"};
  94. nlohmann::json& result = signalstats::detect_signal(
  95. output,
  96. audio_signal,
  97. sample_rate,
  98. 3e-3, // silence_threshold
  99. -70.0, // db_threshold
  100. -70.0, // cv_threshold
  101. window_params,
  102. 256, // nperseg
  103. 32, // noverlap
  104. 256, // nfft
  105. true // debug
  106. );
  107. // 处理输出结果
  108. if (!output.empty()) {
  109. std::cout << "信号检测完成,输出结果: " << output.dump(4) << std::endl;
  110. // 这里可以添加具体的结果解析逻辑
  111. } else {
  112. std::cout << "信号检测完成,但无输出结果" << std::endl;
  113. }
  114. std::cout << "程序执行完成" << std::endl;
  115. } catch (const std::exception& e) {
  116. std::cerr << "错误: " << e.what() << std::endl;
  117. return;
  118. }
  119. // signalstats_wrapper::finalize();
  120. }
  121. /* 测试环形队列 */
  122. void test3()
  123. {
  124. RingQueueManualMutex<int> queue(10);
  125. for(int i = 1; i <= 20; ++i)
  126. {
  127. int pop = queue.push(i);
  128. SPDLOG_INFO("Push: {}, pop:{}, Queue Size: {}", i, pop, queue.QueueSize());
  129. }
  130. }