Exemple #1
0
bool BassPlayer::fileInfo(const QUrl & uri, IMediaInfo * info) {
    bool currently_played = media_url.isValid() && uri == media_url;

    int chUID;

    if (currently_played)
        chUID = chan;
    else {
        if (uri.isLocalFile())
            chUID = open(uri.toLocalFile(), LOCAL_PLAY_ATTRS);
        else
            chUID = openRemote(uri.toString(), REMOTE_PLAY_ATTRS);

        if (!chUID) return false;
    }

    float time = BASS_ChannelBytes2Seconds(chUID, BASS_ChannelGetLength(chUID, BASS_POS_BYTE)); // playback duration
    qint64 len = BASS_StreamGetFilePosition(chUID, BASS_FILEPOS_END); // file length

    info -> setDuration(time);
    info -> setBitrate((len / (125 * time) + 0.5));

    BASS_CHANNELINFO media_info;
    if (BASS_ChannelGetInfo(chUID, &media_info)) {
        info -> setSize(len + BASS_StreamGetFilePosition(chUID, BASS_FILEPOS_START));
        info -> setSampleRate(media_info.freq);
        info -> setChannels(media_info.chans);
    }

    if (!currently_played)
        BASS_StreamFree(chUID);
    return true;
}
Exemple #2
0
pascal void PrebufTimerProc(EventLoopTimerRef inTimer, void *inUserData)
{ // monitor prebuffering progress
	DWORD progress=BASS_StreamGetFilePosition(chan,BASS_FILEPOS_BUFFER)
		*100/BASS_StreamGetFilePosition(chan,BASS_FILEPOS_END); // percentage of buffer filled
	if (progress>75 || !BASS_StreamGetFilePosition(chan,BASS_FILEPOS_CONNECTED)) { // over 75% full (or end of download)
		RemoveEventLoopTimer(prebuftimer); // finished prebuffering, stop monitoring
		{ // get the broadcast name and URL
			const char *icy=BASS_ChannelGetTags(chan,BASS_TAG_ICY);
			if (!icy) icy=BASS_ChannelGetTags(chan,BASS_TAG_HTTP); // no ICY tags, try HTTP
			if (icy) {
				for (;*icy;icy+=strlen(icy)+1) {
					if (!strncasecmp(icy,"icy-name:",9))
						SetStaticText(31,icy+9);
					if (!strncasecmp(icy,"icy-url:",8))
						SetStaticText(32,icy+8);
				}
			} else
				SetStaticText(31,"");
		}
		// get the stream title and set sync for subsequent titles
		DoMeta();
		BASS_ChannelSetSync(chan,BASS_SYNC_META,0,&MetaSync,0); // Shoutcast
		BASS_ChannelSetSync(chan,BASS_SYNC_OGG_CHANGE,0,&MetaSync,0); // Icecast/OGG
		// set sync for end of stream
		BASS_ChannelSetSync(chan,BASS_SYNC_END,0,&EndSync,0);
		// play it!
		BASS_ChannelPlay(chan,FALSE);
	} else {
		char text[20];
		sprintf(text,"buffering... %d%%",progress);
		SetStaticText(31,text);
	}
}
Exemple #3
0
bool Player::PrebufTimerProc()
{
        QWORD progress = BASS_StreamGetFilePosition(stream,BASS_FILEPOS_BUFFER)*100/BASS_StreamGetFilePosition(stream,BASS_FILEPOS_END);

        if (progress>75 || !BASS_StreamGetFilePosition(stream,BASS_FILEPOS_CONNECTED)) { // over 75% full (or end of download)
                { // get the broadcast name and URL
                        const char *icy=BASS_ChannelGetTags(stream,BASS_TAG_ICY);
                        if (!icy) icy=BASS_ChannelGetTags(stream,BASS_TAG_HTTP); // no ICY tags, try HTTP
                        if (icy) {

                        }
                }
                // get the stream title and set sync for subsequent titles
                //DoMeta();
                //BASS_ChannelSetSync(chan,BASS_SYNC_META,0,&MetaSync,0); // Shoutcast
                //BASS_ChannelSetSync(chan,BASS_SYNC_OGG_CHANGE,0,&MetaSync,0); // Icecast/OGG
                // set sync for end of stream
                //BASS_ChannelSetSync(chan,BASS_SYNC_END,0,&EndSync,0);
                // play it!
                BASS_ChannelPlay(stream,FALSE);

                return FALSE; // stop monitoring
        } else {
                return TRUE; // continue monitoring
        }
}
Exemple #4
0
gboolean PrebufTimerProc(gpointer data)
{ // monitor prebuffering progress
	DWORD progress=BASS_StreamGetFilePosition(chan,BASS_FILEPOS_BUFFER)
		*100/BASS_StreamGetFilePosition(chan,BASS_FILEPOS_END); // percentage of buffer filled
	if (progress>75 || !BASS_StreamGetFilePosition(chan,BASS_FILEPOS_CONNECTED)) { // over 75% full (or end of download)
		{ // get the broadcast name and URL
			const char *icy=BASS_ChannelGetTags(chan,BASS_TAG_ICY);
			if (!icy) icy=BASS_ChannelGetTags(chan,BASS_TAG_HTTP); // no ICY tags, try HTTP
			if (icy) {
				for (;*icy;icy+=strlen(icy)+1) {
					if (!strncasecmp(icy,"icy-name:",9))
						gtk_label_set_text_8859(GTK_LABEL(GetWidget("status2")),icy+9);
					if (!strncasecmp(icy,"icy-url:",8))
						gtk_label_set_text_8859(GTK_LABEL(GetWidget("status3")),icy+8);
				}
			} else
				gtk_label_set_text(GTK_LABEL(GetWidget("status2")),"");
		}
		// get the stream title and set sync for subsequent titles
		DoMeta();
		BASS_ChannelSetSync(chan,BASS_SYNC_META,0,&MetaSync,0); // Shoutcast
		BASS_ChannelSetSync(chan,BASS_SYNC_OGG_CHANGE,0,&MetaSync,0); // Icecast/OGG
		// set sync for end of stream
		BASS_ChannelSetSync(chan,BASS_SYNC_END,0,&EndSync,0);
		// play it!
		BASS_ChannelPlay(chan,FALSE);
		return FALSE; // stop monitoring
	} else {
		char text[20];
		sprintf(text,"buffering... %d%%",progress);
		gtk_label_set_text(GTK_LABEL(GetWidget("status2")),text);
		return TRUE; // continue monitoring
	}
}
// returns true when buffering is done
bool net_radio_updateBuffering() {
    QWORD progress=BASS_StreamGetFilePosition(chan,BASS_FILEPOS_BUFFER)
                   *100/BASS_StreamGetFilePosition(chan,BASS_FILEPOS_END); // percentage of buffer filled
    if (progress>75 || !BASS_StreamGetFilePosition(chan,BASS_FILEPOS_CONNECTED)) { // over 75% full (or end of download)
        KillTimer(win,0); // finished prebuffering, stop monitoring
        {   // get the broadcast name and URL
            const char *icy=BASS_ChannelGetTags(chan,BASS_TAG_ICY);
            if (!icy) icy=BASS_ChannelGetTags(chan,BASS_TAG_HTTP); // no ICY tags, try HTTP
            if (icy) {
                for (; *icy; icy+=strlen(icy)+1) {
                    if (!_strnicmp(icy,"icy-name:",9)) {
                        //MESS(31,WM_SETTEXT,0,icy+9);
                        // TODO pass this text to user
                    }
                    if (!_strnicmp(icy,"icy-url:",8)) {
                        //MESS(32,WM_SETTEXT,0,icy+8);
                        // TODO pass this text to user
                    }
                }
            } else {
                //MESS(31,WM_SETTEXT,0,"");
                // TODO pass this text to user
            }
        }
        // get the stream title and set sync for subsequent titles
        doMeta();
        BASS_ChannelSetSync(chan,BASS_SYNC_META,0,&metaSync,0); // Shoutcast
        BASS_ChannelSetSync(chan,BASS_SYNC_OGG_CHANGE,0,&metaSync,0); // Icecast/OGG
        // set sync for end of stream
        BASS_ChannelSetSync(chan,BASS_SYNC_END,0,&endSync,0);
        // play it!
        BASS_ChannelPlay(chan,FALSE);
        // done buffering, so return true
        return true;
    } else {
        char text[20];
        sprintf_s(text,"buffering... %d%%",progress);
        // TODO tell the user 'text' how much has buffered

        // not finished buffering, so return false
        return false;
    }
}
Exemple #6
0
void Player::play(QString stationId) {

    stop();
    if( !playList.contains(stationId))
    {
        return;
    }

    HSTREAM stream = BASS_StreamCreateURL(playList.value(stationId).toStdString().c_str(),0,BASS_STREAM_BLOCK|BASS_STREAM_STATUS|BASS_STREAM_AUTOFREE,MyDownload,0);

    BASS_Start();

    if( stream)
    {
        bool buffering = true;
        while(buffering)
        {
            QWORD progress = BASS_StreamGetFilePosition(stream,BASS_FILEPOS_BUFFER)*100/BASS_StreamGetFilePosition(stream,BASS_FILEPOS_END);
            webView()->page()->mainFrame()->evaluateJavaScript(QString("PlayerHud.updateBufforStatus("+ QString::number(progress) +")"));
            if( progress>=100)
            {
                buffering = false;
                webView()->page()->mainFrame()->evaluateJavaScript("PlayerHud.clearBufforStatus()");
            }

        }
        const char *meta=BASS_ChannelGetTags(stream,BASS_TAG_META);
        if( !meta)
        {
            meta = BASS_ChannelGetTags(stream,BASS_TAG_OGG);
        }
        if( meta)
        {
            qDebug() << meta;
            QRegularExpression rx("StreamTitle='(.+)';StreamUrl");
            QRegularExpressionMatch match = rx.match(QString(meta));
            if (match.hasMatch()) {
                qDebug() << match.captured(1);
                webView()->page()->mainFrame()->evaluateJavaScript("setRadiostationTag('"+ match.captured(1) +"')");
            }
        }
        BASS_ChannelPlay(stream,FALSE);
        playStatus = true;

    }
    else
    {
        qDebug() << BASS_ErrorGetCode();
        return;
    }
    return;
}
Exemple #7
0
void InitAudio(const char *pFilename)
{
	DWORD chan,act,time,level;
	QWORD pos;

	printf("--- MIDISYS-ENGINE: InitAudio()\n");

	if (!BASS_Init(-1,44100,0,0,NULL)) BassError("InitAudio() - can't initialize device");

	printf("\tInitAudio() - loading soundtrack from file \"%s\"\n", pFilename);

	int success = 0;

	if ((chan=BASS_StreamCreateFile(FALSE,pFilename,0,0,BASS_STREAM_PRESCAN))
		|| (chan=BASS_StreamCreateURL(pFilename,0,BASS_STREAM_PRESCAN,0,0))) {
		pos=BASS_ChannelGetLength(chan,BASS_POS_BYTE);
		if (BASS_StreamGetFilePosition(chan,BASS_FILEPOS_DOWNLOAD)!=-1) {
			// streaming from the internet
			if (pos!=-1)
			{
				printf("\tInitAudio() - streaming internet file [%I64u bytes]\n",pos);
				success = 1;
			}
			else
			{
				printf("\tstreaming internet file\n");
				success = 1;
			}
		} else
			{
				printf("\tstreaming file [%I64u bytes]\n",pos);
				success = 1;
			}
	}

	if (success == 1)
	{
		music_channel = chan;
	}
	else
	{
		printf("InitAudio() error! could not load file.");
		exit(1);
	}
}
Exemple #8
0
void main(int argc, char **argv)
{
	DWORD chan,act,time,level;
	BOOL ismod;
	QWORD pos;
	int a;

	printf("Simple console mode BASS example : MOD/MPx/OGG/WAV player\n"
			"---------------------------------------------------------\n");

	// check the correct BASS was loaded
	if (HIWORD(BASS_GetVersion())!=BASSVERSION) {
		printf("An incorrect version of BASS was loaded");
		return;
	}

	if (argc!=2) {
		printf("\tusage: contest <file>\n");
		return;
	}

	// setup output - default device
	if (!BASS_Init(-1,44100,0,0,NULL))
		Error("Can't initialize device");

	// try streaming the file/url
	if ((chan=BASS_StreamCreateFile(FALSE,argv[1],0,0,BASS_SAMPLE_LOOP))
		|| (chan=BASS_StreamCreateURL(argv[1],0,BASS_SAMPLE_LOOP,0,0))) {
		pos=BASS_ChannelGetLength(chan,BASS_POS_BYTE);
		if (BASS_StreamGetFilePosition(chan,BASS_FILEPOS_DOWNLOAD)!=-1) {
			// streaming from the internet
			if (pos!=-1)
#ifdef _WIN32
				printf("streaming internet file [%I64u bytes]",pos);
#else
				printf("streaming internet file [%llu bytes]",pos);
#endif
			else
				printf("streaming internet file");
		} else
Exemple #9
0
qint64 BassPlayer::calcFileSize() {
    qint64 len = BASS_StreamGetFilePosition(chan, BASS_FILEPOS_END);
    return len + BASS_StreamGetFilePosition(chan, BASS_FILEPOS_START);
}
Exemple #10
0
float BassPlayer::downloadingLevelCalc() {
    if (fileSize() > 0)
        return ((BASS_StreamGetFilePosition(chan, BASS_FILEPOS_DOWNLOAD)) / (float)fileSize());
    else return 1;
}
Exemple #11
0
void bmx_bass_streamgetfileposition(DWORD handle, QWORD * pos, DWORD mode) {
	*pos = BASS_StreamGetFilePosition(handle, mode);
}
Exemple #12
0
void Clock::Render( int pageChanged )
{
	char details[100];

	if( pageChanged || forceRedraw )
	{
		SDL_FillRect( display, 0, SDL_MapRGB( display->format, 0, 0, 0 ) );

		DrawString( (char*)&dateText, 400, 0, 1, ( dimMode == 0 ? white : black ), ( dimMode == 0 ? cyan : blue ), 2, alignTop );

		sprintf((char*)&details, "Song %d of %d", curSettings->MusicIndex + 1, musicFiles.size() );
		DrawString( details, 6, 440, 0, ( dimMode == 0 ? white : black ), ( dimMode == 0 ? orange : dkred ), 1, alignBottomLeft );
		if( musicFiles.size() > 0 )
		{
			if( BASS_StreamGetFilePosition( curMP3, BASS_FILEPOS_CURRENT ) == -1 )
				DrawString( "<< Paused >>", 400, 480, 0, ( dimMode == 0 ? white : black ), ( dimMode == 0 ? orange : dkred ), 1, alignBottom );
			else
				DrawString( musicFiles.at(curSettings->MusicIndex), 6, 480, 0, ( dimMode == 0 ? white : black ), ( dimMode == 0 ? orange : dkred ), 1, alignBottomLeft );
		} else if ( hasBASS ) {
			DrawString( "No playlist", 6, 480, 0, ( dimMode == 0 ? white : black ), ( dimMode == 0 ? orange : dkred ), 1, alignBottomLeft );
		} else {
			DrawString( "No audio", 6, 480, 0, ( dimMode == 0 ? white : black ), ( dimMode == 0 ? orange : dkred ), 1, alignBottomLeft );
		}
	}

	char curTime[3];
	curTime[2] = 0;
	if( pageChanged || renderHr != 0 )
	{
		curTime[0] = clockAscii[(hr - (hr % 10)) / 10];
		curTime[1] = clockAscii[hr % 10];
		DrawString( (char*)&curTime, 370, 240, 2, ( dimMode == 0 ? red : black ), ( dimMode == 0 ? dkred : red ), 3, alignRight );
		renderHr = 0;
		if( hr == 0 && !pageChanged )
			pageChanged = true;
	}
	if( pageChanged || renderMn != 0 )
	{
		curTime[0] = clockAscii[(mn - (mn % 10)) / 10];
		curTime[1] = clockAscii[mn % 10];
		DrawString( (char*)&curTime, 430, 240, 2, ( dimMode == 0 ? red : black ), ( dimMode == 0 ? dkred : red ), 3, alignLeft );
		renderMn = 0;
	}
	if( blpdim )
		DrawString( ":", 400, 240, 2, ( dimMode == 0 ? red : black ), ( dimMode == 0 ? dkred : red ), 3, alignCentre );

	DrawAt( ( curSettings->Alarms->count == 0 ? belldim : ( dimMode == 0 ? bell : belllow ) ), 780, 80, alignTopRight );

	if( lastVolumeOut == 0 )
		DrawAt( sleepdim, 780, 140, alignTopRight );
	else
		DrawAt( ( dimMode == 0 ? sleepico : sleeplow ), 780, 140, alignTopRight );

	DrawAt( ( dimMode == 0 ? volumeico : volumeicolow ), 780, 200, alignTopRight );
	int curVol = (int)(BASS_GetVolume() * 100.0f);

	DrawRect( 744, 250, 24, 100, SDL_MapRGB( display->format, gray.r, gray.g, gray.b ) );
	DrawRect( 744, 250 + (100-curVol), 24, curVol, SDL_MapRGB( display->format, ( dimMode == 0 ? red.r : dkred.r ), ( dimMode == 0 ? red.g : dkred.g ), ( dimMode == 0 ? red.b : dkred.b ) ) );


	if( pageChanged )
		Invalidate();

	forceRedraw = 0;
}