saving stereo

This commit is contained in:
Dave Griffiths
2023-04-12 15:48:56 +01:00
parent 13ee3ed817
commit 6a89c19d24
2 changed files with 18 additions and 14 deletions

View File

@ -51,12 +51,12 @@ void audio_device::connect(const string &output_device_name, const string &clien
m_client.attach(output_device_name,clientname,opt); m_client.attach(output_device_name,clientname,opt);
} }
void audio_device::save_sample(const string &filename, const sample s) { void audio_device::save_sample(const string &filename, unsigned int channels, const sample s) {
SF_INFO sfinfo; SF_INFO sfinfo;
sfinfo.format=SF_FORMAT_WAV | SF_FORMAT_FLOAT; sfinfo.format=SF_FORMAT_WAV | SF_FORMAT_FLOAT;
sfinfo.frames=s.get_length(); sfinfo.frames=s.get_length();
sfinfo.samplerate=m_samplerate; sfinfo.samplerate=m_samplerate;
sfinfo.channels=1; sfinfo.channels=channels;
sfinfo.sections=1; sfinfo.sections=1;
sfinfo.seekable=0; sfinfo.seekable=0;
SNDFILE* f=sf_open(filename.c_str(), SFM_WRITE, &sfinfo); SNDFILE* f=sf_open(filename.c_str(), SFM_WRITE, &sfinfo);
@ -69,8 +69,7 @@ void audio_device::save_sample(const string &filename, const sample s) {
void audio_device::start_recording(std::string filename) { void audio_device::start_recording(std::string filename) {
m_record_filename=filename; m_record_filename=filename;
m_recording=true; m_recording=true;
m_record_buffer_left.clear(); m_record_buffer.clear();
m_record_buffer_right.clear();
m_record_counter=0; m_record_counter=0;
} }
@ -81,12 +80,18 @@ void audio_device::stop_recording() {
void audio_device::maybe_record() { void audio_device::maybe_record() {
if (m_recording) { if (m_recording) {
m_record_buffer_left.add(left_out); sample news(left_out.get_length()*2);
m_record_buffer_right.add(right_out); for (unsigned int i=0; i<left_out.get_length(); i++) {
news[i*2]=left_out[i];
news[i*2+1]=right_out[i];
}
m_record_buffer.add(news);
m_record_counter++; m_record_counter++;
// save "every now and again"
if (m_record_counter%10==0) { if (m_record_counter%10==0) {
save_sample(m_record_filename+"-left.wav", m_record_buffer_left); save_sample(m_record_filename+".wav",2,m_record_buffer);
save_sample(m_record_filename+"-right.wav", m_record_buffer_right);
} }
} }
} }

View File

@ -42,13 +42,12 @@ namespace spiralcore {
portaudio_client m_client; portaudio_client m_client;
void save_sample(const std::string &filename, const sample s); void save_sample(const std::string &filename, unsigned int channels, const sample s);
private: private:
bool m_recording; bool m_recording;
std::string m_record_filename; std::string m_record_filename;
sample m_record_buffer_left; sample m_record_buffer;
sample m_record_buffer_right;
u32 m_record_counter; u32 m_record_counter;
u32 m_samplerate; u32 m_samplerate;
}; };