Open REAS opened 9 years ago
This is just happening for Stereo files. Working on a fix.
Probably this bug still isn't fixed. Same problem occurs with oscilators:
import processing.sound.*;
SinOsc soundGenerator;
float [] simonTones = { 391.995, 329.628, 261.626, 195.998 };
boolean isSoundPlaying = false;
void setup() {
size(200,200);
soundGenerator = new SinOsc(this);
}
void draw() {
background(0);
int soundNumber = -1;
if (keyPressed == true) soundNumber = 2;
if(soundNumber >= 0) {
// only startPlaying when no sound is playing
if(isSoundPlaying == false) {
soundGenerator.freq(simonTones[soundNumber]);
soundGenerator.play();
isSoundPlaying = true;
}
}
else {
if(isSoundPlaying == true) {
soundGenerator.stop();
isSoundPlaying = false;
}
}
text(soundNumber, width/2,height/2);
}
Hi Kasper! The original post here is a bug but what you are encountering is a coding mistake :] Your synth is not existing at the time you want to set the frequency for it. That why it says synth not found. You need to swap the order how you do things. You need to first start the synth and then set the frequencies. You can also set the frequencies with the play method by the way. like .play(freq).
soundGenerator.freq(simonTones[soundNumber]);
soundGenerator.play();
needs to be changed to:
soundGenerator.play();
soundGenerator.freq(simonTones[soundNumber]);
It was working in your script because the synth started with the previous freq value but still throwing that error because it couldn't set the current synth.
Furthermore all of this does not need to be in a draw loop since you're triggering things event based. Please use the keyPressed() function for that and refer to the keyboard example. You might also consider using Envelopes to avoid clicking.
Hi Wilm,
Thanks you for the answer. Although I'm not really agree. I think that when you provide a library and access to certain methods I should be able to use them without knowing the exact inner workings of the library. A library should be a black box, that can by use by calling functions in every way.
So if things need to be run in a certain order you should take care of that in the library itself when the function is called. Or at least throw a certain error message to the console that warns me.
I use Processing in teaching and I love it because of the friendliness. However I keep going back to Minim because the Sound library simply gives to much trouble. Your comment works for me, but for students just starting to learn to program this can be a major issue of demotivation (it never works!). That's a pity because it's an official library part of Processing (which I see as a certain quality standard).
I know this is a voluntary project and I hope I don't sound to rude. My criticism is meant to make the project better.
Kasper,
i'm not expressing an opinion, unfortunately is has to be like this because it is a technical issue. We can hopefully fix this by making the documentation more explicit. you can also set the frequencies in the .play() method.
Thanks. Indeed good to improve it in the documentation. And if it is possible to throw an error message that is more descriptive.
By setting the frequencies in the .play method as you mentioned seems to be undocumented: https://processing.org/reference/libraries/sound/SqrOsc_play_.html
I believe I ran into @REAS 's original bug (with loop, not oscillators) today with some MP3 files. Apart from the error message, loop() also fails to loop: The file is not (audibly) repeated.
Processing 3.2.2, Sound library 1.3.2 on Manjaro Linux without Pulseaudio or Jack, just ALSA.
@korakinos I'm also having trouble with getting stereo files to loop. Have anyone found a fix for it?
Hi I'm also encountering the same issue. This is my code:
SoundFile stringSound = new SoundFile(this, "home/pi/Downloads/string.wav");
while(true) {
if(GPIO.digitalRead(3) == GPIO.LOW && !pressed) {
pressed = true;
stringSound.loop();
} else if(GPIO.digitalRead(3) == GPIO.HIGH && pressed) {
pressed = false;
stringSound.stop();
}
}
It is supposed to loop while a button is pressed.
If I let go of the button before the sample is fully traversed, it stops, as expected.
If I hold the button down, the sample plays all the way, but only once. If I let go after the full sample has been played I get the following errors:
ERROR: /node/free: Node x not found
ERROR: /node/free: Node x+1 not found
(if i only use the button once, x is 1, if i use it twice it is 3 etc.)
Are there any other ways to loop SoundFiles?
I also ran into this problem with a stereo WAV. Any hope that this is going to be fixed soon, or a work-around is given? Maybe some callback that is called when play() is over?
We're getting this error message: ERROR: /node/set: Synth 1 not found
When a sound file is looping. For example:
We haven't been able to re-create the issue with the vibraphone.aiff file that comes with the examples. We've tried converting our files to AIFF, MP3, and WAV and the issue persists. Will send the files to you over email.