int fetch_audio_sample(audio_system* sys,double* vec) { int err; #ifdef INT_FFT if((err = snd_pcm_readi(sys->handle, sys->buf, AUDIO_SAMPLE_COUNT)) != AUDIO_SAMPLE_COUNT) { return err; } #else #ifndef NATIVE_AUDIO_FORMAT_DOUBLE if((err = snd_pcm_readi(sys->handle, sys->buf, AUDIO_SAMPLE_COUNT)) != AUDIO_SAMPLE_COUNT) { return err; } audio_buffer_to_double(sys->buf,sys->dbuf,AUDIO_SAMPLE_COUNT*2); #else if((err = snd_pcm_readi(sys->handle, sys->dbuf, AUDIO_SAMPLE_COUNT)) != AUDIO_SAMPLE_COUNT) { return err; } #endif #endif MEASURED("audio preprocessing",{ #ifdef INT_FFT kiss_fftr(sys->plan,sys->buf,sys->tbuf); #else fftw_execute(sys->plan); #endif calculate_statistics(sys->tbuf,AUDIO_SAMPLE_COUNT/2,&vec[0],&vec[1],&vec[2]); calculate_statistics(&(sys->tbuf[AUDIO_SAMPLE_COUNT/2+1]),AUDIO_SAMPLE_COUNT/2,&vec[3],&vec[4],&vec[5]); //calculate_statistics(sys->tbuf,AUDIO_SAMPLE_COUNT,&vec[0],&vec[1],&vec[2]); });
bool print_column(const std::string& column, const std::string& unit, const tables::table& results) { if(!results.is_column<T>(column)) return false; if(results.empty_rows(column) > 0) return false; auto values = results.values_as<T>(column); statistics res = calculate_statistics( values.cbegin(), values.cend()); std::cout << console::textgreen << "[ RESULT ] " << console::textdefault; std::cout << column << " " << std::endl << console::textgreen << "[ ] " << console::textdefault << " Average: " << res.m_mean << " " << unit << std::endl; print("Max:", unit, res.m_max, res.m_mean); print("Min:", unit, res.m_min, res.m_mean); return true; }
void benchmark_result(const benchmark &info, const tables::table &results) { std::vector<uint64_t> iterations = results.values_as<uint64_t>("iterations"); statistics iter = calculate_statistics( iterations.cbegin(), iterations.cend()); // Describe the beginning of the run. std::cout << std::fixed << console::textgreen << "[ RUN ]" << console::textdefault << " " << info.testcase_name() << "." << info.benchmark_name() << " (" << results.rows() << (results.rows() == 1 ? " run " : " runs ") << "/ " << iter.m_mean << " " << (iter.m_mean == 1 ? "iteration" : "iterations") << ")" << std::endl; if(info.has_configurations()) { std::cout << console::textyellow << "[ CONFIG ]" << console::textdefault << " "; const auto& c = info.get_current_configuration(); bool first = true; tables::format f; for(const auto& v : c) { if(!first) std::cout << ","; first = false; std::cout << v.first << "="; f.print(std::cout, v.second); } std::cout << std::endl; } double time = static_cast<double>( boost::chrono::duration_cast<boost::chrono::microseconds>( m_benchmark_stop-m_benchmark_start).count()); std::cout << std::fixed << console::textyellow << "[ TIME ]" << console::textdefault << " " << (time / 1000) << " milliseconds" << std::endl; for(const auto& c_name : results.columns()) { if(c_name == "iterations") continue; if(c_name == "run_number") continue; if(print_column<double>(c_name,info.unit_text(),results)) continue; if(print_column<float>(c_name,info.unit_text(),results)) continue; if(print_column<uint64_t>(c_name,info.unit_text(),results)) continue; if(print_column<int64_t>(c_name,info.unit_text(),results)) continue; if(print_column<int32_t>(c_name,info.unit_text(),results)) continue; if(print_column<uint32_t>(c_name,info.unit_text(),results)) continue; if(print_column<int16_t>(c_name,info.unit_text(),results)) continue; if(print_column<uint16_t>(c_name,info.unit_text(),results)) continue; if(print_column<int8_t>(c_name,info.unit_text(),results)) continue; if(print_column<uint8_t>(c_name,info.unit_text(),results)) continue; } std::cout << console::textgreen << "[----------] " << console::textdefault << std::endl; }