mirror of
https://github.com/MiSTer-devel/InputTest_MiSTer.git
synced 2026-04-19 03:04:18 +00:00
63 lines
1.2 KiB
C++
63 lines
1.2 KiB
C++
#include "sim_audio.h"
|
|
#include <iostream>
|
|
#include <fstream>
|
|
#include <list>
|
|
using namespace std;
|
|
|
|
SimClock clk;
|
|
bool outputToFile;
|
|
ofstream audioFile;
|
|
|
|
SimAudio::SimAudio(int systemClockFrequency, bool saveToFile)
|
|
{
|
|
clk = SimClock(systemClockFrequency / 44100);
|
|
outputToFile = saveToFile;
|
|
}
|
|
|
|
SimAudio::~SimAudio()
|
|
{
|
|
|
|
}
|
|
|
|
void SimAudio::Clock(signed short left, signed short right) {
|
|
clk.Tick();
|
|
if (clk.IsRising()) {
|
|
// Output audio (left channel only for now)
|
|
float l = left / 32768.0f;
|
|
if (outputToFile) {
|
|
audioFile.write((const char*)&l, sizeof(float));
|
|
}
|
|
}
|
|
}
|
|
|
|
void SimAudio::CollectDebug(signed short left, signed short right) {
|
|
float vol_l = left / 32768.0f;
|
|
float vol_r = right / 32768.0f;
|
|
debug_pos++;
|
|
if (debug_pos == debug_max_samples) { debug_pos = 0; }
|
|
debug_wave_l[debug_pos] = vol_l;
|
|
debug_wave_r[debug_pos] = vol_r;
|
|
|
|
}
|
|
|
|
void SimAudio::Initialise() {
|
|
// Reset plot data
|
|
for (int c = 0; c < debug_max_samples; c++) {
|
|
debug_wave_l[c] = 0;
|
|
debug_wave_r[c] = 0;
|
|
debug_positions[c] = (double)c / (double)debug_max_samples;
|
|
}
|
|
if (outputToFile)
|
|
{
|
|
// Setup Audio output stream
|
|
audioFile.open("audio.wav", ios::binary);
|
|
}
|
|
}
|
|
void SimAudio::CleanUp() {
|
|
if (outputToFile)
|
|
{
|
|
audioFile.close();
|
|
}
|
|
}
|
|
|