On Sun, Oct 27, 2013 at 3:18 PM, Michael Fisher <mfishe...@gmail.com> wrote:
> > On Sun, Oct 27, 2013 at 2:25 PM, Aurélien Leblond <blabl...@gmail.com>wrote: > >> Hi everyone, >> >> In my lv2 plugin, I need to communicate information from the DSP to >> the UI, but I don't want to break the DSP/UI separation principle (no >> Instance or Data access). On top of that, I'm using LVTK. >> >> The type of data I'm trying to move is a Vector of Float (buffer type >> Sound in the ttl) - but even basic information on how to transfer a >> Float from the DSP to the UI would be valuable. >> > > he, he, yeah it can get a little confusing... maybe this will help. > > // you're sending things in an atom sequence so get the size > information > // from the port buffer > > LV2_Atom_Sequence* aseq = (LV2_Atom_Sequence*) p (p_notify); > m_forge->set_buffer ((uint8_t*) aseq, aseq->atom.size); > > m_forge->sequence_head (m_notify_frame, 0); > > // sequences need a timestamp for each event added > m_forge->frame_time (0); > > Sorry, I prematurely pressed 'send' on the last message. continuing on... after forging a frame_time, just write a normal float (no blank object needed) m_forge->write_float (1604); And that should be it. From a technical standpoint, whenever writing to a sequence you MUST write the time stamp (forge->frame_time (a_timestamp_value)) before adding the 'next' event. Your ttl file has atom:Float as the buffer type. I've never used anything besides atom:Sequence. I imagine this buffer type doesn't need a sequence head forged first. Maybe David will jump in on how atom:Float bufferType'd ports are supposed to forged into and out of. I recommend, if you want to use LVTK to do atom forging, that you subclass lvtk::AtomForge and add appropriate methods to it... Here's a snippet that shows how to write patch get/set messages with a subclassed AtomForge. It also shows how to write raw midi. http://pastebin.com/C1LYtXpv -- the code in there uses small uses the nullptr macro. just change those to "0" if you're not using c++11 ... and that should be it Plugin-Side. > > > > > > > In my UI, I just want to see if I receive this data > In the port_event method, at the moment the only thing I'm doing is: > std::cout << port << " - " << format << std::endl; > > > > The port is defined in the TTL as follows: > a lv2:OutputPort, atom:AtomPort ; > atom:bufferType atom:Float ; > atom:supports <http://lv2plug.in/ns/ext/patch#Message> ; > lv2:index 1 ; > lv2:symbol "notify" ; > lv2:name "Notify" ; > > > > >> What I have do so far in the DSP (run method) >> m_forge->set_buffer((uint8_t*)p(p_notify), sizeof(float)); >> //p_notify being the atom port >> m_forge->sequence_head(m_notify_frame, 0); >> >> ForgeFrame p_frame; >> Atom p_msg = m_forge->write_blank(p_frame, 1, urids.atom_Float); >> m_forge->property_head(urids.atom_value, 0); >> m_forge->write_float(1604); //test data i'm trying to move >> m_forge->pop(p_frame); >> >> >> >> In my UI, I just want to see if I receive this data >> In the port_event method, at the moment the only thing I'm doing is: >> std::cout << port << " - " << format << std::endl; >> >> >> >> The port is defined in the TTL as follows: >> a lv2:OutputPort, atom:AtomPort ; >> atom:bufferType atom:Float ; >> atom:supports <http://lv2plug.in/ns/ext/patch#Message> ; >> lv2:index 1 ; >> lv2:symbol "notify" ; >> lv2:name "Notify" ; >> >> >> >> At the moment, the code compiles and runs without crashing (yeah!), >> but nothing happens (boo!). >> Would you guys have any ideas? >> >> Thanks in advance, >> Aurélien >> > >
_______________________________________________ Linux-audio-dev mailing list Linux-audio-dev@lists.linuxaudio.org http://lists.linuxaudio.org/listinfo/linux-audio-dev