Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Building sounds with _SNDPLAYCOPY?
#11
@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.
Tread on those who tread on you

Reply
#12
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
Shoot first and shoot people who ask questions, later.
Reply
#13
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
Tread on those who tread on you

Reply
#14
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
Reply
#15
(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.
Tread on those who tread on you

Reply
#16
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
Shoot first and shoot people who ask questions, later.
Reply




Users browsing this thread: 6 Guest(s)