//-------------------------------------------------------------------------
bool R::readFrame(AudioFrame& f)
{
  if (_seekWanted)
  {
    _seekWanted = false;
    _frameIndex = _seekWantedIdx;
    if (_frameIndex >= getFrameCount())
      return false;
    unsigned long n = getSampleBytes()*getChannelCount();
    _pReader->seek(getHeaderLength()+n*_frameIndex);
  }
  // si on depasse la fin du fichier
  unsigned long i, frameCount = getFrameCount();
  // the call to getFrameCount() defines _sampleBytes & other stuff
  if (_frameIndex >= frameCount)
    return false;
  if (_selectedChannel > _channelCount)
    throw Exception("Unavailable selected channel #"
          + String::valueOf(_selectedChannel), __FILE__, __LINE__);
  if (_sampleBytes == 2) // 16 bits
  {
    if (_channelCount == 1)
      f.setData(_pReader->readInt2());
    else if (_channelCount == 2)
    {
      if (_selectedChannel == 0)
      {
        f.setData(_pReader->readInt2());
        _pReader->readInt2();
      }
      else
      {
        _pReader->readInt2();
        f.setData(_pReader->readInt2());
      }
    }
    else // multi-channels
    {
      for (i=0; i<_selectedChannel; i++)
        _pReader->readInt2();
      f.setData(_pReader->readInt2());
      for (i++; i<_channelCount; i++)
        _pReader->readInt2();
    }
  }
  else if (_sampleBytes == 1) // 8 bits
  {
    if (_channelCount == 1)
      f.setData(_pReader->readChar());
    else if (_channelCount == 2)
    {
      if (_selectedChannel == 0)
      {
        f.setData(_pReader->readChar());
        _pReader->readChar();
      }
      else
      {
        _pReader->readChar();
        f.setData(_pReader->readChar());
      }
    }
    else // multi-channels
    {
      for (i=0; i<_selectedChannel; i++)
        _pReader->readChar();
      f.setData(_pReader->readChar());
      for (i++; i<_channelCount; i++)
        _pReader->readChar();
    }
  }
  else
    throw Exception("Unimplemented code (TODO)", __FILE__, __LINE__);
  f.setValidity(true);
  _frameIndex++;
  return true; // invalid frame
}