Forum: Ruby Generate a tone using ruby?

Posted by Jeremiah Dodds (kaens)
on 2006-07-27 00:05
Hey everyone, I'm looking for a simple way to generate a tone in ruby . 
. . any suggestions?
Posted by William James (Guest)
on 2006-07-27 00:35
(Received via mailing list)
Jeremiah Dodds wrote:
> Hey everyone, I'm looking for a simple way to generate a tone in ruby .
>  . any suggestions?
> 
> -- 
> Posted via http://www.ruby-forum.com/.

 print "\a"
Posted by Jeremiah Dodds (kaens)
on 2006-07-27 01:19
William James wrote:
> Jeremiah Dodds wrote:
>> Hey everyone, I'm looking for a simple way to generate a tone in ruby .
>>  . any suggestions?
>> 
>> -- 
>> Posted via http://www.ruby-forum.com/.
> 
>  print "\a"

Well, yeah sure. What I'd like to be able to do is generate a tone of a 
specific frequency. Like an A note, or a D sharp.
Posted by William James (Guest)
on 2006-07-27 02:43
(Received via mailing list)
Jeremiah Dodds wrote:
> Well, yeah sure. What I'd like to be able to do is generate a tone of a
> specific frequency. Like an A note, or a D sharp.
>
>
> --
> Posted via http://www.ruby-forum.com/.

require "Win32API"
Beep = Win32API.new("kernel32", "Beep", ["I", "I"], 'v')
def beep freq, duration
  Beep.call(freq, duration)
end

beep 600, 400
Posted by Hans Fugal (Guest)
on 2006-07-27 02:47
(Received via mailing list)
Jeremiah Dodds wrote:
> specific frequency. Like an A note, or a D sharp.
> 
> 

I presume you want to play it out the speaker? I'm not sure if there's a
portable way to do that, but in most unices it would be a matter of
sending the audio data for that frequency to a special file, e.g.
/dev/dsp. Or perhaps you want to save to a file. In either case, esp.
the latter, ruby/audio would be worth a look.

http://hans.fugal.net/src/ruby-audio/
Posted by Jeremiah Dodds (kaens)
on 2006-07-27 03:04
Thanks William and Hans. William, if I was on windows that probably 
would've helped.

Hans, I don't necessarily need to save to file - it could be handy 
though. I'll check out ruby-audio.

I really need to learn not to post these help requests when I'm 
sleep-deprived - I leave out vital information like what exactly I want 
to do, and what OS I'm running on.

I want to generate the sound real-time - so I guess I'll need to figure 
out how to send it to /dev/dsp or /dev/audio or whatnot.
Posted by Ico (Guest)
on 2006-07-27 08:33
(Received via mailing list)
Jeremiah Dodds <apatheticagnostic@gmail.com> wrote:
> I want to generate the sound real-time - so I guess I'll need to figure 
> out how to send it to /dev/dsp or /dev/audio or whatnot.

Something like this might work on *unix :

------------------------------------------------------------

Samplerate = 8000

def beep(frequency, amplitude, duration)

        f = File.open("/dev/dsp", "w")

        wave = ""

        0.step(duration, 1.0/Samplerate) do |t|
                y = Math.sin(t * frequency) * 50 + 127;
                wave << y.to_i.chr
        end

        f.write(wave)
end

beep(2000, 100, 1)

------------------------------------------------------------

this code assumes the default settings of your soundcard are 8000 hz, 8
bits samples, signed, one channel. If you want more control over these
values, you will have to do fiddling with OSS IOCTL's or alsa libraries.
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.