Author |
Topic: Recwave "talking.wav", 44100 / Stoprec (Read 3164 times) |
|
James
New Member
member is offline
Posts: 42
|
|
Recwave "talking.wav", 44100 / Stoprec
« Thread started on: Jul 7th, 2014, 2:37pm » |
|
Thanks Richard for all the hard work!
It would be neat to be able to start/stop recording audio like this:
[recbutton] Recwave "singin.wav", 44100 wait
[stopbutton] Stoprec wait
I haven't been able to record audio very well in vista.
------------
Rom. 1:16) For I am not ashamed of the gospel of Christ: for it is the power of God unto salvation to every one that believeth;
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline
Posts: 1348
|
|
Re: Recwave "talking.wav", 44100 / Stopr
« Reply #1 on: Jul 7th, 2014, 5:46pm » |
|
on Jul 7th, 2014, 2:37pm, James wrote:It would be neat to be able to start/stop recording audio like this: Recwave "singin.wav", 44100 |
|
Using the mciSendString API is nearly as simple, isn't it? I think I'm right in saying that you only need to send three commands to start recording audio to a file:
"open new type waveaudio alias capture" "set capture parameters" "record capture"
Then to stop the recording:
"stop capture" "save capture filename" "delete capture" "close capture"
As far as I know this technique works in 'modern' versions of Windows, but I can't say I've actually tried it.
Richard.
|
|
Logged
|
|
|
|
Rod
Full Member
member is offline
Gender:
Posts: 110
|
|
Re: Recwave "talking.wav", 44100 / Stopr
« Reply #2 on: Jul 8th, 2014, 6:36pm » |
|
This code shows some of the mci command strings in use. It works on LBB Win8.1
Code: 'this records saves and loads 1.5 second long
'audio as 8bit .wav files it runs at
'11025 samples per second for 1.5 seconds = 16537 samples
'in each file. samples range from 0 to 255
true=1
false=0
recording=false ' are we recording right now or not?
mid=127
sampos=45
WindowWidth = 800
WindowHeight = 600
UpperLeftX=int((DisplayWidth-WindowWidth)/2)
UpperLeftY=int((DisplayHeight-WindowHeight)/2)
nomainwin
graphicbox #main.current, 130, 5, 630, 256
graphicbox #main.library, 130, 266, 630, 256
button #main.record,"Record",[record], UL, 5, 7, 90, 25
button #main.save,"Save",[save], UL, 5, 37, 90, 25
button #main.load,"Load",[load], UL, 5, 67, 90, 25
button #main.play,"Play",[play], UL, 5, 97, 90, 25
button #main.left,"<",[left], UL, 5,127,40,25
button #main.right,">",[right], UL 55,127,40,25
open "Sound Recording" for window as #main
print #main.current, "down; fill darkgray; flush"
print #main.library, "down; fill darkgray; flush"
print #main, "font ms_sans_serif 10"
[mainloop]
wait
goto [mainloop]
[record]
if recording=true then wait
r$=mciSendString$("close all")
r$=mciSendString$("open new type waveaudio alias capture")
gosub [setRate]
r$=mciSendString$("record capture")
if r$="error" then [error]
recording=true
t=time$("milliseconds")
while time$("milliseconds")<t+1500
wend
r$=mciSendString$("stop capture")
r$=mciSendString$("save capture capture.wav")
r$=mciSendString$("close capture")
recording=false
gosub [chart]
wait
[play]
if recording=true then wait
r$=mciSendString$("open capture.wav type waveaudio alias capture")
if r$="error" then [error]
r$=mciSendString$("play capture wait")
r$=mciSendString$("close capture")
wait
[save]
if recording=true then wait
filedialog "Save As","*.wav",wave$
if wave$="" then wait
if lower$(right$(wave$,4))<>".wav" then wave$=wave$+".wav"
r$=mciSendString$("open capture.wav type waveaudio alias capture")
if r$="error" then [error]
r$=mciSendString$("save capture " + wave$)
r$=mciSendString$("close capture")
wait
[load]
if recording=true then wait
filedialog "Open As","*.wav",wave$
if wave$="" then wait
wave$=chr$(34)+wave$+chr$(34)
r$=mciSendString$("open " +wave$+ " type waveaudio alias capture")
if r$="error" then [error]
r$=mciSendString$("save capture capture.wav")
r$=mciSendString$("close capture")
gosub [chart]
wait
[chart]
xpos=0
print #main.current, "discard ;redraw ;down"
print #main.library, "discard ;redraw ;down"
open "capture.wav" for binary as #live
length=lof(#live)
seek #live, sampos
for n=1 to 630
samnum=asc(input$(#live, 1))
if samnum>mid then
print #main.current, "color red ;size 1; line ";xpos;" ";mid;" ";xpos;" ";samnum
else
print #main.current, "color red ;size 1; line ";xpos;" ";samnum;" ";xpos;" ";mid
end if
xpos=xpos+1
next n
close #live
return
[right]
sampos=sampos+630
if sampos>length-630 then sampos=length-630
gosub [chart]
wait
[left] sampos=sampos-630
if sampos<45 then sampos=45
gosub [chart]
wait
[quit]
close #main
end
[setRate]
r$=mciSendString$("set capture time format ms bitspersample 8")
r$=mciSendString$("set capture channels 1 samplespersec 11025")
r$=mciSendString$("set capture alignment 1 bytespersec 8000")
return
Function GetShortPathName$(lPath$)
lPath$=lPath$+chr$(0)
sPath$=space$(256)
lenPath=len(sPath$)
calldll #kernel32, "GetShortPathNameA",lPath$ as ptr,_
sPath$ as ptr,lenPath as long,r as long
GetShortPathName$=left$(sPath$,r)
end function
Function mciSendString$(s$)
buffer$=space$(1024)+chr$(0)
calldll #winmm,"mciSendStringA",s$ as ptr,buffer$ as ptr, 1028 as long, 0 as long, r as long
buffer$=left$(buffer$, instr(buffer$, chr$(0)) - 1)
if r>0 then
mciSendString$="error"
else
mciSendString$=buffer$
end if
End Function
|
|
Logged
|
|
|
|
James
New Member
member is offline
Posts: 42
|
|
Re: Recwave "talking.wav", 44100 / Stopr
« Reply #3 on: Jul 9th, 2014, 09:58am » |
|
Thanks guys!
Is this code public domain?
|
|
Logged
|
|
|
|
James
New Member
member is offline
Posts: 42
|
|
Re: Recwave "talking.wav", 44100 / Stopr
« Reply #5 on: Jul 21st, 2014, 07:20am » |
|
It seems like Vista doesn't work with the 44100 quality mciSendString, but with the low quality.
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline
Posts: 1348
|
|
Re: Recwave "talking.wav", 44100 / Stopr
« Reply #6 on: Jul 21st, 2014, 09:06am » |
|
on Jul 21st, 2014, 07:20am, James wrote:It seems like Vista doesn't work with the 44100 quality mciSendString, but with the low quality. |
|
I don't think it's the version of Windows that matters, but the capabilities of the sound hardware and drivers you have installed on your PC.
To check what audio recording formats are available go to Control Panel... Sound... Recording... [select device]... Properties... Advanced.
Richard.
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline
Posts: 1348
|
|
Re: Recwave "talking.wav", 44100 / Stopr
« Reply #8 on: Jul 21st, 2014, 4:05pm » |
|
on Jul 21st, 2014, 2:21pm, James wrote: It's not entirely clear from that link whether they upgraded the OS without any hardware change (in which case I agree it looks like an OS issue) or whether they were running Vista on a completely different PC (in which case it could still be a hardware/driver issue).
Richard.
|
|
Logged
|
|
|
|
Rod
Full Member
member is offline
Gender:
Posts: 110
|
|
Re: Recwave "talking.wav", 44100 / Stopr
« Reply #9 on: Jul 21st, 2014, 7:21pm » |
|
Quote:It seems like Vista doesn't work with the 44100 quality mciSendString, but with the low quality. |
|
If you are referring to my posted code then yes it is set to low quality recording. This was to limit the data stream for analysis and display.
If you have tried to set higher quality recording and it fails then be sure you have all of the latest drivers and windows updates installed.
I would say that almost all hardware capable of running Vista is capable of recording 44k stereo audio. That's basic cd quality, most Vista+ hardware is capable of better quality.
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline
Posts: 1348
|
|
Re: Recwave "talking.wav", 44100 / Stopr
« Reply #10 on: Jul 22nd, 2014, 01:19am » |
|
Are you certain that you're requesting a 'standard' set of parameters? For example Rod's code specifies 11025 Hz sampling with 8 bits-per-sample (I've corrected the bytespersec value which is incorrect in Rod's original listing):
Code: r$=mciSendString$("set capture time format ms bitspersample 8")
r$=mciSendString$("set capture channels 1 samplespersec 11025")
r$=mciSendString$("set capture alignment 1 bytespersec 11025") If you change only the sampling rate, to 44100 Hz, it may well not work because 8 bits-per-sample is not normal at that speed:
Code: r$=mciSendString$("set capture time format ms bitspersample 8")
r$=mciSendString$("set capture channels 1 samplespersec 44100")
r$=mciSendString$("set capture alignment 1 bytespersec 44100") To ensure correct operation you should specify 16 bits-per-sample:
Code: r$=mciSendString$("set capture time format ms bitspersample 16")
r$=mciSendString$("set capture channels 1 samplespersec 44100")
r$=mciSendString$("set capture alignment 2 bytespersec 88200") You may even find that mono recording at that sample rate is not supported, and you need to change it to stereo:
Code: r$=mciSendString$("set capture time format ms bitspersample 16")
r$=mciSendString$("set capture channels 2 samplespersec 44100")
r$=mciSendString$("set capture alignment 4 bytespersec 176400") Richard.
|
|
Logged
|
|
|
|
James
New Member
member is offline
Posts: 42
|
|
Re: Recwave "talking.wav", 44100 / Stopr
« Reply #11 on: Jul 22nd, 2014, 3:54pm » |
|
Thanks Richard for your help! It seems possible that a noncompliant bytespersec value caused the same code to work fine on an XP laptop but not another VISTA laptop.
|
|
Logged
|
|
|
|
James
New Member
member is offline
Posts: 42
|
|
Re: Recwave "talking.wav", 44100 / Stopr
« Reply #12 on: Jul 22nd, 2014, 6:55pm » |
|
I can't seem to record higher than 88kbps...
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline
Posts: 1348
|
|
Re: Recwave "talking.wav", 44100 / Stopr
« Reply #13 on: Jul 24th, 2014, 2:54pm » |
|
on Jul 22nd, 2014, 6:55pm, James wrote:I can't seem to record higher than 88kbps... |
|
It may be that MCI imposes a limit - either to ensure reliable recording or as part of the measures taken in Windows to prevent illegal ripping of music etc.
If you're recording from the microphone or line-input, the input filter and ADC may not be capable of delivering 44100 Hz quality anyway.
Richard.
|
|
Logged
|
|
|
|
James
New Member
member is offline
Posts: 42
|
|
Re: Recwave "talking.wav", 44100 / Stopr
« Reply #14 on: Aug 7th, 2014, 2:51pm » |
|
Chris, my friend and I were trying to record on his computer. He has a high-quality ZOOM microphone, and a high quality sound card/device, but I couldn't get any success.
It would be cool if Liberty Basic could record like it does playwave "soundfile.wav"
I need recording ability for one of my main programs, and now with XP going by the wayside, I'm trusting God to help me.
|
|
Logged
|
|
|
|
|