QB64 Phoenix Edition v3.8.0 Released!
#31
(06-16-2023, 05:12 PM)bplus Wrote: In USA there was a magazine:
I think I purchased every issue of Cracked and Mad Magazine when I was 10 to 14 years old. Al Jaffe's work in Mad Magazine was amazing. I wish I would have kept them. I believe the first Mad Magazine issue I bought was the Star wars parody. My mom did not approve of Mad Magazine ... all the more reason to get them!
Software and cathedrals are much the same — first we build them, then we pray.
QB64 Tutorial
Reply
#32
It alright with me, an unintended challenge goes with it and I knew you were coming from Windows. I used be Dos and still got a Windows 10 desktop (wife uses this one. Her desktop went down and not fixed yet). This laptop was Windows 7. When end of life came for 7. I put Lubuntu on it. I'm letting know about what I know and got.
Reply
#33
(06-16-2023, 07:14 PM)bplus Wrote: Linux is case sensitive to files and folders, Windows is not. So if it was just a problem with letter case then Windows should have run the banner in Terry's code just fine.

Adding to a reminder: it's possible in Linux to include other "characters" not thought possible such as newline, formfeed, modem directions, whatever "looks" like a space and more into a filename. This actually happened to me the other day: I don't know how a CHR$(13) ended up as part of a filename.

The "cracked" thing about German programmers, shouldn't it be "kracht" instead? Because somewhere in my CD collection there is a song that is called that way. Hard to hear LOL.

https://en.wiktionary.org/wiki/kracht

I had forgotten there was such a magazine called "Cracked". "Mad" Magazine was too ordinary for me. But I wanted a certain issue of Heavy Metal, got scared off for obvious reasons...
Reply
#34
Well, I'm not sure if anyone else has noticed a speed increase since v3.7.0 but I just installed v3.8.0 a few hours ago and things seem to be running about 30% faster than before!

This is mainly just a lot of repetitve math being done in SCREEN 0 so it may not apply to all situations, but I'm very impressed (and grateful) to whoever sped things up.

The problem I usually do as a short test would take an average of about 6.0 seconds. This has always varied just a little either way (for better or worse) ever since using v0.8.2 but now the average time is about 4.2 seconds!


I also notice a lot of changes and fixes on the forum such as the right banner showing up by default, favicons showing up like they're suppose to, etc.


Thanks to all of the developers and members (past and present) for keeping BASIC alive and making this a great place to visit.


@Pete : Your presence has be sorely missed for a few months now... hope to see you back soon.
Reply
#35
@Stuart The speed increases you're seeing is probably from recent improvements to PRINT.  I'll try to work up a demo sometime to highlight the various improvements for you guys to have fun testing out later.  Wink
Reply
#36
(06-17-2023, 06:12 AM)SMcNeill Wrote: @Stuart The speed increases you're seeing is probably from recent improvements to PRINT.  I'll try to work up a demo sometime to highlight the various improvements for you guys to have fun testing out later.  Wink


I'll be interested in checking out the PRINT demos when they're available, but in the test program I mentioned earlier there are less than 100 lines printed at 80 characters per line in SCREEN 0; so, I think it has more to do with the math routines being faster somehow OR just the fact that it's running in SCREEN 0.
I mainly program in SCREEN 0 and noticed many years ago that it always seems a little faster than the other (graphical) modes.

Basically, I'm dividing 1 / 999,999,998 out to 55,475,113 digits in approximately 6.0 seconds when using v3.7.0 versus about 4.2 seconds when using v3.8.0 and I've never seen a difference this big between two adjacent versions -- even all the way back to the days of SDL.

I'm using the 32 bit version of QB64PE on an old Windows Vista computer; maybe that has something to do with it?? Whatever the reason, I have no complaints.

I pray that your health improves daily, and keep up the good work!
Reply
#37
(06-17-2023, 09:05 AM)Stuart Wrote: Basically, I'm dividing 1 / 999,999,998 out to 55,475,113 digits in approximately 6.0 seconds when using v3.7.0 versus about 4.2 seconds when using v3.8.0 and I've never seen a difference this big between two adjacent versions -- even all the way back to the days of SDL.

I could imagine this has to do with the exchange of the MinGW package we did in 3.8.0.
Reply
#38
I said I was going to do this back on 3.7  Here it is on 3.8  Simply put.  Drag and drop a list of EXE file(s) in my window and a script to mass compile them will appear in QB64pe folder.  You can upgrade all your bas files to the new release.  Or recompile sources after recreating a new qb64pe folder.  aka I screwed up qb64pe and it doesn't compile right anymore.

Best practices you should create a new qb64pe folder and recompile every new release.  There are many reasons why to do this.  Behind the scenes changes could corrupt an upgrade in place attempt.  So a quick step by step.  Doesn't take long and original folder remains intact but only renamed.

1. Rename "qb64pe" folder to "qb64pe-org"
2. Extract new qb64 into new folder.  Suggest leaving "Archive name" QB64pe alone
3. Copy your source "bas" folder to the new qb64pe location.  << COPY NOT MOVE!! >>
4. Copy any .bin .h .inc .ico files into new qb64pe location.  Or any others you want to keep.
5. Copy your .exe files into new qb64pe location.  What ever you do DON'T COPY QB64pe.exe
Step 5 is only to keep a place holder of exe's which will be overwritten by my doit.cmd script.
6. After you are satisfied everything is right.  Suggest waiting a week or two.  QB64pe-org folder and all can be deleted.

If you have not done so already.  Run the new version of QB64pe.  Set any compiler options you want, Position and resize.
If you have not done so yet, load and compile the code provided here.  On the next version release it will not be needed to recompile my code.
You can, but I am not using extravagant coding requiring recompile.

There is a limited number reasons for the script to fail.  All of them fall on your head. re: sources not found, forgot to copy .bin, .h .ico  ETC ....

This is open source, using it as you see fit, don't use it.  I DON'T CARE.  If you want to help and expand the code to include the option of QB64pe compiling the EXE near sources.  I assumed your source would be in QB64pe folder and EXE 's would be there too.  I tried to explain using remarks through out.

There could be only one change required.  source$ must be in the path off QB64pe folder.  AND INCLUDE A "\" on the end.

Enjoy

Code: (Select All)
_Title "QB64pe Bas Upgrader v1.0"
Width 80, 10
_ScreenMove 10, 10

Cls
'
' I always use q$ to use quotes, just how I am
Q$ = Chr$(34)
'
' define where sources are  <<< change variable to your directory >>>
' remember to slap a "\" to your source path end
'
source$ = "My Programs\"

'
' get home path
' noramlly this would be in the root of qb64pe
' screwy things could happen if it isn't
'
hp$ = Command$(0)
hp$ = Left$(hp$, _InStrRev(hp$, "\"))

' assume homepath + source is one path from here on out.

ChDir hp$

_AcceptFileDrop 'enables drag/drop functionality
Print "Drag the EXE file(s) and drop in this window... or x to exit"

Do
    _Limit 3
    x$ = InKey$
    If UCase$(x$) = "X" Then
        Cls
        Print "I don't plan to open a command prompt"
        Print "for you.  doit.cmd script is in " + hp$
        Print "folder. You can examime / execute / observe."
        hitenter
        System
    End If
Loop Until _TotalDroppedFiles <> 0

Open "doit.cmd" For Output As #1

Do
    Print
    f$ = _DroppedFile
    If f$ = "" Then Exit Do
    '
    ' take out all path info and test for source available.
    ' also scrap off extention
    '
    f$ = Right$(f$, Len(f$) - _InStrRev(f$, "\"))
    f$ = Left$(f$, Len(f$) - 4)
    Print "Using "; f$
    '
    ' ok do we have source bas ?
    '
    If _FileExists(hp$ + source$ + f$ + ".bas") = 0 Then
        Print "Sorry I can not compile the above file. The source does not"
        Print "exist in paths provided. Suggest exclude the file(s)"
        Print "next time in selection and drop again."
        hitenter
    End If
    '
    ' if you got this far a doit.cmd line can be generated
    '
    Print #1, hp$ + "qb64pe.exe -c " + Q$ + hp$ + source$ + f$ + ".bas" + Q$

Loop

Close
'
' another chance to do over or exit
'
Print "doit.cmd created and closed"
Print "Hit enter, followed by x"
Print "to exit or drop files again"
hitenter
Run

Sub hitenter
    Input "Hit <enter> to continue "; bad
End Sub
Reply
#39
(06-14-2023, 12:36 PM)mnrvovrfc Wrote: Yay! Go team! The new Unicode graphics printing stuff keeps getting better and better.

I imagine a muzak contest, the winner because he/she kept changing the waveform of PLAY statement during playback!

The additional functionality to SOUND is great, but it's destined to do only one-channel sound. One still has to work for multichannel playback with _SNDRAW and the like. ON PLAY() was never supported by QB64. This is just a reminder for the ambitious ones.

Smile

I'm down with a muzak contest!
grymmjack (gj!)
GitHubYouTube | Soundcloud | 16colo.rs
Reply
#40
(06-14-2023, 12:36 PM)mnrvovrfc Wrote: The additional functionality to SOUND is great, but it's destined to do only one-channel sound. One still has to work for multichannel playback with _SNDRAW and the like. ON PLAY() was never supported by QB64. This is just a reminder for the ambitious ones.

You raise a solid point. I was playing around with it yesterday to learn too (obviously it requires QB64PE3.8+).

I spoke with @a740g on Discord and he mentioned he wants to add some multi-channel stuff. Then he showed me how it uses miniaudio and when I saw it could do filters and had the ability to do delay and reverb, my little brain and heart nearly exploded with joy.

I'm super excited about this stuff!

The example below is mostly me trying to find limits.

One thing I did learn is that you cannot stack Q's like notes. My thought was ok Q100 that's only 100ms (and I already begged for that range to be increased to @a740g) but if I could stack 10 Q100's that's a full second, alas, it doesn't work that way. When I asked why it was because it's per PLAY statement note.

So in the same way that V adjusts(modulates, attenuates, whatever language you like here) the volume from 0-100, Q also acts like that in the same category.

Stacking V's does nothing, V100,V50,V25 doesn't create a ramp or a shape of modulation, it simply sets the value. Q works like that.

You can change the V and Q for the next note to come though, if you pair them.

I've also asked @a740g for different noise colors (because white noise is really really harsh, there is also brown and pink which are much less intense) and from a sound design perspective it's wonderful to get this to happen.

Code: (Select All)

DIM AS STRING Q, P : Q$ = CHR$(34) : P$ = ""

PRINT "==============================="
PRINT "QB64 PHOENIX EDITION SOUND DEMO"
PRINT "==============================="

MONO:
PRINT
PRINT "--- WAVEFORMS DEMO MONOPHONIC (@n) ---"
P$ = "V25 O3 @1 G D C F" : PRINT " SQUARE WAVE: PLAY " + Q$ + P$ + Q$ : PLAY P$
P$ = "V25 O3 @2 G D C F" : PRINT " SAW WAVE: PLAY " + Q$ + P$ + Q$ : PLAY P$
P$ = "V25 O3 @3 G D C F" : PRINT "TRIANGLE WAVE: PLAY " + Q$ + P$ + Q$ : PLAY P$
P$ = "V25 O3 @4 G D C F" : PRINT " SINE WAVE: PLAY " + Q$ + P$ + Q$ : PLAY P$
P$ = "V25 O3 @5 G D C F" : PRINT " NOISE WAVE: PLAY " + Q$ + P$ + Q$ : PLAY P$

POLY:
PRINT
PRINT "--- WAVEFORMS DEMO POLYPHONIC (@n) ---"
P$ = "V25 O3 @1 G,D,C,F" : PRINT " SQUARE WAVE: PLAY " + Q$ + P$ + Q$ : PLAY P$
P$ = "V25 O3 @2 G,D,C,F" : PRINT " SAW WAVE: PLAY " + Q$ + P$ + Q$ : PLAY P$
P$ = "V25 O3 @3 G,D,C,F" : PRINT "TRIANGLE WAVE: PLAY " + Q$ + P$ + Q$ : PLAY P$
P$ = "V25 O3 @4 G,D,C,F" : PRINT " SINE WAVE: PLAY " + Q$ + P$ + Q$ : PLAY P$
P$ = "V25 O3 @5 G,D,C,F" : PRINT " NOISE WAVE: PLAY " + Q$ + P$ + Q$ : PLAY P$

MULTI:
PRINT
PRINT "--- WAVEFORMS DEMO MULTI-WAVE (@n) ---"
P$ = "V25 O0@1G,O1@2G" : PRINT " SQUARE + SAW WAVES: PLAY " + Q$ + P$ + Q$ : PLAY P$
P$ = "V25 O0@2G,O3@2G" : PRINT " SAW + SAW WAVES: PLAY " + Q$ + P$ + Q$ : PLAY P$
P$ = "V25 O0@3<<G,O1@1<<G" : PRINT " TRIANGLE + SQUARE WAVES: PLAY " + Q$ + P$ + Q$ : PLAY P$
P$ = "V25 O1@1<G,O1@2>G,@5G" : PRINT "SQUARE + SAW + NOISE WAVES: PLAY " + Q$ + P$ + Q$ : PLAY P$

RAMPS:
PRINT
PRINT "--- WAVEFORM VOLUME RAMP (ATTACK) DEMO (@Q) ---"
P$ = "V50 T60 O2 Q100 @2 G" : PRINT " 60BPM 100MS RAMP FADE IN SAW: PLAY " + Q$ + P$ + Q$ : PLAY P$
P$ = "V50 T60 O2 Q10 @2 G" : PRINT " 60BPM 10MS RAMP FADE IN SAW: PLAY " + Q$ + P$ + Q$ : PLAY P$
P$ = "V50 T60 O2 Q0 @2 G" : PRINT "60BPM 0MS RAMP (NO FADE) IN SAW: PLAY " + Q$ + P$ + Q$ : PLAY P$

SOUNDS:
PRINT
PRINT "--- SOUNDS THAT YOU CAN MAKE! ---"
P$ = "V25 T120 L16 O1 @4 <C,@3<<C P4 <C,@3<<C P4 <C,@3<<C P4 <C,@3<<C" : PRINT "BASS DRUM: PLAY " Q$ + P$ + Q$ : PLAY P$
PRINT
P$ = "V2 T120 L64 O6 P4 @1A,@5A P4 @1A,@5A P4 @1A,@5A P4 @1A,@5A" : PRINT "HI HAT: PLAY " Q$ + P$ + Q$ : PLAY P$
PRINT
P$ = "V5 T240 L64 O5 MS @2E,@1E @2A,@1A @2A,@1A @2F,@1F @2E,@1E @2A,@1A @2A,@1A @2F,@1F @2E,@1E @2A,@1A @2A,@1A @2F,@1F @2E,@1E @2A,@1A @2A,@1A @2F,@1F @2E,@1E @2A,@1A @2A,@1A @2F,@1F @2E,@1E @2A,@1A @2A,@1A @2F,@1F P1 @5 L1 O1 Q100 C,C,C,C,@2<<<<C" : PRINT "SQUEAL TIRES AND CRASH: PLAY " Q$ + P$ + Q$ : PLAY P$
grymmjack (gj!)
GitHubYouTube | Soundcloud | 16colo.rs
Reply




Users browsing this thread: 9 Guest(s)