Erro 2 Não é possível converter implicitamente o tipo ‘float []’ para ‘string’

Estou tentando capturar os valores de uma musica que depois sao enviados para um visualizer. O que estou a tentar fazer e de capturar os valores recebidos e transformar los em numeros e com esses numeros fazer outro tipo de visualizador de som , como por exemplo desenhar alguns pixeis randomizado em cores en um panel. O codigo que uso foi tirado aqui Codeproject este e o codigo que da o erro o label e so para efeitos de debug

void source_ProcessData(float[] data)     {         soundVisualizer1.AppendData(data);         soundVisualizer1.TriggerRedraw();            float value = data;         string str1 = value.ToString();          label1.Text =str1;     } 

Este e o codigo que estou usando

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;  namespace SoundFiltering 

{ /// /// Form class. /// public partial class Form1 : Form { protected SoundSource source = null; protected SoundPlayback playback = null;

    /// <summary>     /// Constructor.     /// </summary>     public Form1()     {         InitializeComponent();     }      /// <summary>     /// On closing.     /// </summary>     /// <param name="e"></param>     protected override void OnClosing(CancelEventArgs e)     {         if (source != null)         {             source.Dispose(true);         }         if (playback != null)         {             playback.Dispose(true);         }     }       /// <summary>     /// Listen button.     /// </summary>     /// <param name="sender"></param>     /// <param name="e"></param>     private void button1_Click(object sender, EventArgs e)     {         if (source != null) return;         source = new SoundSource();         source.ProcessFFTData += new SoundSource.ProcessData_Delegate(source_ProcessFFTData);         source.ProcessData += new SoundSource.ProcessData_Delegate(source_ProcessData);         source.Start();     }      /// <summary>     /// Visualize the data in the upper graph.     /// </summary>     /// <param name="data"></param>     void source_ProcessData(float[] data)     {         soundVisualizer1.AppendData(data);         soundVisualizer1.TriggerRedraw();            float value = data;         string str1 = value.ToString();          label1.Text =str1;     }      /// <summary>     /// Process the data of the FFT.     /// </summary>     /// <param name="data"></param>     void source_ProcessFFTData(float[] data)     {         float[] tmp = new float[data.Length / 2];         for (int i = 0; i < tmp.Length; i++) tmp[i] = data[i];         if (graph1.Lines.Count < 1)         {             graph1.Lines.Add(new Graph.Line());         }         graph1.Lines[0].Update(tmp);         graph1.TriggerRedraw();     }      /// <summary>     /// Play a file.     /// </summary>     /// <param name="sender"></param>     /// <param name="e"></param>     private void button2_Click(object sender, EventArgs e)     {         if (playback == null)         {             playback = new SoundPlayback();         }         DialogResult dr = openFileDialog1.ShowDialog();         if (!((dr == DialogResult.OK) || (dr == DialogResult.Yes))) return;         playback.Setup(this, openFileDialog1.FileName);         timer1.Enabled = true;     }      /// <summary>     /// Playback timer.     /// </summary>     /// <param name="sender"></param>     /// <param name="e"></param>     private void timer1_Tick(object sender, EventArgs e)     {         float[] buff = new float[1024];         if (playback.GetData(buff) == false)         {             timer1.Enabled = false;             return;         }          source_ProcessData(buff);          float[] fft = new float[buff.Length];         Math.FFT.Forward(buff, fft);         source_ProcessFFTData(fft);         source_ProcessData(fft);     }      private void splitContainer1_Panel2_Paint(object sender, PaintEventArgs e)     {      } } }