• Print

Author Topic: Problem with playing audio  (Read 94 times)

Gorlock

  • Sr. Member
  • ****
  • Posts: 337
    • Email
Problem with playing audio
« on: March 25, 2013, 08:09:36 PM »
Hi, I was trying to write a music player but I ran into some problems. I am using the not-GL version of QB64, so if that is the problem I can just switch. To play music with it just add in the beginning of the source code on the line [plst$ = ""] add the name of an m3u playlist file you want to play (mp3 files) without the ".m3u" at the end. Leave file$ blank, unless you want to just play a single mp3 file, but you wont be able to see the problem most likely.

1. Sometimes a song doesn't play at all. It has a good handle but it doesn't play at all when called. Since it checks for this (if a song is not playing and it is not paused, go to next song) around line 640, it just seems to randomly skip some songs but not others, but always the same ones.

Replace the code there with a commented out version:

Code: [Select]
                        IF _SNDPAUSED(audio&) = 0 THEN
                            'changesong = 1
                            'song = song + 1
                            '_SNDSTOP audio&
                            '_SNDCLOSE audio&
                        END IF

and you can see that it is neither playing nor paused and it cannot be started. I have absolutely no idea why this is happening.

2. Sometimes it tries to play a song but it gets stuck on a certain part, very often the beginning. It just loops a sound like "EEK EEK EEK EEK EEK". This also happens sometimes when it calls _SNDSETPOS or _SNDCLOSE.

Note: you need to download the mp3info.exe file included, it allows it to get the length and otherwise it will be dividing by 0. Just put it in the folder with the executable.

source code:
Code: [Select]
_SCREENHIDE
_TITLE "Player"
SCREEN 12

REDIM tag$(6)
REDIM plsttag$(6)

DIM SHARED adx, pi

pi = 4 * ATN(1)

showart = 1
showplst = 1

color1 = 0
color2 = 8
color3 = 7
color4 = 15

color1 = colortorgb&(color1)
color2 = colortorgb&(color2)
color3 = colortorgb&(color3)
color4 = colortorgb&(color4)

plst$ = ""

file$ = ""
songs = 1

sndvol# = .5

IF plst$ > "" THEN
    REDIM plst$(1048576)
    songs = 0
    OPEN plst$ + ".m3u" FOR INPUT AS #1
    IF LOF(1) THEN
        DO
            songs = songs + 1
            LINE INPUT #1, plst$(songs)
            IF plst$(songs) = "" OR _FILEEXISTS(plst$(songs)) = 0 THEN
                plst$(songs) = ""
                songs = songs - 1
            END IF
        LOOP UNTIL EOF(1) = -1
        CLOSE #1
        REDIM _PRESERVE plst$(songs)
        REDIM plstname$(songs)
        REDIM repeat(songs)
        FOR songname = 1 TO songs
            plstfile$ = plst$(songname)
            REDIM plsttag$(6)
            CALL gettag(plstfile$, plsttag, plsttag$(), 1)
            plsttitle$ = plsttag$(1)
            plstartist$ = plsttag$(2)
            plstalbum$ = plsttag$(3)
            plstyear$ = plsttag$(4)
            plstgenre$ = plsttag$(5)
            plstcomment$ = plsttag$(6)
            plstname$(songname) = plsttitle$
        NEXT songname
    ELSE
        GOSUB standby
    END IF
END IF
song = 1
DO
    oppfillcolor = color3
    ostopfillcolor = color3
    odrfillcolor = color3
    odlfillcolor = color3
    osrfillcolor = color3
    oslfillcolor = color3
    oarrowcolor = color1
    obarcolor = color1
    ostopcolor = color1
    odrcolor = color1
    odlcolor = color1
    osrcolor = color1
    oslcolor = color1
    ovolcolor = color1
    boxcolor = color3
    highlightcolor = color4
    linecolor = color1
    boxfill = color2
    progresslinecolor = color1
    ppcirclecolor = color1
    ppfillcolor = color3
    ppfillclick = color1
    arrowcolor = color1
    arrowclick = color3
    barcolor = color1
    barclick = color3
    tboxcolor = color1
    tboxfill = color3
    buttoncolor = color1
    buttonfill = color3
    stopcolor = color1
    stopclick = color3
    stopfillcolor = color3
    stopfillclick = color1
    drcolor = color1
    drclick = color3
    drfillcolor = color3
    drfillclick = color1
    dlcolor = color1
    dlclick = color3
    dlfillcolor = color3
    dlfillclick = color1
    srcolor = color1
    srclick = color3
    srfillcolor = color3
    srfillclick = color1
    slcolor = color1
    slclick = color3
    slfillcolor = color3
    slfillclick = color1
    volcolor = color1
    volclick = color2
    volboxcolor = color1
    volboxfillcolora = color2
    volboxfillcolorb = color1
    shufflecolor = color1
    shufflefillcolor = color2
    repeatcolor = color1
    repeatfillcolor = color2
    oldviewtype = -1
    IF plst$ > "" THEN
        IF shuffle = 1 AND changesongclick = 0 AND songclicked = 0 THEN GOSUB shuffle
        IF looping = 1 THEN song = oldsong
        IF song < 1 THEN song = songs
        IF song > songs THEN song = 1
        file$ = plst$(song)
    END IF
    oldsong = song
    selected = song
    startplst = song
    changedplstbar = 0
    changesongclick = 0
    IF art& >= -1 THEN
        artmax = 0
    ELSE
        oldartmax = 0
    END IF
    justcs = 1
    oldclick = 0
    click = 0
    exitmaxart = 0
    clickmaxart = 0
    clickplstbar = 0
    clickpbar = 0
    clickvbar = 0
    clickpp = 0
    clickstop = 0
    clicksl = 0
    clicksr = 0
    clickdl = 0
    clickdr = 0
    clickvol = 0
    clickshuffle = 0
    clickrepeat = 0
    songclicked = 0
    pressshuffle = 0
    oldpressshuffle = 0
    pressrepeat = 0
    oldpressrepeat = 0
    _SCREENSHOW '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    REDIM tag$(6)
    CALL gettag(file$, tag, tag$(), art&)
    title$ = tag$(1)
    artist$ = tag$(2)
    album$ = tag$(3)
    year$ = tag$(4)
    genre$ = tag$(5)
    comment$ = tag$(6)
    audio& = _SNDOPEN(file$, "VOL, PAUSE, SETPOS")
    IF audio& <> 0 THEN
        _SNDPLAY audio&
        _SNDVOL audio&, sndvol#
        IF paused = 1 THEN _SNDPAUSE audio&
        CALL getlength(file$, length)
        IF artmax = 0 THEN
            SELECT CASE viewtype
                CASE 0
                    screenx = 512
                    screeny = 120
                    a1x = 113
                    a1y = 10
                    a2x = 399
                    a2y = 110
                    acy = 60
                CASE 1
                    screenx = 512
                    screeny = 120
                    a1x = 55
                    a1y = 10
                    a2x = 341
                    a2y = 110
                    acy = 60
                    IF album$ > "" THEN
                        b1x = 409
                        b1y = 17
                        b2x = 511
                        b2y = 119
                        ba1x = 413
                        ba1y = 21
                        ba2x = 507
                        ba2y = 115
                    ELSE
                        b1x = 402
                        b1y = 5
                        b2x = 506
                        b2y = 115
                        ba1x = 407
                        ba1y = 10
                        ba2x = 501
                        ba2y = 110
                    END IF
                CASE 2
                    screenx = 512
                    screeny = 240
                    a1x = 113
                    a1y = 6
                    a2x = 399
                    a2y = 106
                    acy = 56
                    c1x = 8
                    c1y = 129
                    c2x = 504
                    c2y = 233
                CASE 3
                    screenx = 512
                    screeny = 240
                    a1x = 113
                    a1y = 6
                    a2x = 399
                    a2y = 106
                    acy = 56
                    b1x = 397
                    b1y = 125
                    b2x = 507
                    b2y = 235
                    ba1x = 402
                    ba1y = 130
                    ba2x = 502
                    ba2y = 230
                    c1x = 8
                    c1y = 129
                    c2x = 387
                    c2y = 233
            END SELECT
            IF viewtype <> oldviewtype THEN SCREEN _NEWIMAGE(screenx, screeny, 32)
            oldviewtype = viewtype
        END IF
        DO
            _LIMIT 32
            CLS
            _PRINTMODE _KEEPBACKGROUND
            ticker& = ticker& + 1
            IF ticker& MOD 4 = 0 THEN ticker&(1) = ticker&(1) + 1
            IF ticker& MOD 8 = 0 THEN ticker&(2) = ticker&(2) + 1
            IF ticker& MOD 16 = 0 THEN ticker&(3) = ticker&(3) + 1
            IF ticker& MOD 32 = 0 THEN ticker&(4) = ticker&(4) + 1
            IF ticker& MOD 64 = 0 THEN ticker&(5) = ticker&(5) + 1
            IF ticker& MOD 96 = 0 THEN ticker&(6) = ticker&(6) + 1
            IF ticker& MOD 128 = 0 THEN ticker&(7) = ticker&(7) + 1
            adx = (a1x + (INT((a2x - a1x) / 2)))
            viewtype = 0
            IF artmax = 0 THEN
                LINE (a1x, a1y)-(a2x, a1y), boxcolor
                LINE (a1x, a2y)-(a2x, a2y), boxcolor
                CIRCLE ((a1x + 1), acy), 50, boxcolor, (pi / 2), ((3 * pi) / 2)
                CIRCLE ((a2x - 1), acy), 50, boxcolor, ((3 * pi) / 2), (pi / 2)
                PAINT STEP(0, 0), boxfill, boxcolor
                LINE ((a1x + 5), (acy - 8))-((a2x - 5), (acy - 8)), progresslinecolor
                FOR endpnts = 2 TO 1 STEP -1
                    CIRCLE ((a1x + 5), (acy - 8)), endpnts, progresslinecolor
                    CIRCLE ((a2x - 5), (acy - 8)), endpnts, progresslinecolor
                NEXT endpnts
                IF clickpbar = 0 THEN
                    bloploc = ((a1x + 5) + (((a2x - 5) - (a1x + 5)) * percplay))
                    FOR blopdraw = 5 TO 1 STEP -1
                        CIRCLE (bloploc, (acy - 8)), blopdraw, progresslinecolor
                    NEXT blopdraw
                END IF
                CIRCLE (adx, (a2y - 26)), 24, ppcirclecolor
                PAINT STEP(0, 0), ppfillcolor, ppcirclecolor
                SELECT CASE paused
                    CASE 0
                        LINE ((adx - 12), ((a2y - 26) - 16))-((adx - 4), ((a2y - 26) + 16)), barcolor, B
                        LINE ((adx + 4), ((a2y - 26) - 16))-((adx + 12), ((a2y - 26) + 16)), barcolor, B
                        PAINT ((adx - 11), ((a2y - 26) - 15)), barcolor, barcolor
                        PAINT ((adx + 5), ((a2y - 26) - 15)), barcolor, barcolor
                    CASE 1
                        PSET ((adx - 8), ((a2y - 26) - 16)), arrowcolor
                        LINE STEP(0, 0)-((adx - 8), ((a2y - 26) + 16)), arrowcolor
                        LINE STEP(0, 0)-((adx + 16), (a2y - 26)), arrowcolor
                        LINE STEP(0, 0)-((adx - 8), ((a2y - 26) - 16)), arrowcolor
                        PAINT (adx, (a2y - 26)), arrowcolor, arrowcolor
                END SELECT
                LINE (adx, (a2y - 2))-((41 + adx), (a2y - 2)), buttoncolor
                LINE ((22 + adx), (a2y - 34))-((41 + adx), (a2y - 34)), buttoncolor
                CIRCLE ((40 + adx), (a2y - 18)), 16, buttoncolor, ((3 * pi) / 2), (pi / 2)
                PAINT STEP(0, 0), drfillcolor, buttoncolor
                LINE ((31 + adx), (a2y - 12))-((31 + adx), (a2y - 24)), drcolor
                LINE STEP(0, 0)-((37 + adx), (a2y - 18)), drcolor
                LINE STEP(0, 0)-((37 + adx), (a2y - 24)), drcolor
                LINE STEP(0, 0)-((43 + adx), (a2y - 18)), drcolor
                LINE STEP(0, 0)-((37 + adx), (a2y - 12)), drcolor
                LINE STEP(0, 0)-((37 + adx), (a2y - 18)), drcolor
                LINE STEP(0, 0)-((31 + adx), (a2y - 12)), drcolor
                PAINT ((32 + adx), (a2y - 18)), drcolor, drcolor
                PAINT ((42 + adx), (a2y - 18)), drcolor, drcolor
                LINE (adx, (a2y - 2))-(((adx - 41)), (a2y - 2)), buttoncolor
                LINE (((adx - 22)), (a2y - 34))-(((adx - 41)), (a2y - 34)), buttoncolor
                CIRCLE (((adx - 40)), (a2y - 18)), 16, buttoncolor, (pi / 2), ((3 * pi) / 2)
                PAINT STEP(0, 0), dlfillcolor, buttoncolor
                LINE ((adx - 31), (a2y - 12))-((adx - 31), (a2y - 24)), dlcolor
                LINE STEP(0, 0)-((adx - 37), (a2y - 18)), dlcolor
                LINE STEP(0, 0)-((adx - 37), (a2y - 24)), dlcolor
                LINE STEP(0, 0)-((adx - 43), (a2y - 18)), dlcolor
                LINE STEP(0, 0)-((adx - 37), (a2y - 12)), dlcolor
                LINE STEP(0, 0)-((adx - 37), (a2y - 18)), dlcolor
                LINE STEP(0, 0)-((adx - 31), (a2y - 12)), dlcolor
                PAINT ((adx - 32), (a2y - 18)), dlcolor, dlcolor
                PAINT ((adx - 42), (a2y - 18)), dlcolor, dlcolor
                LINE ((41 + adx), (a2y - 2))-((73 + adx), (a2y - 2)), buttoncolor
                LINE ((54 + adx), (a2y - 26))-((73 + adx), (a2y - 26)), buttoncolor
                CIRCLE ((72 + adx), (a2y - 14)), 12, buttoncolor, ((3 * pi) / 2), (pi / 2)
                PAINT STEP(0, 0), srfillcolor, buttoncolor
                LINE ((62 + adx), (a2y - 14))-((62 + adx), (a2y - 19)), srcolor
                LINE STEP(0, 0)-((67 + adx), (a2y - 14)), srcolor
                LINE STEP(0, 0)-((67 + adx), (a2y - 19)), srcolor
                LINE STEP(0, 0)-((69 + adx), (a2y - 19)), srcolor
                LINE STEP(0, 0)-((69 + adx), (a2y - 9)), srcolor
                LINE STEP(0, 0)-((67 + adx), (a2y - 9)), srcolor
                LINE STEP(0, 0)-((67 + adx), (a2y - 14)), srcolor
                LINE STEP(0, 0)-((62 + adx), (a2y - 9)), srcolor
                LINE STEP(0, 0)-((62 + adx), (a2y - 14)), srcolor
                PAINT ((63 + adx), (a2y - 14)), srcolor, srcolor
                PAINT ((68 + adx), (a2y - 14)), srcolor, srcolor
                LINE (((adx - 41)), (a2y - 2))-(((adx - 73)), (a2y - 2)), buttoncolor
                LINE (((adx - 54)), (a2y - 26))-(((adx - 73)), (a2y - 26)), buttoncolor
                CIRCLE (((adx - 72)), (a2y - 14)), 12, buttoncolor, (pi / 2), ((3 * pi) / 2)
                PAINT STEP(0, 0), slfillcolor, buttoncolor
                LINE ((adx - 62), (a2y - 14))-((adx - 62), (a2y - 19)), slcolor
                LINE STEP(0, 0)-((adx - 67), (a2y - 14)), slcolor
                LINE STEP(0, 0)-((adx - 67), (a2y - 19)), slcolor
                LINE STEP(0, 0)-((adx - 69), (a2y - 19)), slcolor
                LINE STEP(0, 0)-((adx - 69), (a2y - 9)), slcolor
                LINE STEP(0, 0)-((adx - 67), (a2y - 9)), slcolor
                LINE STEP(0, 0)-((adx - 67), (a2y - 14)), slcolor
                LINE STEP(0, 0)-((adx - 62), (a2y - 9)), slcolor
                LINE STEP(0, 0)-((adx - 62), (a2y - 14)), slcolor
                PAINT ((adx - 63), (a2y - 14)), slcolor, slcolor
                PAINT ((adx - 68), (a2y - 14)), slcolor, slcolor
                CIRCLE (((adx - 133)), (a2y - 24)), 18, buttoncolor
                PAINT STEP(0, 0), stopfillcolor, buttoncolor
                LINE (((adx - 125)), (a2y - 16))-(((adx - 141)), (a2y - 32)), stopcolor, B
                PAINT (((adx - 133)), (a2y - 24)), stopcolor, stopcolor
                LINE ((101 + adx), (a2y - 36))-((149 + adx), (a2y - 36)), buttoncolor
                LINE ((101 + adx), (a2y - 12))-((149 + adx), (a2y - 12)), buttoncolor
                CIRCLE ((102 + adx), (a2y - 24)), 12, buttoncolor, (pi / 2), ((3 * pi) / 2)
                CIRCLE ((148 + adx), (a2y - 24)), 12, buttoncolor, ((3 * pi) / 2), (pi / 2)
                PAINT STEP(0, 0), buttonfill, buttoncolor
                LINE ((104 + adx), (a2y - 24))-((104 + adx), (a2y - 28)), volcolor
                LINE STEP(0, 0)-((106 + adx), (a2y - 28)), volcolor
                LINE STEP(0, 0)-((112 + adx), (a2y - 32)), volcolor
                LINE STEP(0, 0)-((112 + adx), (a2y - 16)), volcolor
                LINE STEP(0, 0)-((106 + adx), (a2y - 20)), volcolor
                LINE STEP(0, 0)-((104 + adx), (a2y - 20)), volcolor
                LINE STEP(0, 0)-((104 + adx), (a2y - 24)), volcolor
                IF mute = 0 THEN PAINT ((105 + adx), (a2y - 24)), volcolor, volcolor
                IF muting = 1 THEN PAINT ((105 + adx), (a2y - 24)), volcolor, volcolor
                LINE ((114 + adx), (a2y - 20))-((150 + adx), (a2y - 20)), volboxcolor
                LINE STEP(0, 0)-((150 + adx), (a2y - 32)), volboxcolor
                LINE STEP(0, 0)-((114 + adx), (a2y - 20)), volboxcolor
                IF donevoltrig = 0 THEN
                    donevoltrig = 1
                    volslant = SQR(((150 - 114) ^ 2) + ((32 - 20) ^ 2))
                    sinfind = ((1 / volslant) * (32 - 20))
                    volangle = ATN(sinfind / SQR(1 - (sinfind ^ 2)))
                END IF
                volline = (volslant * sndvol#)
                volx = INT((COS(volangle) * volline))
                voly = INT((SIN(volangle) * volline))
                PAINT ((123 + adx), (a2y - 21)), volboxfillcolora, volboxcolor
                IF sndvol# < .08 THEN
                    LINE ((114 + adx + volx), (a2y - 20))-((114 + adx + volx), (a2y - 20 - voly)), volboxcolor
                ELSE
                    LINE ((114 + adx + volx), (a2y - 20))-((114 + adx + volx), (a2y - 20 - voly)), volboxcolor
                    PAINT ((114 + adx + volx - 1), (a2y - 20 - (voly / 2))), volboxfillcolorb, volboxcolor
                END IF
                GOSUB trunkdata
                tagdata$ = title$
                LINE ((a1x - 2), (a1y + 8))-((a2x + 2), (a1y + 26)), tboxcolor, B
                PAINT ((a1x + 1), (a1y + 11)), tboxfill, tboxcolor
                COLOR color1
                _PRINTSTRING (a1x, (a1y + 10)), tagdata$
                minutes = INT((length / 60))
                minutes$ = STR$(minutes)
                minutes$ = LTRIM$(minutes$)
                seconds = INT((length - (minutes * 60)))
                seconds$ = STR$(seconds)
                seconds$ = LTRIM$(seconds$)
                digitseconds = LEN(seconds$)
                IF digitseconds = 1 THEN seconds$ = "0" + seconds$
                IF songloc = 0 THEN
                    IF clickpbar = 0 THEN
                        position = _SNDGETPOS(audio&)
                    ELSE
                        IF length > 0 THEN position = INT((((pbarx - a1x) / (a2x - a1x)) * length))
                    END IF
                ELSE
                    position = songloc
                END IF
                position = ABS(position)
                playingminutes = INT((position / 60))
                playingminutes$ = STR$(playingminutes)
                playingminutes$ = LTRIM$(playingminutes$)
                playingseconds = INT((position - (playingminutes * 60)))
                playingseconds$ = STR$(playingseconds)
                playingseconds$ = LTRIM$(playingseconds$)
                playingdigitseconds = LEN(playingseconds$)
                IF playingdigitseconds = 1 THEN playingseconds$ = "0" + playingseconds$
                IF length > 0 THEN percplay = position / length
                timeplay$ = playingminutes$ + ":" + playingseconds$
                songlen$ = minutes$ + ":" + seconds$
                COLOR color1
                _PRINTSTRING ((a1x - ((LEN(timeplay$) * 8) + 3)), (((a2y - a1y) - 16) / 2)), timeplay$
                _PRINTSTRING ((a2x + 3), (((a2y - a1y) - 16) / 2)), songlen$
                IF art& < -1 AND showart THEN
                    viewtype = viewtype + 1
                    IF album$ > "" THEN
                        room = INT(((b2x - b1x) / 8)) - 2
                        IF LEN(album$) <= room THEN
                            dispalbum$ = album$
                            IF year$ > "" AND ticker&(7) MOD 2 = 0 THEN dispalbum$ = year$
                        ELSE
                            dispalbum$ = album$
                            IF year$ > "" THEN dispalbum$ = dispalbum$ + " [" + year$ + "]"
                            dispalbum$ = dispalbum$ + SPACE$(INT((room / 2)))
                            aticker = ticker&(2) MOD LEN(dispalbum$)
                            IF aticker = 0 THEN aticker = LEN(dispalbum$)
                            makedispalbum$ = ""
                            FOR makedispalbum = aticker TO (aticker + room)
                                IF makedispalbum > LEN(dispalbum$) THEN makedispalbum$ = makedispalbum$ + MID$(dispalbum$, (makedispalbum - LEN(dispalbum$)), 1)
                                makedispalbum$ = makedispalbum$ + MID$(dispalbum$, makedispalbum, 1)
                            NEXT makedispalbum
                            dispalbum$ = makedispalbum$
                        END IF
                        COLOR color4
                        _PRINTSTRING ((b1x + (((b2x - b1x) - (LEN(dispalbum$) * 8)) / 2)), b1y - 16), dispalbum$
                    END IF
                    _PUTIMAGE (ba1x, ba1y)-(ba2x, ba2y), art&
                    IF clickmaxart = 1 THEN
                        LINE (b1x, b1y)-(b2x, b2y), highlightcolor, B
                    ELSE
                        LINE (b1x, b1y)-(b2x, b2y), boxcolor, B
                    END IF
                END IF
                IF plst$ > "" AND showplst THEN
                    viewtype = viewtype + 2
                    room = INT(((c2x - c1x) / 8)) - 12
                    IF LEN(plst$) <= room THEN
                        dispplst$ = plst$
                    ELSE
                        dispplst$ = plst$ + SPACE$(INT((room / 4)))
                        aticker = ticker&(2) MOD LEN(dispplst$)
                        aticker = ticker&(2) MOD LEN(dispplst$)
                        makedispplst$ = ""
                        FOR makedispplst = aticker TO (aticker + room)
                            IF makedispplst > LEN(dispplst$) THEN makedispplst$ = makedispplst$ + MID$(dispplst$, (makedispplst - LEN(dispplst$)), 1)
                            makedispplst$ = makedispplst$ + MID$(dispplst$, makedispplst, 1)
                        NEXT makedispplst
                        dispplst$ = makedispplst$
                    END IF
                    COLOR color4
                    _PRINTSTRING ((c1x + (((c2x - c1x) - (LEN(dispplst$) * 8)) / 2)), (c1y - 16)), dispplst$
                    IF plstactive = 1 THEN
                        LINE (c1x, c1y)-(c2x, c2y), highlightcolor, B
                    ELSE
                        LINE (c1x, c1y)-(c2x, c2y), boxcolor, B
                    END IF
                    IF songs > 6 THEN
                        IF clickplstbar = 0 THEN
                            startplstbar = plstrow
                            IF song <= plstrow + 6 AND changedplstbar = 0 THEN startplstbar = song
                            plstbary = c1y + ((startplstbar / (songs - 5)) * (c2y - (c1y + 8)))
                            IF startplstbar = songs THEN plstbary = plstbary - 1
                        END IF
                        IF plstbary < (c1y + 10) THEN plstbary = (c1y + 10)
                        IF plstbary > (c2y - 10) THEN plstbary = (c2y - 10)
                        IF startplstbar = 1 THEN plstbary = (c1y + 10)
                        IF startplstbar = songs THEN plstbary = (c2y - 10)
                        IF plstactive = 1 THEN
                            LINE ((c2x - 10), c1y)-((c2x - 10), c2y), highlightcolor
                        ELSE
                            LINE ((c2x - 10), c1y)-((c2x - 10), c2y), boxcolor
                        END IF
                        LINE ((c2x - 8), (plstbary - 8))-((c2x - 2), (plstbary + 8)), boxcolor, BF
                        LINE ((c2x - 8), (plstbary))-((c2x - 2), plstbary), linecolor
                    END IF
                    IF startplst <> oldstartplst THEN
                        REDIM plstdisp$(6)
                        REDIM plstdisp(6)
                        plstdispcount = 0
                        IF songs >= 6 THEN
                            IF startplst > 0 THEN
                                SELECT CASE startplst
                                    CASE 1
                                        plstrow = startplst
                                    CASE 2
                                        plstrow = (startplst - 1)
                                    CASE (songs - 2)
                                        plstrow = (startplst - 3)
                                    CASE (songs - 1)
                                        plstrow = (startplst - 4)
                                    CASE songs
                                        plstrow = (startplst - 5)
                                    CASE ELSE
                                        plstrow = (startplst - 2)
                                END SELECT
                                startplst = 0
                            END IF
                            plstrower = plstrow
                            IF plstrower > (songs - 5) THEN plstrower = (songs - 5)
                            FOR plstdispmake = plstrower TO (plstrower + 5)
                                plstdispcount = plstdispcount + 1
                                plstdisp$(plstdispcount) = plstname$(plstdispmake)
                                plstdisp(plstdispcount) = plstdispmake
                            NEXT plstdispmake
                        ELSE
                            plstrow = 1
                            FOR plstdispmake = 1 TO songs
                                plstdisp$(plstdispcount) = plstname$(plstdispmake)
                                plstdisp(plstdispmake) = plstdispmake
                            NEXT plstdispmake
                        END IF
                    END IF
                    oldstartplst = startplst
                    FOR printplst = 1 TO 6
                        plstsong$ = plstdisp$(printplst)
                        room = INT((((c2x - c1x) - 14) / 8)) - 1
                        dispplstsong$ = plstsong$
                        IF LEN(dispplstsong$) > room THEN
                            IF selected = plstdisp(printplst) THEN
                                dispplstsong$ = dispplstsong$ + SPACE$(INT((room / 4)))
                                pticker = ticker&(2) MOD LEN(dispplstsong$)
                                IF pticker = 0 THEN pticker = LEN(dispplstsong$)
                                makedispplstsong$ = ""
                                FOR makedispplstsong = pticker TO (pticker + room)
                                    IF makedispplstsong > LEN(dispplstsong$) THEN makedispplstsong$ = makedispplstsong$ + MID$(dispplstsong$, (makedispplstsong - LEN(dispplstsong$)), 1)
                                    makedispplstsong$ = makedispplstsong$ + MID$(dispplstsong$, makedispplstsong, 1)
                                NEXT makedispplstsong
                                dispplstsong$ = makedispplstsong$
                            ELSE
                                dispplstsong$ = MID$(dispplstsong$, 1, (INT((((c2x - c1x) - 14) / 8)) - 3)) + "..."
                            END IF
                        END IF
                        IF selected = plstdisp(printplst) THEN
                            COLOR color4
                        ELSE
                            COLOR color2
                        END IF
                        _PRINTSTRING ((c1x + 4), (c1y + 4 + (16 * (printplst - 1)))), dispplstsong$
                    NEXT printplst
                    LINE (c1x, (c1y - 1))-((c1x + 34), (c1y - 17)), boxcolor, B
                    LINE ((c1x + 17), (c1y - 17))-((c1x + 17), (c1y - 1)), boxcolor
                    PAINT ((c1x + 8), (c1y - 8)), shufflefillcolor, boxcolor
                    LINE ((c1x + 2), (c1y - 13))-((c1x + 4), (c1y - 15)), shufflecolor
                    LINE STEP(0, 0)-((c1x + 8), (c1y - 11)), shufflecolor
                    LINE STEP(0, 0)-((c1x + 10), (c1y - 14)), shufflecolor
                    LINE STEP(0, 0)-((c1x + 9), (c1y - 15)), shufflecolor
                    LINE STEP(0, 0)-((c1x + 13), (c1y - 15)), shufflecolor
                    LINE STEP(0, 0)-((c1x + 13), (c1y - 11)), shufflecolor
                    LINE STEP(0, 0)-((c1x + 12), (c1y - 12)), shufflecolor
                    LINE STEP(0, 0)-((c1x + 9), (c1y - 9)), shufflecolor
                    LINE STEP(0, 0)-((c1x + 12), (c1y - 6)), shufflecolor
                    LINE STEP(0, 0)-((c1x + 13), (c1y - 7)), shufflecolor
                    LINE STEP(0, 0)-((c1x + 13), (c1y - 3)), shufflecolor
                    LINE STEP(0, 0)-((c1x + 9), (c1y - 3)), shufflecolor
                    LINE STEP(0, 0)-((c1x + 10), (c1y - 4)), shufflecolor
                    LINE STEP(0, 0)-((c1x + 7), (c1y - 7)), shufflecolor
                    LINE STEP(0, 0)-((c1x + 4), (c1y - 3)), shufflecolor
                    LINE STEP(0, 0)-((c1x + 2), (c1y - 5)), shufflecolor
                    LINE STEP(0, 0)-((c1x + 6), (c1y - 9)), shufflecolor
                    LINE STEP(0, 0)-((c1x + 2), (c1y - 13)), shufflecolor
                    IF shuffle = 1 THEN PAINT ((c1x + 8), (c1y - 8)), shufflecolor, shufflecolor
                    PAINT ((c1x + 26), (c1y - 9)), repeatfillcolor, boxcolor
                    CIRCLE ((c1x + 26), (c1y - 9)), 5, repeatcolor, ((3 * pi) / 2), pi
                    CIRCLE ((c1x + 26), (c1y - 9)), 3, repeatcolor, ((3 * pi) / 2), pi
                    LINE (((c1x + 26) - 5), (c1y - 9))-(((c1x + 26) - 3), (c1y - 9)), repeatcolor
                    LINE ((c1x + 27), ((c1y - 9) + 3))-((c1x + 27), ((c1y - 9) + 1)), repeatcolor
                    LINE STEP(0, 0)-((c1x + 23), ((c1y - 9) + 4)), repeatcolor
                    LINE STEP(0, 0)-((c1x + 27), ((c1y - 9) + 7)), repeatcolor
                    LINE STEP(0, 0)-((c1x + 27), ((c1y - 9) + 5)), repeatcolor
                    IF repeat = 1 AND clickrepeat = 0 THEN PAINT ((c1x + 26), ((c1y - 9) + 5)), repeatcolor, repeatcolor
                END IF
            ELSE
                IF art& < -1 THEN
                    IF oldartmax = 0 THEN
                        screenx = _WIDTH(art&) + 60
                        screeny = _HEIGHT(art&) + 60
                        SCREEN _NEWIMAGE(screenx, screeny)
                        oldartmax = 1
                    END IF
                    _PUTIMAGE (30, 30), art&
                    LINE (20, 20)-((screenx - 20), (screeny - 20)), highlightcolor, B
                    COLOR color4
                    room = INT(((_WIDTH(art&) - 16) / 8))
                    IF album$ > "" THEN
                        IF LEN(album$) > room THEN
                            dispalbum$ = album$
                            dispalbum$ = dispalbum$ + SPACE$(INT((room / 4)))
                            aticker = ticker&(2) MOD LEN(dispalbum$)
                            IF aticker = 0 THEN aticker = LEN(dispalbum$)
                            makedispalbum$ = ""
                            FOR makedispalbum = aticker TO (aticker + room)
                                IF makedispalbum > LEN(dispalbum$) THEN makedispalbum$ = makedispalbum$ + MID$(dispalbum$, (makedispalbum - LEN(dispalbum$)), 1)
                                makedispalbum$ = makedispalbum$ + MID$(dispalbum$, makedispalbum, 1)
                            NEXT makedispalbum
                            dispalbum$ = makedispalbum$
                        ELSE
                            dispalbum$ = album$
                        END IF
                        _PRINTSTRING ((28 + (((_WIDTH(art&) - 2) - (LEN(dispalbum$) * 8)) / 2)), 2), dispalbum$
                    END IF
                    IF year$ > "" THEN
                        _PRINTSTRING ((28 + (((_WIDTH(art&) - 2) - (LEN(year$) * 8)) / 2)), (screeny - 18)), year$
                    END IF
                    _DISPLAY
                ELSE
                    artmax = 0
                END IF
            END IF
            playing = _SNDPLAYING(audio&)
            DO
                SELECT CASE playing
                    CASE 0
                        IF _SNDPAUSED(audio&) = 0 THEN
                            'changesong = 1
                            'song = song + 1
                            '_SNDSTOP audio&
                            '_SNDCLOSE audio&
                        END IF
                    CASE ELSE
                        IF mute THEN sndvol# = 0
                        IF sndvol# < 0 THEN sndvol# = 0
                        IF sndvol# > 1 THEN sndvol# = 1
                        _SNDVOL audio&, sndvol#
                END SELECT
                EXIT DO
            LOOP
            k$ = INKEY$
            IF _KEYDOWN(27) THEN
                IF artmax = 1 THEN
                    artmax = 0
                    closingmaxart = 1
                ELSE
                    IF closingmaxart = 0 THEN
                        pressesc = 1
                        stopcolor = stopclick
                        stopfillcolor = stopfillclick
                    END IF
                END IF
            ELSE
                IF pressesc = 1 THEN GOSUB standby
                pressesc = 0
                closingmaxart = 0
            END IF
            IF _KEYDOWN(32) THEN
                IF pressedspc = 0 THEN
                    arrowcolor = arrowclick
                    barcolor = barclick
                    ppfillcolor = ppfillclick
                END IF
                pressedspc = 1
            ELSE
                IF pressedspc = 1 THEN
                    arrowcolor = oarrowcolor
                    barcolor = obarcolor
                    ppfillcolor = oppfillcolor
                    SELECT CASE paused
                        CASE 0
                            paused = 1
                            _SNDPAUSE audio&
                        CASE 1
                            paused = 0
                            _SNDPLAY audio&
                    END SELECT
                END IF
                pressedspc = 0
            END IF
            IF UCASE$(k$) = CHR$(65) THEN
                SELECT CASE showart
                    CASE 0
                        showart = 1
                    CASE 1
                        showart = 0
                END SELECT
            END IF
            IF UCASE$(k$) = CHR$(76) THEN
                SELECT CASE looping
                    CASE 0
                        looping = 1
                    CASE 1
                        looping = 0
                END SELECT
            END IF
            IF UCASE$(k$) = CHR$(80) THEN
                SELECT CASE showplst
                    CASE 0
                        showplst = 1
                    CASE 1
                        showplst = 0
                END SELECT
            END IF
            IF _KEYDOWN(82) OR _KEYDOWN(114) THEN
                pressrepeat = 1
                IF pressrepeat = 1 THEN clickrepeat = 1
                oldpressrepeat = 1
            ELSE
                pressrepeat = 0
                IF oldpressrepeat = 1 AND pressrepeat = 0 THEN
                    clickrepeat = 0
                    SELECT CASE repeat
                        CASE 0
                            repeat = 1
                        CASE 1
                            repeat = 0
                    END SELECT
                    REDIM repeat(songs)
                END IF
                oldpressrepeat = 0
            END IF
            IF _KEYDOWN(83) OR _KEYDOWN(115) THEN
                pressshuffle = 1
                IF pressshuffle = 1 THEN clickshuffle = 1
                oldpressshuffle = 1
            ELSE
                pressshuffle = 0
                IF oldpressshuffle = 1 AND pressshuffle = 0 THEN
                    clickshuffle = 0
                    SELECT CASE shuffle
                        CASE 0
                            shuffle = 1
                            changesong = 1
                            _SNDSTOP audio&
                            _SNDCLOSE audio&
                        CASE 1
                            shuffle = 0
                    END SELECT
                    REDIM repeat(songs)
                END IF
                oldpressshuffle = 0
            END IF
            IF _KEYDOWN(CVI(CHR$(0) + CHR$(72))) THEN
                sndvol# = sndvol# + .0078125
                IF sndvol# > 1 THEN sndvol# = 1
            END IF
            IF _KEYDOWN(CVI(CHR$(0) + CHR$(75))) THEN
                pressedl = 1
                slcolor = slclick
                slfillcolor = slfillclick
                IF TIMER - lpress > 1 THEN
                    IF INT(_SNDGETPOS(audio&)) - 2 > 1 THEN
                        IF songloc = 0 THEN songloc = _SNDGETPOS(audio&)
                        dlcolor = dlclick
                        dlfillcolor = dlfillclick
                        slcolor = oslcolor
                        slfillcolor = oslfillcolor
                        songloc = songloc - 1
                        IF songloc <= 1 THEN
                            songloc = 0
                            song = song - 1
                            changesong = 1
                            _SNDSTOP audio&
                            _SNDCLOSE audio&
                        END IF
                    ELSE
                        song = song - 1
                        changesong = 1
                        _SNDSTOP audio&
                        _SNDCLOSE audio&
                    END IF
                END IF
            ELSE
                gob = 0
                IF clicksl = 0 THEN
                    slcolor = oslcolor
                    slfillcolor = oslfillcolor
                END IF
                IF pressedl = 1 AND TIMER - lpress <= 1 THEN
                    song = song - 1
                    changesong = 1
                    _SNDSTOP audio&
                    _SNDCLOSE audio&
                END IF
                IF pressedl = 1 AND songloc > 0 THEN
                    dlcolor = odlcolor
                    dlfillcolor = odlfillcolor
                    _SNDSETPOS audio&, songloc
                    songloc = 0
                END IF
                pressedl = 0
                lpress = TIMER
            END IF
            IF _KEYDOWN(CVI(CHR$(0) + CHR$(77))) THEN
                pressedr = 1
                srcolor = srclick
                srfillcolor = srfillclick
                IF TIMER - rpress > 1 THEN
                    IF (INT(_SNDGETPOS(audio&)) + 2) < (length - 1) THEN
                        IF songloc = 0 THEN songloc = _SNDGETPOS(audio&)
                        drcolor = drclick
                        drfillcolor = drfillclick
                        srcolor = osrcolor
                        srfillcolor = osrfillcolor
                        songloc = songloc + 1
                        IF songloc >= (length - 1) THEN
                            songloc = 0
                            song = song + 1
                            changesong = 1
                            _SNDSTOP audio&
                            _SNDCLOSE audio&
                        END IF
                    ELSE
                        song = song + 1
                        changesong = 1
                        _SNDSTOP audio&
                        _SNDCLOSE audio&
                    END IF
                END IF
            ELSE
                gof = 0
                IF clicksr = 0 THEN
                    srcolor = osrcolor
                    srfillcolor = osrfillcolor
                END IF
                IF pressedr = 1 AND TIMER - rpress <= 1 THEN
                    song = song + 1
                    changesong = 1
                    _SNDSTOP audio&
                    _SNDCLOSE audio&
                END IF
                IF pressedr = 1 AND songloc > 0 THEN
                    drcolor = odrcolor
                    drfillcolor = odrfillcolor
                    _SNDSETPOS audio&, songloc
                    songloc = 0
                END IF
                pressedr = 0
                rpress = TIMER
            END IF
            IF _KEYDOWN(CVI(CHR$(0) + CHR$(80))) THEN
                sndvol# = sndvol# - .0078125
                IF sndvol# < 0 THEN sndvol# = 0
            END IF
            DO
                click = _MOUSEBUTTON(1)
                IF click = 0 THEN justcs = 0
                x = _MOUSEX
                y = _MOUSEY
                IF click = -1 AND oldclick = 0 AND justcs = 0 THEN
                    IF artmax = 1 THEN exitmaxart = 1
                    IF x >= b1x AND x <= b2x AND y >= b1y AND y <= b2y THEN clickmaxart = 1
                    IF artmax = 0 THEN
                        IF plstactive = 1 AND (x >= c1x AND x <= (c2x - 10) AND y >= c1y AND y <= c2y) THEN
                            songclick = INT(((y - c1y) / 16))
                            songclicked = 1
                        END IF
                        IF x >= c1x AND x <= (c2x - 10) AND y >= c1y AND y <= c2y THEN
                            plstactive = 1
                        ELSE
                            plstactive = 0
                        END IF
                        IF x >= (c2x - 10) AND x <= c2x AND y >= c1y AND y <= c2y THEN clickplstbar = 1
                        IF x >= (a1x + 5) AND x <= (a2x - 5) AND y >= (acy - 13) AND y <= (acy - 3) THEN clickpbar = 1
                        IF x >= (114 + adx) AND x <= (150 + adx) AND y >= (a2y - 36) AND y <= (a2y - 12) THEN clickvbar = 1
                        IF dis((a1x + (INT((a2x - a1x) / 2))), (a2y - 26), x, y) <= 24 THEN
                            clickedpp = 1
                            arrowcolor = arrowclick
                            barcolor = barclick
                            ppfillcolor = ppfillclick
                        END IF
                        IF dis(((adx - 133)), (a2y - 24), x, y) <= 18 THEN
                            clickstop = 1
                            stopcolor = stopclick
                            stopfillcolor = stopfillclick
                        END IF
                        IF clickedpp = 0 AND ((x >= adx AND x <= (41 + adx) AND y >= (a2y - 34) AND y <= (a2y - 2)) OR (dis((40 + adx), (a2y - 18), x, y) <= 16)) AND dis(((adx - 133)), (a2y - 24), x, y) > 18 THEN
                            clickdr = 1
                            drcolor = drclick
                            drfillcolor = drfillclick
                        END IF
                        IF clickedpp = 0 AND ((x >= (adx - 41) AND x <= adx AND y >= (a2y - 34) AND y <= (a2y - 2)) OR (dis((adx - 40), (a2y - 18), x, y) <= 16)) AND dis((adx - 133), (a2y - 24), x, y) > 18 THEN
                            clickdl = 1
                            dlcolor = dlclick
                            dlfillcolor = dlfillclick
                        END IF
                        IF clickdr = 0 AND ((x >= (41 + adx) AND x <= (73 + adx) AND y >= (a2y - 26) AND y <= (a2y - 2)) OR (dis((72 + adx), (a2y - 14), x, y) <= 12)) AND dis((40 + adx), (a2y - 18), x, y) > 16 THEN
                            clicksr = 1
                            srcolor = srclick
                            srfillcolor = srfillclick
                        END IF
                        IF clickdl = 0 AND ((x >= (adx - 73) AND x <= (adx - 41) AND y >= (a2y - 26) AND y <= (a2y - 2)) OR (dis((adx - 72), (a2y - 14), x, y) <= 12)) AND dis((adx - 40), (a2y - 18), x, y) > 16 THEN
                            clicksl = 1
                            slcolor = slclick
                            slfillcolor = slfillclick
                        END IF
                        IF (x >= (104 + adx) AND x <= (112 + adx) AND y >= (a2y - 32) AND y <= (a2y - 16)) THEN
                            clickvol = 1
                            volcolor = volclick
                            muting = 1
                        END IF
                        IF x >= c1x AND x <= (c1x + 16) AND y >= (c1y - 16) AND y <= (c1y - 1) THEN clickshuffle = 1
                        IF x >= (c1x + 17) AND x <= (c1x + 34) AND y >= (c1y - 16) AND y <= (c1y - 1) THEN clickrepeat = 1
                    END IF
                END IF
                IF click = -1 AND oldclick = -1 THEN
                    IF songclick > 0 AND (x < c1x OR x > (c2x - 10) OR y < c1y OR y > c2y) THEN
                        checksongclick = INT(((y - c1y) / 16))
                        IF songclick <> checksongclick THEN songclick = 0
                        songclicked = 0
                    END IF
                    IF clickplstbar = 1 THEN
                        plstbary = y
                        IF plstbary < (c1y + 10) THEN plstbary = (c1y + 10)
                        IF plstbary > (c2y - 10) THEN plstbary = (c2y - 10)
                        plstrow = INT(((plstbary - (c1y + 10)) / (((c2y - 8) - (c1y + 8)) / songs))) + 1
                        REDIM plstdisp$(6)
                        REDIM plstdisp(6)
                        plstdispcount = 0
                        IF songs >= 6 THEN
                            IF startplst > 0 THEN
                                SELECT CASE startplst
                                    CASE 1
                                        plstrow = startplst
                                    CASE 2
                                        plstrow = (startplst - 1)
                                    CASE (songs - 2)
                                        plstrow = (startplst - 3)
                                    CASE (songs - 1)
                                        plstrow = (startplst - 4)
                                    CASE songs
                                        plstrow = (startplst - 5)
                                    CASE ELSE
                                        plstrow = (startplst - 2)
                                END SELECT
                                startplst = 0
                            END IF
                            plstrower = plstrow
                            IF plstrower > (songs - 5) THEN plstrower = (songs - 5)
                            FOR plstdispmake = plstrower TO (plstrower + 5)
                                plstdispcount = plstdispcount + 1
                                plstdisp$(plstdispcount) = plstname$(plstdispmake)
                                plstdisp(plstdispcount) = plstdispmake
                            NEXT plstdispmake
                        ELSE
                            plstrow = 1
                            FOR plstdispmake = 1 TO songs
                                plstdisp$(plstdispcount) = plstname$(plstdispmake)
                                plstdisp(plstdispmake) = plstdispmake
                            NEXT plstdispmake
                        END IF
                        changedplstbar = 1
                    END IF
                    IF clickmaxart = 1 AND (x < b1x OR x > b2x OR y < b1y OR y > b2y) THEN clickmaxart = 0
                    IF clickpbar = 1 THEN
                        pbarx = x
                        IF pbarx < (a1x + 5) THEN pbarx = (a1x + 5)
                        IF pbarx > (a2x - 5) THEN pbarx = (a2x - 5)
                        FOR blopdraw = 5 TO 1 STEP -1
                            CIRCLE (pbarx, (acy - 8)), blopdraw, color1
                        NEXT blopdraw
                    END IF
                    IF clickvbar = 1 THEN
                        vbarx = x
                        IF vbarx < (114 + adx) THEN vbarx = (114 + adx)
                        IF vbarx > (150 + adx) THEN vbarx = (150 + adx)
                        sndvol# = ((vbarx - (114 + adx)) / ((150 + adx) - (114 + adx)))
                    END IF
                    IF clickedpp = 1 AND dis((a1x + (INT((a2x - a1x) / 2))), (a2y - 26), x, y) > 24 THEN
                        clickedpp = 0
                        arrowcolor = oarrowcolor
                        barcolor = obarcolor
                        ppfillcolor = oppfillcolor
                    END IF
                    IF clickstop = 1 AND dis((adx - 133), (a2y - 24), x, y) > 18 THEN
                        clickstop = 0
                        stopcolor = ostopcolor
                        stopfillcolor = ostopfillcolor
                    END IF
                    IF clickdr = 1 AND (((x < adx OR x > (41 + adx) OR y < (a2y - 34) OR y > (a2y - 2)) AND dis((40 + adx), (a2y - 18), x, y) > 16) OR dis((a1x + (INT((a2x - a1x) / 2))), (a2y - 26), x, y) <= 24) THEN
                        clickdr = 0
                        songloc = 0
                        drcolor = odrcolor
                        drfillcolor = odrfillcolor
                    END IF
                    IF clickdl = 1 AND (((x < (adx - 41) OR x > adx OR y < (a2y - 34) OR y > (a2y - 2)) AND dis((adx - 40), (a2y - 18), x, y) > 16) OR dis((a1x + (INT((a2x - a1x) / 2))), (a2y - 26), x, y) <= 24) THEN
                        clickdl = 0
                        songloc = 0
                        dlcolor = odlcolor
                        dlfillcolor = odlfillcolor
                    END IF
                    IF clicksr = 1 AND (((x < (41 + adx) OR x > (73 + adx) OR y < (a2y - 26) OR y > (a2y - 2)) AND (dis((72 + adx), (a2y - 14), x, y) > 12)) OR dis((40 + adx), (a2y - 18), x, y) <= 16) THEN
                        clicksr = 0
                        srcolor = osrcolor
                        srfillcolor = osrfillcolor
                    END IF
                    IF clicksl = 1 AND (((x < (adx - 73) OR x > (adx - 41) OR y < (a2y - 26) OR y > (a2y - 2)) AND (dis((adx - 72), (a2y - 14), x, y) > 12)) OR dis((adx - 40), (a2y - 18), x, y) <= 16) THEN
                        clicksl = 0
                        slcolor = oslcolor
                        slfillcolor = oslfillcolor
                    END IF
                    IF clickvol = 1 AND (x < (104 + adx) OR x > (112 + adx) OR y < (a2y - 32) OR y > (a2y - 16)) THEN
                        clickvol = 0
                        volcolor = ovolcolor
                        muting = 0
                    END IF
                    IF clickdr = 1 THEN
                        IF songloc = 0 THEN songloc = _SNDGETPOS(audio&)
                        songloc = songloc + 1
                        IF songloc >= (length - 1) THEN
                            songloc = 0
                            song = song + 1
                            changesong = 1
                            _SNDSTOP audio&
                            _SNDCLOSE audio&
                        END IF
                    END IF
                    IF clickdl = 1 THEN
                        IF songloc = 0 THEN songloc = _SNDGETPOS(audio&)
                        songloc = songloc - 1
                        IF songloc <= 1 THEN
                            songloc = 0
                            song = song - 1
                            changesong = 1
                            _SNDSTOP audio&
                            _SNDCLOSE audio&
                        END IF
                    END IF
                    IF x < c1x OR x > (c1x + 16) OR y < (c1y - 16) OR y > (c1y - 1) THEN clickshuffle = 0
                    IF x < (c1x + 17) OR x > (c1x + 34) OR y < (c1y - 17) OR y > (c1y - 1) THEN clickrepeat = 0
                END IF
                IF click = 0 AND oldclick = -1 THEN
                    IF songclicked = 1 THEN
                        _SNDSTOP audio&
                        _SNDCLOSE audio&
                        song = plstrow + songclick
                        changesong = 1
                        changesongclick = 1
                        songclick = 0
                    END IF
                    IF clickplstbar = 1 THEN clickplstbar = 0
                    IF clickmaxart = 1 THEN
                        artmax = 1
                        oldartmax = 0
                        clickmaxart = 0
                    END IF
                    IF exitmaxart = 1 THEN
                        artmax = 0
                        exitmaxart = 0
                    END IF
                    IF clickpbar = 1 THEN
                        clickpbar = 0
                        IF length > 0 THEN newpos = INT((((pbarx - a1x) / (a2x - a1x)) * length))
                        _SNDSETPOS audio&, newpos
                    END IF
                    IF clickvbar = 1 THEN clickvbar = 0
                    IF clickedpp = 1 THEN
                        clickedpp = 0
                        arrowcolor = oarrowcolor
                        barcolor = obarcolor
                        ppfillcolor = oppfillcolor
                        SELECT CASE paused
                            CASE 0
                                paused = 1
                                _SNDPAUSE audio&
                            CASE 1
                                paused = 0
                                _SNDPLAY audio&
                        END SELECT
                    END IF
                    IF clickstop = 1 THEN
                        clickstop = 0
                        stopcolor = ostopcolor
                        stopfillcolor = ostopfillcolor
                        GOSUB standby
                    END IF
                    IF clickdr = 1 THEN
                        clickdr = 0
                        drcolor = odrcolor
                        drfillcolor = odrfillcolor
                        IF songloc > 0 THEN
                            _SNDSETPOS audio&, songloc
                            songloc = 0
                        END IF
                    END IF
                    IF clickdl = 1 THEN
                        clickdl = 0
                        dlcolor = odlcolor
                        dlfillcolor = odlfillcolor
                        IF songloc > 0 THEN
                            _SNDSETPOS audio&, songloc
                            songloc = 0
                        END IF
                    END IF
                    IF clicksr = 1 THEN
                        clicksr = 0
                        srcolor = osrcolor
                        srfillcolor = osrfillcolor
                        song = song + 1
                        changesong = 1
                        _SNDSTOP audio&
                        _SNDCLOSE audio&
                    END IF
                    IF clicksl = 1 THEN
                        clicksl = 0
                        slcolor = oslcolor
                        slfillcolor = oslfillcolor
                        song = song - 1
                        changesong = 1
                        _SNDSTOP audio&
                        _SNDCLOSE audio&
                    END IF
                    IF clickvol = 1 THEN
                        clickvol = 0
                        SELECT CASE mute
                            CASE 0
                                mute = 1
                                sndsavevol# = sndvol#
                                sndvol# = 0
                            CASE 1
                                mute = 0
                                sndvol# = sndsavevol#
                        END SELECT
                        volcolor = ovolcolor
                        muting = 0
                    END IF
                    IF clickshuffle = 1 THEN
                        SELECT CASE shuffle
                            CASE 0
                                shuffle = 1
                                changesong = 1
                                _SNDSTOP audio&
                                _SNDCLOSE audio&
                            CASE 1
                                shuffle = 0
                        END SELECT
                        REDIM repeat(songs)
                        clickshuffle = 0
                    END IF
                    IF clickrepeat = 1 THEN
                        SELECT CASE repeat
                            CASE 0
                                repeat = 1
                            CASE 1
                                repeat = 0
                        END SELECT
                        REDIM repeat(songs)
                        clickrepeat = 0
                    END IF
                END IF
                oldclick = click
                IF _MOUSEWHEEL THEN
                    IF x >= (101 + adx) AND x <= (149 + adx) AND y >= (a2y - 36) AND y <= (a2y - 12) THEN
                        sndvol# = sndvol# - (.0625 * _MOUSEWHEEL)
                        IF sndvol# < 0 THEN sndvol# = 0
                        IF sndvol# > 1 THEN sndvol# = 1
                    END IF
                    IF x >= (a1x + 5) AND x <= (a2x - 5) AND y >= (acy - 13) AND y <= (acy - 3) THEN
                        DO
                            pbarscrollnet = pbarscrollnet - _MOUSEWHEEL
                            pbartimer = TIMER
                            IF justpbarscroll = 0 THEN oldpos = _SNDGETPOS(audio&)
                            songloc = oldpos + pbarscrollnet
                            IF songloc < 1 THEN
                                song = song - 1
                                changesong = 1
                                IF audio& THEN _SNDSTOP audio&
                                IF audio& THEN _SNDCLOSE audio&
                                EXIT DO
                            END IF
                            IF songloc > (length - 1) THEN
                                song = song + 1
                                changesong = 1
                                IF audio& THEN _SNDSTOP audio&
                                IF audio& THEN _SNDCLOSE audio&
                                EXIT DO
                            END IF
                            justpbarscroll = 1
                            EXIT DO
                        LOOP
                    END IF
                    IF x >= c1x AND x <= (c2x - 10) AND y >= c1y AND y <= c2y THEN
                        plstrow = plstrow + _MOUSEWHEEL
                        IF plstrow < 1 THEN plstrow = 1
                        IF plstrow > songs THEN plstrow = songs
                        REDIM plstdisp$(6)
                        REDIM plstdisp(6)
                        plstdispcount = 0
                        IF songs >= 6 THEN
                            IF startplst > 0 THEN
                                SELECT CASE startplst
                                    CASE 1
                                        plstrow = startplst
                                    CASE 2
                                        plstrow = (startplst - 1)
                                    CASE (songs - 2)
                                        plstrow = (startplst - 3)
                                    CASE (songs - 1)
                                        plstrow = (startplst - 4)
                                    CASE songs
                                        plstrow = (startplst - 5)
                                    CASE ELSE
                                        plstrow = (startplst - 2)
                                END SELECT
                                startplst = 0
                            END IF
                            plstrower = plstrow
                            IF plstrower > (songs - 5) THEN plstrower = (songs - 5)
                            FOR plstdispmake = plstrower TO (plstrower + 5)
                                plstdispcount = plstdispcount + 1
                                plstdisp$(plstdispcount) = plstname$(plstdispmake)
                                plstdisp(plstdispcount) = plstdispmake
                            NEXT plstdispmake
                        ELSE
                            plstrow = 1
                            FOR plstdispmake = 1 TO songs
                                plstdisp$(plstdispcount) = plstname$(plstdispmake)
                                plstdisp(plstdispmake) = plstdispmake
                            NEXT plstdispmake
                        END IF
                        changedplstbar = 1
                    END IF
                END IF
            LOOP WHILE _MOUSEINPUT
            IF TIMER - pbartimer > .5 AND justpbarscroll = 1 THEN
                justpbarscroll = 0
                pbarscrollnet = 0
                IF songloc > 0 AND oldsong = song THEN
                    _SNDSETPOS audio&, songloc
                    songloc = 0
                END IF
            END IF
            IF artmax = 0 THEN
                SELECT CASE viewtype
                    CASE 0
                        screenx = 512
                        screeny = 120
                        a1x = 113
                        a1y = 10
                        a2x = 399
                        a2y = 110
                        acy = 60
                    CASE 1
                        screenx = 512
                        screeny = 120
                        a1x = 55
                        a1y = 10
                        a2x = 341
                        a2y = 110
                        acy = 60
                        IF album$ > "" THEN
                            b1x = 409
                            b1y = 17
                            b2x = 511
                            b2y = 119
                            ba1x = 413
                            ba1y = 21
                            ba2x = 507
                            ba2y = 115
                        ELSE
                            b1x = 402
                            b1y = 5
                            b2x = 506
                            b2y = 115
                            ba1x = 407
                            ba1y = 10
                            ba2x = 501
                            ba2y = 110
                        END IF
                    CASE 2
                        screenx = 512
                        screeny = 240
                        a1x = 113
                        a1y = 6
                        a2x = 399
                        a2y = 106
                        acy = 56
                        c1x = 8
                        c1y = 129
                        c2x = 504
                        c2y = 233
                    CASE 3
                        screenx = 512
                        screeny = 240
                        a1x = 113
                        a1y = 6
                        a2x = 399
                        a2y = 106
                        acy = 56
                        b1x = 397
                        b1y = 125
                        b2x = 507
                        b2y = 235
                        ba1x = 402
                        ba1y = 130
                        ba2x = 502
                        ba2y = 230
                        c1x = 8
                        c1y = 129
                        c2x = 387
                        c2y = 233
                END SELECT
                IF viewtype <> oldviewtype THEN SCREEN _NEWIMAGE(screenx, screeny, 32)
                oldviewtype = viewtype
            END IF
            _DISPLAY
        LOOP UNTIL changesong = 1
        IF plst$ = "" AND looping = 0 THEN GOSUB standby
        changesong = 0
    ELSE
        IF plst$ > "" THEN
            song = song + 1
            IF song > songs THEN song = 1
        ELSE
            GOSUB standby
        END IF
    END IF
LOOP
SYSTEM

shuffle:
IF repeat = 0 THEN
    norepeats = 0
    FOR repeatcheck = 1 TO songs
        IF repeat(repeatcheck) = 0 THEN norepeats = 1
    NEXT repeatcheck
    IF norepeats = 1 THEN
        DO
            RANDOMIZE TIMER
            song = INT(RND * songs + 1)
            IF repeat(song) = 0 THEN EXIT DO
        LOOP
        repeat(song) = 1
    ELSE
        GOSUB standby
    END IF
END IF
RETURN

standby:
IF audio& <> 0 THEN
    _SNDSTOP audio&
    _SNDCLOSE audio&
END IF
SYSTEM
RETURN

trunkdata:
RETURN


SUB getlength (file$, length)
SHELL _HIDE "CMD /C mp3info -x " + CHR$(34) + file$ + CHR$(34) + " > mp3info.tmp"
REDIM mp3info$(1024)
mp3info = 0
OPEN "mp3info.tmp" FOR INPUT AS #1
DO
    mp3info = mp3info + 1
    LINE INPUT #1, mp3info$(mp3info)
LOOP UNTIL EOF(1) = -1
CLOSE #1
KILL "mp3info.tmp"
DO
    FOR checkinfo = 1 TO mp3info
        IF LEFT$(mp3info$(checkinfo), 7) = "Length:" THEN
            length$ = MID$(mp3info$(checkinfo), 13)
            minutes$ = LEFT$(length$, INSTR(length$, ":"))
            seconds$ = RIGHT$(length$, 2)
            length = (VAL(minutes$) * 60) + VAL(seconds$)
        END IF
    NEXT checkinfo
    EXIT DO
LOOP
END SUB

SUB gettag (file$, tag, tag$(), art&)

'tag$(1) = title
'tag$(2) = artist
'tag$(3) = album
'tag$(4) = year
'tag$(5) = genre
'tag$(6) = comment

tag = 0
TYPE Ext_Header
    size AS LONG
    flags AS _UNSIGNED _BYTE
    extflag AS _UNSIGNED _BYTE
END TYPE
TYPE Frame_Head
    id AS STRING * 4
    size AS _UNSIGNED LONG
    flags AS _UNSIGNED INTEGER
END TYPE
TYPE ID3_Header
    id AS STRING * 3
    ver AS _UNSIGNED _BYTE
    rev AS _UNSIGNED _BYTE
    flags AS _UNSIGNED _BYTE
    size AS LONG
END TYPE
TYPE MetaData
    tag AS STRING * 3
    title AS STRING * 30
    artist AS STRING * 30
    album AS STRING * 30
    year AS STRING * 4
    comment AS STRING * 30
    genre AS STRING * 1
END TYPE
DIM ext AS Ext_Header
DIM frm AS Frame_Head
DIM head AS ID3_Header
DIM idtag AS MetaData
IF _FILEEXISTS(file$) = 0 THEN
    CLOSE #1
    EXIT SUB
END IF
OPEN file$ FOR BINARY AS #1
GET #1, , head
IF head.id = "ID3" THEN
    head.size = switch_Byte~&(head.size)
    headsiz = DeSync~&(head.size)
    IF (head.flags AND &B1000000) = &B1000000 THEN
        GET #1, , ext
        SEEK #1, DeSync~&(ext.size) + 10
    END IF
    REDIM tagget$(128, 4)
    REDIM tag$(6)
    DO
        GET #1, , frm
        IF frm.id > "    " THEN
            frameno = frameno + 1
            tagget$(frameno, 1) = frm.id
            tagget$(frameno, 2) = TagBin$(frm.flags, 2)
            tagget$(frameno, 3) = STR$(switch_Byte~&(frm.size))
            tagget$(frameno, 4) = SPACE$(switch_Byte~&(frm.size))
            GET #1, , tagget$(frameno, 4)
            c = c + 10 + VAL(tagget$(frameno, 3))
        ELSE
            EXIT DO
        END IF
    LOOP UNTIL c >= headsiz
    SEEK #1, headsiz + 1
    CLOSE #1
    IF art& < -1 THEN _FREEIMAGE art&
    IF art& <> 1 THEN art& = 0
    FOR tagfix = 1 TO frameno
        IF LEFT$(tagget$(tagfix, 4), 1) = CHR$(1) THEN tagget$(tagfix, 4) = MID$(tagget$(tagfix, 4), 4)
        DO
            FOR spacecheck = 2 TO LEN(tagget$(tagfix, 4)) STEP 2
                IF MID$(tagget$(tagfix, 4), spacecheck, 1) <> CHR$(0) THEN EXIT DO
            NEXT spacecheck
            temptag$ = ""
            FOR spaceremove = 1 TO LEN(tagget$(tagfix, 4)) STEP 2
                temptag$ = temptag$ + MID$(tagget$(tagfix, 4), spaceremove, 1)
            NEXT spaceremove
            tagget$(tagfix, 4) = temptag$
            EXIT DO
        LOOP
        IF tagget$(tagfix, 1) <> "PIC" AND tagget$(tagfix, 1) <> "APIC" THEN
            tagget$(tagfix, 4) = remspace$(tagget$(tagfix, 4))
        END IF
    NEXT tagfix
    FOR sorttag = 1 TO frameno
        SELECT CASE tagget$(sorttag, 1)
            CASE "TAL", "TALB"
                tag$(3) = tagget$(sorttag, 4)
            CASE "PIC", "APIC"
                IF art& <> 1 THEN
                    DO
                        imagetype$ = MID$(tagget$(sorttag, 4), 2, (INSTR(2, tagget$(sorttag, 4), CHR$(32)) - 2))
                        imagetype$ = MID$(imagetype$, (INSTR(imagetype$, "/") + 1), 4)
                        IF LEFT$(imagetype$, 3) = "png" THEN imagetype$ = "png"
                        IF imagetype$ = "jpeg" THEN imagetype$ = "jpg"
                        SELECT CASE imagetype$
                            CASE "jpg"
                                indicator$ = "ÿØÿà"
                            CASE "png"
                                indicator$ = "‰PNG"
                            CASE ELSE
                                EXIT DO
                        END SELECT
                        notart = 0
                        DO
                            FOR findind = 1 TO LEN(tagget$(sorttag, 4))
                                checkind$ = MID$(tagget$(sorttag, 4), findind, 4)
                                IF checkind$ = indicator$ THEN
                                    imagedata$ = MID$(tagget$(sorttag, 4), findind)
                                    EXIT DO
                                END IF
                            NEXT findind
                            notart = 1
                            EXIT DO
                        LOOP
                        IF notart = 0 THEN
                            OPEN "cover." + imagetype$ FOR BINARY AS #2
                            PUT #2, , imagedata$
                            CLOSE #2
                            art& = _LOADIMAGE("cover." + imagetype$)
                            KILL "cover." + imagetype$
                        END IF
                        EXIT DO
                    LOOP
                END IF
            CASE "TP1", "TPE1"
                tag$(2) = tagget$(sorttag, 4)
            CASE "TCON"
                tag$(5) = tagget$(sorttag, 4)
            CASE "TT2", "TIT2"
                tag$(1) = tagget$(sorttag, 4)
            CASE "TYER", "TYE"
                tag$(4) = tagget$(sorttag, 4)
                IF LEN(tag$(4)) > 4 THEN year$ = LEFT$(tag$(4), 4)
                IF INSTR(year$, "-") THEN year$ = RIGHT$(tag$(4), 4)
                tag$(4) = year$
            CASE "COMM"
                tag$(6) = tagget$(sorttag, 4)
        END SELECT
    NEXT sorttag
    OPEN file$ FOR BINARY AS #1
    start = LOF(1) - 127
    GET #1, start, idtag
    CLOSE #1
    IF idtag.tag = "TAG" THEN
        IF tag$(1) = "" THEN tag$(1) = remspace$(idtag.title)
        IF tag$(2) = "" THEN tag$(2) = remspace$(idtag.artist)
        IF tag$(3) = "" THEN tag$(3) = remspace$(idtag.album)
        IF tag$(4) = "" THEN tag$(4) = remspace$(idtag.year)
        IF tag$(5) = "" THEN tag$(5) = remspace$(idtag.genre)
        IF tag$(6) = "" THEN tag$(6) = remspace$(idtag.comment)
    END IF
END IF
IF tag$(1) = "" THEN tag$(1) = LEFT$(file$, (LEN(file$) - 4))
tag = 1
END SUB

FUNCTION TagBin$ (value, byt)
n = value
c = 0
DO
    IF n MOD 2 = 1 THEN
        b$ = "1" + b$
    ELSE
        b$ = "0" + b$
    END IF
    n = n \ 2
    c = (c + 1)
    IF c MOD 4 = 0 THEN b$ = " " + b$
LOOP UNTIL n < 2
IF n = 1 THEN
    b$ = "1" + b$
ELSE
    b$ = "0" + b$
END IF
c = c + 1
IF c MOD 4 = 0 THEN b$ = " " + b$
FOR x = c + 1 TO byt * 8
    b$ = "0" + b$
    IF x MOD 4 = 0 THEN b$ = " " + b$
NEXT x
Bin$ = b$
END FUNCTION

FUNCTION colortorgb& (c)
SELECT CASE c
    CASE 0
        r = 0
        g = 0
        b = 0
    CASE 1
        r = 0
        g = 0
        b = 168
    CASE 2
        r = 0
        g = 168
        b = 0
    CASE 3
        r = 0
        g = 168
        b = 168
    CASE 4
        r = 168
        g = 0
        b = 0
    CASE 5
        r = 168
        g = 0
        b = 168
    CASE 6
        r = 168
        g = 84
        b = 0
    CASE 7
        r = 168
        g = 168
        b = 168
    CASE 8
        r = 84
        g = 84
        b = 84
    CASE 9
        r = 84
        g = 84
        b = 252
    CASE 10
        r = 84
        g = 252
        b = 84
    CASE 11
        r = 84
        g = 252
        b = 252
    CASE 12
        r = 252
        g = 84
        b = 84
    CASE 13
        r = 252
        g = 84
        b = 252
    CASE 14
        r = 252
        g = 252
        b = 84
    CASE 15
        r = 252
        g = 252
        b = 252
END SELECT
colortorgb& = _RGB32(r, g, b)
END FUNCTION

FUNCTION DeSync~& (value)
mask = &H7F
DO
    outv = value AND NOT mask
    outv = outv \ 2
    outv = outv OR (value AND mask)
    mask = ((mask + 1) * (2 ^ 8)) - 1
    value = outv
LOOP UNTIL mask = &H7FFFFFFF
DeSync = outv
END FUNCTION

FUNCTION dis (x1, y1, x2, y2)
dis = INT(SQR(((x2 - x1) ^ 2) + ((y2 - y1) ^ 2)))
END FUNCTION

FUNCTION remspace$ (a$)
DO
    trimming = 0
    IF LEFT$(a$, 1) = CHR$(32) OR LEFT$(a$, 1) = CHR$(0) THEN
        a$ = MID$(a$, 2)
        trimming = 1
    END IF
    IF RIGHT$(a$, 1) = CHR$(32) OR RIGHT$(a$, 1) = CHR$(0) THEN
        a$ = MID$(a$, 1, (LEN(a$) - 1))
        trimming = 1
    END IF
LOOP UNTIL trimming = 0
remspace$ = a$
END FUNCTION

FUNCTION switch_Byte~& (ln)
tb~& = (ln AND &HFF000000~&) \ (2 ^ 24)
mtb~& = (ln AND &H00FF0000~&) \ (2 ^ 8)
btb~& = (ln AND &H0000FF00~&) * (2 ^ 8)
bt~& = (ln AND &H000000FF~&) * (2 ^ 24)
switch_Byte~& = tb~& + mtb~& + btb~& + bt~&
END FUNCTION

If anyone can provide any insight into why this is happening or offer a solution it would be greatly appreciated.
~Zack

LINUXQB64gltester

  • Full Member
  • ***
  • Posts: 240
    • Anyone that likes Art
Re: Problem with playing audio
« Reply #1 on: March 25, 2013, 08:18:04 PM »
Take a look at this :
http://www.qb64.net/forum/index.php?topic=10037.msg85693#msg85693
 To save you the trouble:
Quote
Galleon
Administrator
Hero Member
Posts: 4501
QB Forever
Re: Need Help with _SNDPLAY
« Reply #16 on: January 14, 2013, 04:30:56 AM »
There are a lot of things wrong with the SDL-mixer sound system and I find it quite hit and miss as to whether things play and worse, how often they play. Which is one of the reasons we ditched that system entirely in QB64 and split-up its sub-components. Try converting the files to a common frequency like 44100 or 22050 and it might help. Oh, and avoid MP3 files with SDL at all costs. If you must use mp3, make sure you known the exact version of mp3 encoding being used because it may make a difference to the reliability of whether it plays or not. 
Note where he says:

Quote
Oh, and avoid MP3 files with SDL at all costs. If you must use mp3, make sure you known the exact version of mp3 encoding being used because it may make a difference to the reliability of whether it plays or not. 
I don't know if  the new GL version handles this better,. my solution was to stop using mp3 files,
 I have had lots of trouble with them any way, not just with qb64, but even when I try to play them with one of my "media players",...
from Garry
« Last Edit: March 25, 2013, 08:26:01 PM by LINUXQB64gltester »
For off topic discussions :
Non-QB64 Related Discussion Forum
Also
My Experimenting Forum
"QB64 has a great future!"

Gorlock

  • Sr. Member
  • ****
  • Posts: 337
    • Email
Re: Problem with playing audio
« Reply #2 on: March 25, 2013, 08:46:36 PM »
Thank you for the quick reply! I kind of built it around mp3 files with the tags and everything so I can't change that without scratching it pretty much. I haven't switched to GL at all yet, do all the same keywords still work or is there a new set of commands you need to learn?

LINUXQB64gltester

  • Full Member
  • ***
  • Posts: 240
    • Anyone that likes Art
Re: Problem with playing audio
« Reply #3 on: March 25, 2013, 09:16:47 PM »
 If not all, most
Quote
  do all the same keywords still work ?
most, or all of the old keywords, and commands, do, or will be , in the near future,..  PLAY ,was, just recently added,
SOUND and PLAY have been added

 I would reccomend looking at : QB64 GL
 There are also some new commands, that make it more versatile, but all the "old" stuff is about the same, I even have compiled  some "old" pure qbasic, stuff with no problems.
  I would reccomend waiting though,  see this :
"exporter" program   
 Unless you want to try using the version that is at the repository,..This is to say the version that is in the "downloads" now, qb64GL V.0975, is going to be changed, for a more complete, better version,  getting and using the version on the respository, is a little "trickey", but if you like to experiment, and have the time,  it is available. Read up on it first,..
For off topic discussions :
Non-QB64 Related Discussion Forum
Also
My Experimenting Forum
"QB64 has a great future!"

OlDosLover

  • Hero Member
  • *****
  • Posts: 3859
  • OlDosLover
    • Email
Re: Problem with playing audio
« Reply #4 on: March 26, 2013, 03:37:33 AM »
Hi all,
   
Quote
I haven't switched to GL at all yet, do all the same keywords still work or is there a new set of commands you need to learn?
    Not all of the implemented SDL keywords will work in GL yet as some arent implemented. Its possible that your program wont work correctly with GL anyway. What i would try is to use a audio program to examine the "good" mp3 files that do play. Note the bitrates , fields , etc then compare that info to one of the other non playing mp3 files. If that fails  try re encoding them again in a known program that QB64 recognises by playing those produced that way.
OlDosLover.

  • Print