p = globals.oss_samplerate;
i += ioctl(fd, SOUND_PCM_WRITE_RATE, &p);
+ sample_rate=globals.oss_samplerate;
+
/* Figure actual blocksize.. */
i += ioctl(fd, SNDCTL_DSP_GETBLKSIZE, &blocksize);
tX_warning("ALSA: The PCM device \"%s\" doesnt support 44100 Hz playback - using %i instead", pcm_name, hw_rate);
}
+ sample_rate=hw_rate;
+
/* Using stereo output */
if (snd_pcm_hw_params_set_channels(pcm_handle, hw_params, 2) < 0) {
tX_error("ALSA: PCM device \"%s\" does not support stereo operation", pcm_name);
{
protected:
int samples_per_buffer;
+ int sample_rate;
void init();
public:
virtual double get_latency()=0; /* call only valid *after* open() */
int get_buffersize() { return samples_per_buffer; } /* call only valid *after* open() */
+ int get_sample_rate() { return sample_rate; }
virtual int open()=0;
virtual int close()=0;
return ERROR_AUDIO;
}
+ vtt_class::set_sample_rate(device->get_sample_rate());
vtt_class::set_mix_buffer_size(device->get_buffersize()/2); //mixbuffer is mono
if (recording_request) {
- if (tape->start_record(globals.record_filename, device->get_buffersize()*sizeof(int16_t))) {
+ if (tape->start_record(globals.record_filename, device->get_buffersize()*sizeof(int16_t), device->get_sample_rate())) {
device->close();
delete device;
device=NULL;
written_bytes=0;
}
-int tx_tapedeck :: start_record (char *name, int bs)
+int tx_tapedeck :: start_record (char *name, int bs, int samplerate)
{
if (is_recording) return 1;
strcpy(file.name, name);
- file.srate=44100;
+ file.srate=samplerate;
file.chans=2;
file.depth=16;
- file.bps=88200;
+ file.bps=samplerate*2;
file.blkalign=2;
file.len=0;
file.sofar=0;
int blocksize;
public:
- int start_record(char *, int);
+ int start_record(char *name, int bs, int samplerate);
void stop_record();
void eat(int16_t *);
control_hidden=hide;
gui_hide_control_panel(this, hide);
}
+
+void vtt_class :: set_sample_rate(int samplerate) {
+ list <vtt_class *> :: iterator vtt;
+ double sr=(double) samplerate;
+
+ for (vtt=main_list.begin(); vtt!=main_list.end() ; vtt++) {
+ if ((*vtt)->audiofile) {
+ double file_rate=(*vtt)->audiofile->get_sample_rate();
+ (*vtt)->audiofile_pitch_correction=file_rate/sr;
+ } else {
+ (*vtt)->audiofile_pitch_correction=1.0;
+ }
+ (*vtt)->recalc_pitch();
+ }
+}
static void enable_saturate(int);
static void focus_no(int);
static void focus_next();
- static void unfocus();
+ static void unfocus();
+ static void set_sample_rate(int samplerate);
int trigger();
int stop();