make sound wave the default visualization and fftw optional dependency

This commit is contained in:
Andrzej Rybczak
2009-09-03 21:45:57 +02:00
parent 82e1ba5a9d
commit 604de32de6
7 changed files with 48 additions and 11 deletions

View File

@@ -298,10 +298,10 @@ void Help::GetKeybindings()
# endif // ENABLE_OUTPUTS
# ifdef ENABLE_VISUALIZER
# if defined(ENABLE_VISUALIZER) && defined(HAVE_FFTW3_H)
*w << "\n\n " << fmtBold << "Keys - Music visualizer\n -----------------------------------------\n" << fmtBoldEnd;
*w << DisplayKeys(Key.Space) << "Toggle visualization type\n";
# endif // ENABLE_VISUALIZER
# endif // ENABLE_VISUALIZER && HAVE_FFTW3_H
*w << "\n\n " << fmtBold << "Mouse - Global\n -----------------------------------------\n" << fmtBoldEnd;

View File

@@ -306,7 +306,7 @@ void DefaultConfiguration(ncmpcpp_config &conf)
conf.ask_before_clearing_main_playlist = false;
conf.mouse_support = true;
conf.new_design = false;
conf.visualizer_use_wave = false;
conf.visualizer_use_wave = true;
conf.set_window_title = true;
conf.mpd_port = 6600;
conf.mpd_connection_timeout = 15;

View File

@@ -37,7 +37,9 @@ using Global::MainHeight;
Visualizer *myVisualizer = new Visualizer;
const unsigned Visualizer::Samples = 2048;
#ifdef HAVE_FFTW3_H
const unsigned Visualizer::FFTResults = Samples/2+1;
#endif // HAVE_FFTW3_H
void Visualizer::Init()
{
@@ -45,10 +47,12 @@ void Visualizer::Init()
w->SetTimeout(Config.visualizer_fifo_path.empty() ? ncmpcpp_window_timeout : 40 /* this gives us 25 fps */);
ResetFD();
# ifdef HAVE_FFTW3_H
itsFreqsMagnitude = new unsigned[FFTResults];
itsInput = static_cast<double *>(fftw_malloc(sizeof(double)*Samples));
itsOutput = static_cast<fftw_complex *>(fftw_malloc(sizeof(fftw_complex)*FFTResults));
itsPlan = fftw_plan_dft_r2c_1d(Samples, itsInput, itsOutput, FFTW_ESTIMATE);
# endif // HAVE_FFTW3_H
isInitialized = 1;
}
@@ -103,14 +107,20 @@ void Visualizer::Update()
return;
w->Clear(0);
# ifdef HAVE_FFTW3_H
Config.visualizer_use_wave ? DrawSoundWave(buf, data) : DrawFrequencySpectrum(buf, data);
# else
DrawSoundWave(buf, data);
# endif // HAVE_FFTW3_H
w->Refresh();
}
void Visualizer::SpacePressed()
{
# ifdef HAVE_FFTW3_H
Config.visualizer_use_wave = !Config.visualizer_use_wave;
ShowMessage("Visualization type: %s", Config.visualizer_use_wave ? "Sound wave" : "Frequency spectrum");
# endif // HAVE_FFTW3_H
}
void Visualizer::DrawSoundWave(int16_t *buf, ssize_t data)
@@ -142,6 +152,7 @@ void Visualizer::DrawSoundWave(int16_t *buf, ssize_t data)
*w << fmtAltCharsetEnd;
}
#ifdef HAVE_FFTW3_H
void Visualizer::DrawFrequencySpectrum(int16_t *buf, ssize_t data)
{
// zero old values
@@ -165,6 +176,7 @@ void Visualizer::DrawFrequencySpectrum(int16_t *buf, ssize_t data)
mvwvline(w->Raw(), MainHeight-bar_height, i, 0, bar_height);
}
}
#endif // HAVE_FFTW3_H
void Visualizer::SetFD()
{

View File

@@ -59,16 +59,23 @@ class Visualizer : public Screen<Window>
private:
void DrawSoundWave(int16_t *, ssize_t);
# ifdef HAVE_FFTW3_H
void DrawFrequencySpectrum(int16_t *, ssize_t);
# endif // HAVE_FFTW3_H
int itsFifo;
# ifdef HAVE_FFTW3_H
unsigned *itsFreqsMagnitude;
double *itsInput;
fftw_complex *itsOutput;
fftw_plan itsPlan;
# endif // HAVE_FFTW3_H
static const unsigned Samples;
# ifdef HAVE_FFTW3_H
static const unsigned FFTResults;
# endif // HAVE_FFTW3_H
};
extern Visualizer *myVisualizer;