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; }
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); } }
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 } }
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; } }
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; }
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); } }
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
qint64 BassPlayer::calcFileSize() { qint64 len = BASS_StreamGetFilePosition(chan, BASS_FILEPOS_END); return len + BASS_StreamGetFilePosition(chan, BASS_FILEPOS_START); }
float BassPlayer::downloadingLevelCalc() { if (fileSize() > 0) return ((BASS_StreamGetFilePosition(chan, BASS_FILEPOS_DOWNLOAD)) / (float)fileSize()); else return 1; }
void bmx_bass_streamgetfileposition(DWORD handle, QWORD * pos, DWORD mode) { *pos = BASS_StreamGetFilePosition(handle, mode); }
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; }