예제 #1
0
TrackInfo
ITunesDevice::firstTrack( const QString& file )
{
    m_database = file;

    if ( !m_file )
    {
        m_file = new QFile( file );
        if ( !m_file->open( QIODevice::ReadOnly | QIODevice::Text ) )
        {
            qDebug() << "Could not open iTunes Library" << m_database;
            return TrackInfo();
        }

        m_totalSize = m_file->size();
        m_xmlReader = new QXmlSimpleReader();
        m_xmlInput = new QXmlInputSource();

        m_handler = new ITunesParser();
        m_xmlReader->setContentHandler( m_handler );

        m_xmlInput->setData( m_file->read( 32768 ) );
        if ( !m_xmlReader->parse( m_xmlInput, true ) )
        {
            qDebug() << "Couldn't read file: " << m_database;
            return TrackInfo();
        }
    }

    return nextTrack();
}
예제 #2
0
TrackInfo
ITunesDevice::nextTrack()
{
    while ( m_handler->trackCount() < 20 && !m_file->atEnd() )
    {
        m_xmlInput->setData( m_file->read( 32768 ) );
        m_xmlReader->parseContinue();

        emit progress( (float)( (float)m_file->pos() / (float)m_file->size() ) * 100.0, m_handler->peekTrack() );
    }

    TrackInfo t = m_handler->takeTrack();
    if ( !t.isEmpty() )
    {
        return t;
    }

    if ( m_file->atEnd() )
    {
        // Finished with the database, let's close our stuff
        qDebug() << "Finished reading";

        m_file->close();
        delete m_file;
        m_file = 0;
    }

    return TrackInfo();
}
예제 #3
0
int main() {
	cdio Ripper;
	flac Encoder;
	int tracks = Ripper.GetTracks();
	std::string filename[tracks+1];

	/* Prepare cddb information */
	int frames[tracks];
	for (int i=0; i<tracks; i++) {
		frames[i] = Ripper.GetLba(i+1);
	}

	cddb TrackInfo(&(frames[0]), tracks, Ripper.GetLength());

	/* Does nothing for the moment */
	//if (mkdir("test", 0755) == 0 ) {
		mkdir("test", 0755);
		chdir("test");
		for (int i=1; i<=tracks; i++) {
			char tmp[MAXLEN];
			sprintf(&(tmp[0]), "%02d - %s", i, TrackInfo.GetTitle(i-1).c_str());
			filename[i] = tmp;
			Ripper.RipTrack(i, tmp);
			Encoder.EncodeFile(tmp, tmp);
		}
	//}
	return 0;
}
예제 #4
0
 void onTrackStart(const QXmlAttributes&)
 {
     m_albumInfo.m_vTracks.push_back(TrackInfo());
     char a [10];
     sprintf(a, "%d", cSize(m_albumInfo.m_vTracks));
     m_albumInfo.m_vTracks.back().m_strPos = a;
 }
status_t ARTPSession::setup(const sp<ASessionDescription> &desc) {
    CHECK_EQ(mInitCheck, (status_t)NO_INIT);

    mDesc = desc;

    mRTPConn = new ARTPConnection(ARTPConnection::kRegularlyRequestFIR);

    looper()->registerHandler(mRTPConn);

    for (size_t i = 1; i < mDesc->countTracks(); ++i) {
        AString connection;
        if (!mDesc->findAttribute(i, "c=", &connection)) {
            // No per-stream connection information, try global fallback.
            if (!mDesc->findAttribute(0, "c=", &connection)) {
                ALOGE("Unable to find connection attribute.");
                return mInitCheck;
            }
        }
        if (!(connection == "IN IP4 127.0.0.1")) {
            ALOGE("We only support localhost connections for now.");
            return mInitCheck;
        }

        unsigned port;
        if (!validateMediaFormat(i, &port) || (port & 1) != 0) {
            ALOGE("Invalid media format.");
            return mInitCheck;
        }

        sp<APacketSource> source = new APacketSource(mDesc, i);
        if (source->initCheck() != OK) {
            ALOGE("Unsupported format.");
            return mInitCheck;
        }

        int rtpSocket = MakeUDPSocket(port);
        int rtcpSocket = MakeUDPSocket(port + 1);

        mTracks.push(TrackInfo());
        TrackInfo *info = &mTracks.editItemAt(mTracks.size() - 1);
        info->mRTPSocket = rtpSocket;
        info->mRTCPSocket = rtcpSocket;

        sp<AMessage> notify = new AMessage(kWhatAccessUnitComplete, id());
        notify->setSize("track-index", mTracks.size() - 1);

        mRTPConn->addStream(
                rtpSocket, rtcpSocket, mDesc, i, notify, false /* injected */);

        info->mPacketSource = source;
    }

    mInitCheck = OK;

    return OK;
}
예제 #6
0
// следующий трек
void __fastcall TForm1::SpeedButton3Click(TObject *Sender)
{
  MediaPlayer->Next();
  // если перешли к последнему треку, то кнопку
  // Next сделать недоступной
  if ( MCI_TMSF_TRACK(MediaPlayer->Position) == MediaPlayer->Tracks )
    SpeedButton3->Enabled  =  false;
  if (! SpeedButton1->Enabled ) SpeedButton1->Enabled = true;
  TrackInfo();
  Label2->Caption = "0:00";
}
예제 #7
0
// предыдущий трек
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
MediaPlayer->Previous(); // в начало текущего трека
    MediaPlayer->Previous(); // в начало предыдущего трек
    if ( MCI_TMSF_TRACK(MediaPlayer->Position) == 1 )
      SpeedButton1->Enabled  =  false;
    if ( ! SpeedButton3->Enabled )
      SpeedButton3->Enabled  =  true;
    TrackInfo();
    Label2->Caption = "0:00";
}
예제 #8
0
void ControlWidget::initDisconnect( ErrorCode errorCode )
{
   PartymanMainWindow::setIconAndTitle( this, mPartymanIcon, QApplication::applicationName() +
                                                             ": " + tr("(disconnected)") );
   mpTrayIcon->setToolTip( QString() );
   mpTrayIcon->setContextMenu( mpTrayIconStopMenu );
   if( mConnected )
   {
      mConnected = false;
      QString errorText;
      handlePause( true );
      saveTracks( true );
      mpPlayer[0]->disconnect();
      mpPlayer[1]->disconnect();
      //mpSkipButton->setDisabled( true );
      mpSkipAction->setDisabled( true );
      mpStartButton->setMenu( 0 );
      mpStartButton->setChecked( false );
      switch( errorCode )
      {
         case ErrorNoConnection:
            errorText = tr("Could not connect to DerMixD. Is it running?");
            break;
         case ErrorConnectionLost:
            errorText = tr("The connection to DerMixD was lost.");
            break;
         case ErrorWrongVersion:
            errorText = tr("The Version of DerMixD is not compatible.");
            break;
         case ErrorNone:
         default:
            break;
      }
      if( !errorText.isEmpty() && mDerMixDstarted )
      {
         QMessageBox::critical( this, QApplication::applicationName(), errorText );
      }
      if( Settings::value( Settings::PartymanDerMixDrun ) )
      {
         mpDerMixDprocess->terminate();
         Settings::setValue( Settings::PartymanDerMixDpid, 0 );
      }
      emit signalConnected( false );
      mpPlaylist->setTrackInfo( TrackInfo() );
      log( "p0s", "stop" );
   }
}
예제 #9
0
bool TrackInfoListModel::insertRows( int row, int count, const QModelIndex &parent )
{
   if( (count < 1) || (row < 0) || (row > rowCount(parent)) )
   {
      return false;
   }

   beginInsertRows( QModelIndex(), row, row + count - 1 );

   for ( int i = 0; i < count; i++ )
   {
      mList.insert( row, TrackInfo() );
   }

   endInsertRows();

   return true;
}
예제 #10
0
// щелчок на кнопке Play/Stop
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
if ( SpeedButton2->Tag == 0 ) {
    // щелчок на кнопке Play
    MediaPlayer->Play();
    SpeedButton2->Glyph->Assign(bmStop);
    SpeedButton2->Hint = "Стоп";
    SpeedButton2->Tag  =  1;
    //SpeedButton3->Enabled  =  true; // доступна кнопка "следующий трек"
    MediaPlayer->Notify  =  true;
    Timer->Enabled  = true;
    TrackInfo();
  }
  else {
    // щелчок на кнопке Stop
    SpeedButton2->Glyph->Assign(bmPlay);
    SpeedButton2->Hint = "Воспроизведение";
    SpeedButton2->Tag  =  0;
    MediaPlayer->Notify  =  true;
    MediaPlayer->Stop();
    Timer->Enabled  =  false;
  }
}
예제 #11
0
// сигнал от таймера: вывести номер трека
// и время воспроизведения
void __fastcall TForm1::TimerTimer(TObject *Sender)
{
  int trk;          // трек
  int min, sec;     // время
  AnsiString st;

  if ( MediaPlayer->Mode == mpPlaying ) // режим воспроизведения
  {
    // получить номер воспроизводимого трека и
    trk  =  MCI_TMSF_TRACK(MediaPlayer->Position);

    if ( trk != Track ) // произошла смена трека
    {
      TrackInfo();
      Track  =  trk;
      if ( Track > 1 )
          SpeedButton1->Enabled  =  true;  // доступна кнопка "пред.трек"
      if ( Track == MediaPlayer->Tracks)
          SpeedButton3->Enabled  =  false; // кнопка "след.трек" недоступна
    }

    // вывод информации о воспроизводимом треке
    min  =  MCI_TMSF_MINUTE(MediaPlayer->Position);
    sec  =  MCI_TMSF_SECOND(MediaPlayer->Position);
    st.printf("%d:%.2d",min,sec);
    Label2->Caption = st;
    return;
  }

  // Если дисковод открыт или в нем нет
  // AudioCD, то Mode == mpOpen.
  // Ждем диск, т.е. до тех пор пока не будет Mode == mpStopped + кол-во треков > 1
  if ( (MediaPlayer->Mode == mpStopped) &&
     (MediaPlayer->Tracks > 1) )
  {
    // диск вставлен
    Timer->Enabled  =  false;
    SpeedButton2->Enabled = true;;
    SpeedButton2->Tag = 0;
    SpeedButton3->Enabled = true;
    MediaPlayer->Notify  =  true;

    // получить информацию о времени звучания CD
    MediaPlayer->TimeFormat = tfMilliseconds;

    int ms = MediaPlayer->Length;
    AnsiString st = "Audio CD. Время звучания: ";

    st = st +  IntToStr(MINUTE(ms));
    st = st + ":" + IntToStr(SECOND(ms));
    Label1->Caption  =  st;

    MediaPlayer->TimeFormat = tfTMSF;
    Label1->Visible  =  true;
    Track = 0;
    return;
  }

  // дисковод открыт или в дисководе не Audio CD
  if (( MediaPlayer->Mode == mpOpen )||
      (MediaPlayer->Mode == mpStopped) && (MediaPlayer->Tracks == 1))
  {
    Label1->Caption  =  "Вставьте Audio CD";
    if ( Label1->Visible )
          Label1->Visible  =  false;
    else  Label1->Visible  =  true;
  }
}
예제 #12
0
static void TrackInfoO(GUI *data)
{
    TrackInfo();
    GeneralFuncF1(2);
}