its working

This commit is contained in:
Jade Rowland 2023-09-03 16:28:52 -04:00
parent 60e600c381
commit 62e3774ff7
3 changed files with 49 additions and 17 deletions

View File

@ -0,0 +1,43 @@
import { logger, parseNumeral, Pattern } from '@strudel.cycles/core';
import { Invoke } from './utils.mjs';
Pattern.prototype.osc = function () {
return this.onTrigger(async (time, hap, currentTime, cps = 1) => {
hap.ensureObjectValue();
const cycle = hap.wholeOrPart().begin.valueOf();
const delta = hap.duration.valueOf();
const controls = Object.assign({}, { cps, cycle, delta }, hap.value);
// make sure n and note are numbers
controls.n && (controls.n = parseNumeral(controls.n));
controls.note && (controls.note = parseNumeral(controls.note));
const messagesfromjs = [];
const params = [];
const offset = Math.round((time - currentTime) * 1000 - 48);
Object.keys(controls).forEach((key) => {
const val = controls[key];
const value = typeof val === 'number' ? val.toString() : val;
if (value == null) {
return;
}
params.push({
name: key,
value,
valueisnumber: typeof val === 'number',
});
});
if (params.length) {
messagesfromjs.push({ target: '/dirt/play', offset, params });
}
console.log(messagesfromjs);
if (messagesfromjs.length) {
setTimeout(() => {
Invoke('sendosc', { messagesfromjs });
});
}
});
};

View File

@ -1,9 +1,7 @@
use rosc::encoder; use rosc::encoder;
use rosc::{ OscMessage, OscPacket, OscType }; use rosc::{ OscMessage, OscPacket, OscType };
use std::net::{ SocketAddrV4, UdpSocket }; use std::net::UdpSocket;
use std::str::FromStr;
use std::time::Duration; use std::time::Duration;
use std::{ env, f32 };
use std::sync::Arc; use std::sync::Arc;
use tokio::sync::{ mpsc, Mutex }; use tokio::sync::{ mpsc, Mutex };
use tokio::time::Instant; use tokio::time::Instant;
@ -18,9 +16,7 @@ pub struct OscMsg {
pub struct AsyncInputTransmit { pub struct AsyncInputTransmit {
pub inner: Mutex<mpsc::Sender<Vec<OscMsg>>>, pub inner: Mutex<mpsc::Sender<Vec<OscMsg>>>,
} }
fn get_addr_from_arg(arg: &str) -> SocketAddrV4 {
SocketAddrV4::from_str(arg).unwrap()
}
pub fn init( pub fn init(
async_input_receiver: mpsc::Receiver<Vec<OscMsg>>, async_input_receiver: mpsc::Receiver<Vec<OscMsg>>,
mut async_output_receiver: mpsc::Receiver<Vec<OscMsg>>, mut async_output_receiver: mpsc::Receiver<Vec<OscMsg>>,
@ -44,22 +40,17 @@ pub fn init(
} }
} }
}); });
println!("cloning message queue");
let message_queue_clone = Arc::clone(&message_queue); let message_queue_clone = Arc::clone(&message_queue);
tauri::async_runtime::spawn(async move { tauri::async_runtime::spawn(async move {
println!("opening osc port");
/* ........................................................... /* ...........................................................
Open OSC Ports Open OSC Ports
............................................................*/ ............................................................*/
let sock = UdpSocket::bind("127.0.0.1:57121").unwrap();
let sock = UdpSocket::bind("localhost:57121").unwrap(); let to_addr = String::from("127.0.0.1:57120");
let to_addr = String::from("localhost:57120");
/* ........................................................... /* ...........................................................
Process queued messages Process queued messages
............................................................*/ ............................................................*/
loop { loop {
let mut message_queue = message_queue_clone.lock().await; let mut message_queue = message_queue_clone.lock().await;
println!("num messages {}", message_queue.len()); println!("num messages {}", message_queue.len());
@ -109,12 +100,10 @@ pub async fn sendosc(
) -> Result<(), String> { ) -> Result<(), String> {
let async_proc_input_tx = state.inner.lock().await; let async_proc_input_tx = state.inner.lock().await;
let mut messages_to_process: Vec<OscMsg> = Vec::new(); let mut messages_to_process: Vec<OscMsg> = Vec::new();
for m in messagesfromjs { for m in messagesfromjs {
let mut args = Vec::new(); let mut args = Vec::new();
for p in m.params { for p in m.params {
args.push(OscType::String(p.name)); args.push(OscType::String(p.name));
if p.valueisnumber { if p.valueisnumber {
args.push(OscType::Float(p.value.parse().unwrap())); args.push(OscType::Float(p.value.parse().unwrap()));
} else { } else {

View File

@ -37,10 +37,10 @@ const modules = [
import('@strudel.cycles/core'), import('@strudel.cycles/core'),
import('@strudel.cycles/tonal'), import('@strudel.cycles/tonal'),
import('@strudel.cycles/mini'), import('@strudel.cycles/mini'),
isTauri() ? import('@strudel/desktopbridge') : import('@strudel.cycles/midi'), isTauri() ? import('@strudel/desktopbridge/midibridge.mjs') : import('@strudel.cycles/midi'),
import('@strudel.cycles/xen'), import('@strudel.cycles/xen'),
import('@strudel.cycles/webaudio'), import('@strudel.cycles/webaudio'),
import('@strudel.cycles/osc'), isTauri() ? import('@strudel/desktopbridge/oscbridge.mjs') : import('@strudel.cycles/osc'),
import('@strudel.cycles/serial'), import('@strudel.cycles/serial'),
import('@strudel.cycles/soundfonts'), import('@strudel.cycles/soundfonts'),
import('@strudel.cycles/csound'), import('@strudel.cycles/csound'),