[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

ruby midi problem

rick_2047

12/20/2008 7:47:00 AM

Ok i was going through the book "Ruby practical Projects" and right at
the first chapter i had this problem. The first chapter is all about
calling the alsa raw midi functions in ruby to play midi from ruby. I
think i did everything right but still i get no sound. I debuged my
project but at the lines when the function call is made nothing
happens, there is not even an error. Can anybody give me any pointers
to what should i do. Here is my code ..
1 require 'dl/import'
2
3 class LiveMIDI
4 ON = 0x90
5 OFF = 0x80
6 PC = 0xC0
7
8 def initialize
9 open
10 end
11
12 def note_on(channel, note, velocity=64)
13 message(ON | channel, note, velocity)
14 end
15
16 def note_off(channel, note, velocity=64)
17 message(OFF | channel, note, velocity)
18 end
19
20 def program_change(channel, preset)
21 message(PC | channel, preset)
22 end
23 end
24
25 if RUBY_PLATFORM.include?('mswin')
26 class LiveMIDI
27 # Windows code here
28 module C
29 extend DL::Importable
30 dlload 'winmm'
31
32
33 extern "int midiOutOpen(HMIDIOUT*, int,
int, int, int)"
34 extern "int midiOutClose(int)"
35 extern "int midiOutShortMsg(int, int)"
36 end
37 def open
38 @device = DL.malloc(DL.sizeof('I'))
39 C.midiOutOpen(@device, -1, 0, 0, 0)
40 end
41 def close
42 C.midiOutClose(@device.ptr.to_i)
43 end
44 def message(one, two=0, three=0)
45 message = one + (two << 8) + (three << 16)
46 C.midiOutShortMsg(@device.ptr.to_i,
message)
47 end
48 end
49
50 elsif RUBY_PLATFORM.include?('darwin')
51 class LiveMIDI
52 # Mac code here
53 end
54 elsif RUBY_PLATFORM.include?('linux')
55 class LiveMIDI
56 module C
57 extend DL::Importable
58 dlload '/usr/lib/libasound.so.2.0.0'
59
60
61 extern "int snd_rawmidi_open(void*, void*,
char*, int)"
62 extern "int snd_rawmidi_close(void*)"
63 extern "int snd_rawmidi_write(void*,
void*, int)"
64 extern "int snd_rawmidi_drain(void*)"
65 end
66
67 def open
68 @output = DL::PtrData.new(nil)
69 C.snd_rawmidi_open(nil,
@output.ref,"virtual",0)
70 end
71
72 def close
73 C.snd_rawmidi_close(@output)
74 end
75
76 def message(*args)
77 format= "C" * args.size
78 bytes = args.pack(format).to_ptr
79 C.snd_rawmidi_write(@output, bytes,
args.size)
80 C.snd_rawmidi_drain(@output)
81 end
82 end
83 else
84 raise "Couldn't find a LiveMIDI implementation for your
platform"
85 end
86
87
88 #require 'music'
89 midi = LiveMIDI.new
90 sleep(8)
91 midi.note_on(0,60,100)
92 sleep(1)
93 midi.note_off(0,60)
94 sleep(1)
95 midi.program_change(1,40)
96 midi.note_on(1,60,100)
97 sleep(1)
98 midi.note_off(1,60)
99 puts "done"

of course you could skip the windows part coz i never tested it
anyways.

3 Answers

Ben Bleything

12/21/2008 4:14:00 AM

0

On Sat, Dec 20, 2008, rick_2047 wrote:
> Ok i was going through the book "Ruby practical Projects" and right at
> the first chapter i had this problem. The first chapter is all about
> calling the alsa raw midi functions in ruby to play midi from ruby. I
> think i did everything right but still i get no sound. I debuged my
> project but at the lines when the function call is made nothing
> happens, there is not even an error. Can anybody give me any pointers
> to what should i do. Here is my code ..

A couple of things!

1) Did you follow the steps to patch the MIDI output to your
synthesizer? I've had good luck with qjackctl.

2) If you're just doing this as an exercise, cool... if not, you should
check out MIDIator, which just packages up the Practical Ruby Projects
code in a gem with some extra niceness :) But, if you're trying to
learn please do continue with the book.

Ben

rick_2047

12/21/2008 7:34:00 PM

0

I have tried qjackctl but i still don't get any sound, everything goes
fine i start timidity and qjackctl the connection is fine but i get no
audio.

On Dec 20, 8:13=A0pm, Ben Bleything <b...@bleything.net> wrote:
> On Sat, Dec 20, 2008, rick_2047 wrote:
> > Ok i was going through the book "Ruby practical Projects" and right at
> > the first chapter i had this problem. The first chapter is all about
> > calling the alsa raw midi functions in ruby to play midi from ruby. I
> > think i did everything right but still i get no sound. I debuged my
> > project but at the lines when the function call is made nothing
> > happens, there is not even an error. Can anybody give me any pointers
> > to what should i do. Here is my code ..
>
> A couple of things!
>
> 1) Did you follow the steps to patch the MIDI output to your
> synthesizer? =A0I've had good luck with qjackctl.
>
> 2) If you're just doing this as an exercise, cool... if not, you should
> check out MIDIator, which just packages up the Practical Ruby Projects
> code in a gem with some extra niceness :) =A0But, if you're trying to
> learn please do continue with the book.
>
> Ben

Ben Bleything

12/23/2008 9:40:00 PM

0

On Mon, Dec 22, 2008, rick_2047 wrote:
> I have tried qjackctl but i still don't get any sound, everything goes
> fine i start timidity and qjackctl the connection is fine but i get no
> audio.

Don't know what to tell you then, sorry. If you have access to a
Windows or OSX machine, you might want to try your code there to try to
isolate it to being a linux problem.

Ben