How to do a very simple for loop - coffeescript

I want to accomplish this in coffeescript:
for (i = 0, i < count, i++) {
doSomething();
} // count is a number
But it is always handled as an array.
Is there way to prevent this? I have tried a while loop, but it didnĀ“t work out for me.
Thanks!

First of all, you want to implement this:
for(i = 0; i < count; i++) { ... }
in CoffeeScript, not for(i = 0, ...).
There's an example of this sort of thing right in the documentation:
countdown = (num for num in [10..1])
and the JavaScript version:
var countdown, num;
countdown = (function() {
var _i, _results;
_results = [];
for (num = _i = 10; _i >= 1; num = --_i) {
_results.push(num);
}
return _results;
})();
So you just want to use this:
for i in [1..count]
doSomething()
or
doSomething() for i in [1..count]
Note the the range starts at 1 so that [1..count] gives you count iterations.

Related

flutter serial communication via bluetooth

I am sending some values from a microcontroller to a flutter app in the form of Uint8List then I convert it to. When I send values individually, I have no issue at all. however, when I send 100 values together or any number of values continuously, I get some values correct and others divided in multiple lines. I will be providing a screenshot for the result because its hard to represent it with typing.
This is the code tor receiving:
Future<void> _onDataReceived( Uint8List data ) async {
var fixedList = new List<String>.filled(6, '', growable: true);
// var fixedList1 = <Uint8List>[];
var fixed1 = new List<int>.filled(7, 0, growable: true);
// fixedList1.add(data);
if (data.length >= 7) {
for (int k = 0; k < 7; k++) {
// int x=0;
fixed1[k] = data[k+1];
l++;
}
if (l > 6) {
for (int i = 0; i <= 5; i++) {
fixedList[i] = String.fromCharCode(fixed1[i]);
fixed1[i]=0;
}
l = 0;
fixed1.clear();
print(fixedList); //fixedList1.clear();
}
}
}
Anyone knows what is going on here?

Audioworklet loop

I'm trying to create an audioworklet that loops a single instance of a sound to create a sort of sustain effect. No matter how many sections of the input I loop, I keep hearing a blip type skipping sound. How many calls to the processor is one instance?
To give you an idea, this is what I have so far:
constructor() {
super();
this.sound = [];
this.count = 20;
this.step = [0, 0];
}
process(inputs, outputs, parameters) {
if (inputs && inputs.length) {
for (var i = 0; i < inputs[0].length; i++) {
var input = inputs[0][i];
var output = outputs[0][i];
if (!this.sound[i]) {
this.sound[i] = [];
}
if (this.sound[i].length < this.count) {
this.sound[i].push([]);
for (var j = 0; j < input.length; j++) {
this.sound[i][this.sound[i].length - 1][j] = input[j];
}
} else if (this.sound[i]) {
var s = this.sound[i][this.step[i] % this.sound[i].length];
for (var j = 0; j < s.length; j++) {
output[j] = s[j];
}
this.step[i]++;
}
}
}
return true;
}
So the idea is that I capture the incoming input in an array of N length for each channel(in my case there are 2 channels). Then once that array is full, I cycle through that array to fill the output until the node is disabled.
Thanks for the fiddle. Very helpful.
I didn't look to see what was causing the clicks, but I took your example and modified it very slightly like so:
// #channels 2
// #duration 1.0
// #sampleRate 44100
var bufferSize = 4096;
let ctx = context;
let osc = ctx.createOscillator();
osc.start();
let myPCMProcessingNode = ctx.createScriptProcessor(bufferSize, 2, 2);
let _count = 1;
var sound = [];
var count = _count++;
console.log(count)
var hesitate = 0;
var step = [0, 0];
//Logic to pay attention to
myPCMProcessingNode.onaudioprocess = function(e) {
for(var i = 0; i<2; i++){
var input = e.inputBuffer.getChannelData(i);
var output = e.outputBuffer.getChannelData(i);
if (!sound[i]) {
sound[i] = [];
}
if (sound[i].length < count) {
sound[i].push([]);
for (var j = 0; j < input.length; j++) {
sound[i][sound[i].length - 1][j] = input[j];
}
} else if (sound[i]) {
var s = sound[i][step[i] % sound[i].length];
for (var j = 0; j < s.length; j++) {
output[j] = s[j];
}
step[i]++;
}
}
}
//To hear
osc.connect(myPCMProcessingNode).connect(ctx.destination);
I pasted this in the code window at https://hoch.github.io/canopy. Press the top left button (arrow) to the left of the code window, and you can see the rendered audio. You can see that the output (frequency is 10 instead of 440 to make it easier to see) is discontinuous. This causes the clicks you hear. You can also change the frequency to 100 and find discontinuities in the output.
I hope this is enough to help you figure out what's wrong with your buffering.
An alternative is to create an AudioBufferSourceNode with an AudioBuffer of the basic sample. You can set the AudioBufferSourceNode to loop the whole buffer. This doesn't solve the clicking problem, but it is somewhat simpler.
But this is a general problem of looping any buffer. Unless you arrange the last sample to be close to the first sample, you will hear clicks when you wrap around. You either need to grab chunks where the first and last samples are nearly the same, or modified the chunks so they ramp up at the beginning in some way and ramp down at the end in some way.

Dart equivalent getting index in List with for statement and .map or .forEach

In this sample for statement, I can find out the index when if statement returns true:
final List<Cart> cart = box.values.toList();
int ix = 0;
for (int i = 0; i <= cart.length - 1; i++) {
if(cart[i].id == products[productIndex].id){
ix = i;
}
}
Now, my question is: how can I implement this code with .map or .forEach?
int ix = cart.forEach((cart)
{
cart.id == widget.storeCategories[index].products[productIndex].id ? ++ix:ix;
}
);
You can do something like this.
final List<int> list = [1,2,3,4,5,6,7,8];
list.asMap().forEach((index,item){
print("$index: $item");
});

FLASH PROFESSIONAL CS6 using ACTIONSCRIPT 3

var theXML:XML = new XML();
theXML.ignoreWhite = true;
theXML.onLoad = function()
{
var nodes = this.firstChild.childNodes;
for(i = 0; i < nodes.length; i++)
{
theList.addItem(nodes[i].firstChild.nodeValue, i);
}
};
theXML.load("http://localhost/xampp/phpflash/account.php");
These are the errors:
-1120: Access of undefined property i.
-1137: Incorrect number of arguments. Expected no more than 1.
I'm so newbie on this subject. Please help me with your kind and consideration.
1: you should declare i.
2: addItem function should only have one argument.
var theXML:XML = new XML();
theXML.ignoreWhite = true;
theXML.onLoad = function()
{
var nodes = this.firstChild.childNodes;
for(var i:int = 0; i < nodes.length; i++)
{
theList.addItem(nodes[i].firstChild.nodeValue);
}
};
theXML.load("http://localhost/xampp/phpflash/account.php");

One line coffeescript "return if" iterating an array

This is my code (not working)
return monitor if (monitor.uuid is $scope.selectedMonitor) for monitor in $scope.monitors
I want to return monitor if the if is true and I'm trying to do in one single line. Is it possibile?
You could use the when keyword:
getSelectedMonitor = ->
return monitor for monitor in $scope.monitors when monitor.uuid is $scope.selectedMonitor
This generates the following JS:
var getSelectedMonitor = function() {
var monitor, _i, _len, _ref;
_ref = $scope.monitors;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
monitor = _ref[_i];
if (monitor.uuid === $scope.selectedMonitor) {
return monitor;
}
}
};