QB64 Phoenix Edition
Building sounds with _SNDPLAYCOPY? - Printable Version

+- QB64 Phoenix Edition (https://staging.qb64phoenix.com)
+-- Forum: QB64 Rising (https://staging.qb64phoenix.com/forumdisplay.php?fid=1)
+--- Forum: Code and Stuff (https://staging.qb64phoenix.com/forumdisplay.php?fid=3)
+---- Forum: Help Me! (https://staging.qb64phoenix.com/forumdisplay.php?fid=10)
+---- Thread: Building sounds with _SNDPLAYCOPY? (/showthread.php?tid=966)

Pages: 1 2


RE: Building sounds with _SNDPLAYCOPY? - SpriggsySpriggs - 10-13-2022

@Pete
Nah, that wouldn't affect my code at all as my code uses an old DLL that's been around a while. Same DLL I use with my Video player.


RE: Building sounds with _SNDPLAYCOPY? - Pete - 10-13-2022

You have to be careful calling old drivers. I ended up in the desert, yesterday, because my 80 year old Uber driver took a wrong turn on the I-5.

Good luck finding it then, it "sounds" cool!

Pete Big Grin


RE: Building sounds with _SNDPLAYCOPY? - SpriggsySpriggs - 10-13-2022

I think I found it. It looks like it was on my GitHub. You'd need ffmpeg to show the waveform at the end. Or you could reuse Fellippe's code for showing a sound's waveform.

Code: (Select All)
OPTION _EXPLICIT

_TITLE "mciSendString Record Test"

StartRecording
DIM x
DIM y

x = TIMER(0.01)
DO
    y = TIMER(0.01)
    CLS
    PRINT "Recording...Press any key to stop"
    PRINT y - x
    _DISPLAY
LOOP UNTIL INKEY$ <> ""

StopRecording
SaveRecording ("test.wav")
PlayRecording ("test.wav")

_TITLE "Waveform Display"
SCREEN GetWaveform("test.wav", "640x480")


DECLARE DYNAMIC LIBRARY "WINMM"
    FUNCTION mciSendStringA% (lpstrCommand AS STRING, lpstrReturnString AS STRING, BYVAL uReturnLength AS _UNSIGNED LONG, BYVAL hwndCallback AS LONG)
    FUNCTION mciGetErrorStringA% (BYVAL dwError AS LONG, lpstrBuffer AS STRING, BYVAL uLength AS _UNSIGNED LONG)
END DECLARE

SUB StartRecording
    DIM a AS LONG
    a = mciSendStringA("open new type waveaudio alias capture" + CHR$(0), "", 0, 0)
    IF a THEN
        DIM x AS INTEGER
        DIM MCIError AS STRING
        MCIError = SPACE$(255)
        x = mciGetErrorStringA(a, MCIError, LEN(MCIError))
        PRINT MCIError
        END
    ELSE
        a = mciSendStringA("set capture time format ms bitspersample 16 channels 2 samplespersec 48000 bytespersec 192000 alignment 4" + CHR$(0), "", 0, 0)
        a = mciSendStringA("record capture" + CHR$(0), "", 0, 0)
    END IF
END SUB

SUB StopRecording
    DIM a AS LONG
    a = mciSendStringA("stop capture" + CHR$(0), "", 0, 0)
END SUB

SUB SaveRecording (file AS STRING)
    DIM a AS LONG
    a = mciSendStringA("save capture " + CHR$(34) + file + CHR$(34) + CHR$(0), "", 0, 0)
    a = mciSendStringA("close capture" + CHR$(0), "", 0, 0)
END SUB

SUB PlayRecording (file AS STRING)
    DIM a AS LONG
    a = mciSendStringA("play " + CHR$(34) + file + CHR$(34) + CHR$(0), "", 0, 0)
END SUB

FUNCTION GetWaveform& (file AS STRING, size AS STRING)
    IF _FILEEXISTS("output.png") THEN
        KILL "output.png"
    END IF
    SHELL _HIDE "ffmpeg -i " + CHR$(34) + file + CHR$(34) + " -filter_complex " + CHR$(34) + "showwavespic=s=" + size + CHR$(34) + " -frames:v 1 output.png"
    GetWaveform = _LOADIMAGE("output.png", 32)
END FUNCTION



RE: Building sounds with _SNDPLAYCOPY? - Pete - 10-13-2022

Curious. The "Save" in API format. Do you know the folder MS saves your "test.wav" sound file in, to look up the file after it is saved? If so, would there be anyway in this code to have it saved to a different specified folder? If not, knowing where it is saved would just take a simple file move operation with SHELL or in QB64 with NAME AS.

Pete


RE: Building sounds with _SNDPLAYCOPY? - SpriggsySpriggs - 10-14-2022

(10-13-2022, 05:56 PM)Pete Wrote: Curious. The "Save" in API format. Do you know the folder MS saves your "test.wav" sound file in, to look up the file after it is saved? If so, would there be anyway in this code to have it saved to a different specified folder? If not, knowing where it is saved would just take a simple file move operation with SHELL or in QB64 with NAME AS.

Pete
@Pete
All you'd need to do would be to specify your path. I left it as just the filename because it defaults to the current working directory as the save directory.


RE: Building sounds with _SNDPLAYCOPY? - Pete - 10-14-2022

Nice!

Hey, I see the @ messaging feature failed to register in your post. Mine does that all the friggin'. time. Old browser, I guess. I always have to hit quick edit, do nothing, and then save changes to get it to make a hyperlink.

Pete