ALSA
below you'll find my lsmod info. echomixer, the alsa-toolkit utility for echo audio products did work after doing [ # alsaconf ] however, I tried to test my config simply by doing this;
# aplay -vv *
ALSA lib confmisc.c:670:(snd_func_card_driver) cannot find card '0'
ALSA lib conf.c:3500:(_snd_config_evaluate) function snd_func_card_driver returned error: No such device
ALSA lib confmisc.c:391:(snd_func_concat) error evaluating strings
ALSA lib conf.c:3500:(_snd_config_evaluate) function snd_func_concat returned error: No such device
ALSA lib confmisc.c:1070:(snd_func_refer) error evaluating name
ALSA lib conf.c:3500:(_snd_config_evaluate) function snd_func_refer returned error: No such device
ALSA lib conf.c:3968:(snd_config_expand) Evaluate error: No such device
ALSA lib pcm.c:2143:(snd_pcm_open_noupdate) Unknown PCM default
aplay: main:550: audio open error: No such device
So therer is still a missing piece.
Module Size Used by
snd_layla24 36356 0
snd_seq_oss 40084 0
snd_seq_midi 9792 0
snd_seq_midi_event 8160 2 snd_seq_oss,snd_seq_midi
snd_seq 60456 5 snd_seq_oss,snd_seq_midi,snd_seq_midi_event
snd_rawmidi 28992 2 snd_layla24,snd_seq_midi
snd_seq_device 9708 4 snd_seq_oss,snd_seq_midi,snd_seq,snd_rawmidi
firmware_class 11744 1 snd_layla24
snd_pcm_oss 52032 0
snd_mixer_oss 20704 1 snd_pcm_oss
snd_pcm 91396 2 snd_layla24,snd_pcm_oss
snd_timer 26500 2 snd_seq,snd_pcm
snd 65908 9 snd_layla24,snd_seq_oss,snd_seq,snd_rawmidi,snd_seq_device,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer
soundcore 11204 1 snd
snd_page_alloc 11304 2 snd_layla24,snd_pcm
ALSA
Dunno what snd_pcm is returning there, but you should see a separate driver for the Layla24
like this
$ lsmod
snd-seq-midi 5152 0 (unused)
snd-virmidi 2080 0
snd-seq-virmidi 5128 0 [snd-virmidi]
snd-seq-midi-event 6240 0 [snd-seq-midi snd-seq-virmidi]
snd-seq 48784 0 [snd-seq-midi snd-seq-virmidi snd-seq-midi-event]
snd-layla24 149732 3 <--------*here*
snd-pcm 85860 2 [snd-layla24] <---and pcm is using it
You don't have to recompile kernel or anything, find a driver and use insmod
Apparently there's a utils package at Alsa Project website for the Echo Layla24 that sets up everything. Have you tried that one?
also, there's an ALSA Wiki up now that may help you
Anyone working with chiptunes or console emulation?
Well for now I'm concerned about getting an authentic sound without worrying too much about emulating the specific operation of the hardware. I also want to add a few extras that the original didn't have, like vibrato, sweeping of the triangle channel, and maybe some other small odds and ends.
The pulse channel sound is simple to emulate, especially if you aren't concerned about timing their length & envelope data against other components, like the frame counter or interrupt lines. The triangle is a bit trickier to get authentic.
The noise channel is particularly difficult to emulate, at least for the inexperienced like me. The NES noise sound in itself is easy to reproduce as a sample using 4bit level quantized noise. The 2A03 actually uses a long shift register and a XOR gate to generate a new pseudo-random bitstream for noise samples. Rather than use my very own enveloping like I did for pulse and triangle channels, I will have to reproduce the native specs of the counters/timers and decay envelope modes, especially to get the looped-decay noise channel mode to sound authentic.
So I guess I will be using some of the same dataflow and control logic that the hardware uses, but I want to cut as many corners as I can right now, especially where I can easily provide userdata through the GUI instead of poking 6502 assembly. Then I can use my own, simpler methods for programmable manipulation of all of the inputs, but ideally get the same-sounding output as I would programming the actual hardware.
Right now I'm going through this document to try and get a full picture of the hardware:
http://nesdev.parodius.com/NESSOUND.txt
I believe that has everything needed to directly emulate the channels, I just gotta keep studying the hell out of it until I can determine all of the specifics on timing, mode switching, sample sizes and such.
The zenpho patch looks similar to what I want to use eventually for making real music, I'll probably refer to that a few times. I see he uses a completely diferent PWM routine than I do. Once I get the NES channels sounding properly, I plan to keep adding voices from other old sound chips I enjoy along with more extras and use it as my main synth.
Thanks alot for that headlessbarbie link. Really amazing stuff. I've had thoughts about later on trying to emulate the 2A03 hardware directly, so that I possibly could put pd on a board with a fast CPU (maybe a SuperH) that would be small enough to fit in a NES cart. Then I could use pd as just an interpreter between the user and the real live sound hardware.
Timbre conversion
@daisy said:
I have read some where that "if a voice is at same pitch and same loudness and still if one recognize that two voices are different , it is becuase of TIMBRE (tone quality)". (I agree there are other features as well who need to consider).
Timbre is another word for spectrum. The spectrum of a sound is the combination of basic sine waves that are mixed together to make it. Every sound (except a sine wave) is a mixture of sine waves. You can make any sound by adding the right sine waves together. This is called synthesis.
@daisy said:
First Question:
So how we can calculate the TIMBRE of voice? as fiddle~ object is used to determine the pitch of voice? what object is used for TIMBRE calculation?.
[fft~] object splits up the spectrum of a sound. Think of it like a prism acting on a ray of light. Sound which is a mixture of sines, like white light, goes in. A rainbow of different colours comes out. Now you can see how much red, blue, yellow or green light was in the input. That's called analysis.
So the calculation that gives the spectrum doesn't return a single number. Timbre is a vector, or list of numbers which give the frequencies and amplitudes of the sine waves in the mixture. We sometimes call these "partials".
If you use sine wave oscillators to make a bunch of new sine waves and add them together according to this recipe you get the original sound back! That's called resynthesis.
@daisy said:
Second Question:
And how one can change TIMBRE? as pitch shifting technique is used for pitch? what about timbre change?Thanks.
Many things change timbre. The simplest is a filter. A high pass filter removes all the low bits of the spectrum, a bandpass only lets through some of the sine waves in the middle, and so on...
Another way to change timbre is to do analysis with [fft~] and then shift some of the partials or remove some, and then resynthesise the sound.
@daisy said:
I have a kind of general idea (vcoder). but how to implement it? and how to change formant?.
A vocoder is a bank of filters and an analysis unit. Each partial that appears in the analysis affects the amplitude of a filter. The filter itself operates on another sound (often in real time). We can take the timbre of one sound by analysing it and get it to shape another sound that is fed through the filters. The second sound takes on some of the character of the first sound. This is called cross-synthesis.
/doc/4.fft.examples/05.sheepgoat.pd
Help -> 7.Stuff -> Sound file tools -> 6.Vocoder
Compiling new external
i have similar problem, like your suggest i try to compile and the message that return to me is this: (i have ubuntu 7.04)
viniciolindo@ASUSPRO70V:~/pd-wii$ sudo gcc -c wiimote.c -o wiimote.o
wiimote.c:24:19: error: stdio.h: Nessun file o directory
wiimote.c:25:20: error: unistd.h: Nessun file o directory
wiimote.c:26:24: error: sys/select.h: Nessun file o directory
wiimote.c:27:33: error: bluetooth/bluetooth.h: Nessun file o directory
wiimote.c:29:18: error: math.h: Nessun file o directory
wiimote.c:31:21: error: wiimote.h: Nessun file o directory
wiimote.c:47: error: expected specifier-qualifier-list before 'wiimote_t'
wiimote.c: In function 'wiimote_debug':
wiimote.c:89: error: 't_wiimote' has no member named 'connected'
wiimote.c:89: error: 't_wiimote' has no member named 'wiimoteID'
wiimote.c:90: error: 't_wiimote' has no member named 'wiimoteID'
wiimote.c:91: error: 't_wiimote' has no member named 'toggle_acc'
wiimote.c:93: error: 't_wiimote' has no member named 'toggle_ir'
wiimote.c:95: error: 't_wiimote' has no member named 'toggle_nc'
wiimote.c:98: error: 't_wiimote' has no member named 'acc_zero'
wiimote.c:98: error: 't_wiimote' has no member named 'acc_zero'
wiimote.c:98: error: 't_wiimote' has no member named 'acc_zero'
wiimote.c:98: error: 't_wiimote' has no member named 'acc_one'
wiimote.c:98: error: 't_wiimote' has no member named 'acc_one'
wiimote.c:98: error: 't_wiimote' has no member named 'acc_one'
wiimote.c:99: error: 't_wiimote' has no member named 'nc_acc_zero'
wiimote.c:99: error: 't_wiimote' has no member named 'nc_acc_zero'
wiimote.c:99: error: 't_wiimote' has no member named 'nc_acc_zero'
wiimote.c:99: error: 't_wiimote' has no member named 'nc_acc_one'
wiimote.c:99: error: 't_wiimote' has no member named 'nc_acc_one'
wiimote.c:99: error: 't_wiimote' has no member named 'nc_acc_one'
wiimote.c: At top level:
wiimote.c:107: warning: 'struct wiimote_btn_mesg' declared inside parameter list
wiimote.c:107: warning: its scope is only this definition or declaration, which is probably not what you want
wiimote.c: In function 'wiimote_btn':
wiimote.c:110: error: 't_wiimote' has no member named 'btn_atoms'
wiimote.c:110: error: 't_wiimote' has no member named 'btn_atoms'
wiimote.c:110: error: dereferencing pointer to incomplete type
wiimote.c:111: error: 't_wiimote' has no member named 'btn_atoms'
wiimote.c:111: error: 't_wiimote' has no member named 'btn_atoms'
wiimote.c:111: error: dereferencing pointer to incomplete type
wiimote.c:112: error: 't_wiimote' has no member named 'outlet_btn'
wiimote.c:112: error: 't_wiimote' has no member named 'btn_atoms'
wiimote.c: At top level:
wiimote.c:128: warning: 'struct wiimote_acc_mesg' declared inside parameter list
wiimote.c: In function 'wiimote_acc':
wiimote.c:130: error: 't_wiimote' has no member named 'toggle_acc'
wiimote.c:134: error: dereferencing pointer to incomplete type
wiimote.c:134: error: 't_wiimote' has no member named 'acc_zero'
wiimote.c:134: error: 't_wiimote' has no member named 'acc_one'
wiimote.c:134: error: 't_wiimote' has no member named 'acc_zero'
wiimote.c:135: error: dereferencing pointer to incomplete type
wiimote.c:135: error: 't_wiimote' has no member named 'acc_zero'
wiimote.c:135: error: 't_wiimote' has no member named 'acc_one'
wiimote.c:135: error: 't_wiimote' has no member named 'acc_zero'
wiimote.c:136: error: dereferencing pointer to incomplete type
wiimote.c:136: error: 't_wiimote' has no member named 'acc_zero'
wiimote.c:136: error: 't_wiimote' has no member named 'acc_one'
wiimote.c:136: error: 't_wiimote' has no member named 'acc_zero'
wiimote.c:147: error: 't_wiimote' has no member named 'acc_atoms'
wiimote.c:147: error: 't_wiimote' has no member named 'acc_atoms'
wiimote.c:148: error: 't_wiimote' has no member named 'acc_atoms'
wiimote.c:148: error: 't_wiimote' has no member named 'acc_atoms'
wiimote.c:149: error: 't_wiimote' has no member named 'acc_atoms'
wiimote.c:149: error: 't_wiimote' has no member named 'acc_atoms'
wiimote.c:150: error: 't_wiimote' has no member named 'outlet_acc'
wiimote.c:150: error: 't_wiimote' has no member named 'acc_atoms'
wiimote.c: At top level:
wiimote.c:155: warning: 'struct wiimote_ir_mesg' declared inside parameter list
wiimote.c: In function 'wiimote_ir':
wiimote.c:159: error: 't_wiimote' has no member named 'toggle_ir'
wiimote.c:162: error: 'WIIMOTE_IR_SRC_COUNT' undeclared (first use in this function)
wiimote.c:162: error: (Each undeclared identifier is reported only once
wiimote.c:162: error: for each function it appears in.)
wiimote.c:164: error: dereferencing pointer to incomplete type
wiimote.c:166: error: 't_wiimote' has no member named 'ir_atoms'
wiimote.c:166: error: 't_wiimote' has no member named 'ir_atoms'
wiimote.c:167: error: 't_wiimote' has no member named 'ir_atoms'
wiimote.c:167: error: 't_wiimote' has no member named 'ir_atoms'
wiimote.c:167: error: dereferencing pointer to incomplete type
wiimote.c:168: error: 't_wiimote' has no member named 'ir_atoms'
wiimote.c:168: error: 't_wiimote' has no member named 'ir_atoms'
wiimote.c:168: error: dereferencing pointer to incomplete type
wiimote.c:169: error: 't_wiimote' has no member named 'ir_atoms'
wiimote.c:169: error: 't_wiimote' has no member named 'ir_atoms'
wiimote.c:169: error: dereferencing pointer to incomplete type
wiimote.c:170: error: 't_wiimote' has no member named 'outlet_ir'
wiimote.c:170: error: 't_wiimote' has no member named 'ir_atoms'
wiimote.c: At top level:
wiimote.c:177: warning: 'struct wiimote_nunchuk_mesg' declared inside parameter list
wiimote.c: In function 'wiimote_nunchuk':
wiimote.c:181: error: dereferencing pointer to incomplete type
wiimote.c:181: error: 't_wiimote' has no member named 'nc_acc_zero'
wiimote.c:181: error: 't_wiimote' has no member named 'nc_acc_one'
wiimote.c:181: error: 't_wiimote' has no member named 'nc_acc_zero'
wiimote.c:182: error: dereferencing pointer to incomplete type
wiimote.c:182: error: 't_wiimote' has no member named 'nc_acc_zero'
wiimote.c:182: error: 't_wiimote' has no member named 'nc_acc_one'
wiimote.c:182: error: 't_wiimote' has no member named 'nc_acc_zero'
wiimote.c:183: error: dereferencing pointer to incomplete type
wiimote.c:183: error: 't_wiimote' has no member named 'nc_acc_zero'
wiimote.c:183: error: 't_wiimote' has no member named 'nc_acc_one'
wiimote.c:183: error: 't_wiimote' has no member named 'nc_acc_zero'
wiimote.c:194: error: dereferencing pointer to incomplete type
wiimote.c:194: error: 'WIIMOTE_NUNCHUK_BTN_C' undeclared (first use in this function)
wiimote.c:195: error: dereferencing pointer to incomplete type
wiimote.c:195: error: 'WIIMOTE_NUNCHUK_BTN_Z' undeclared (first use in this function)
wiimote.c:196: error: 't_wiimote' has no member named 'outlet_nc_btn'
wiimote.c:196: error: dereferencing pointer to incomplete type
wiimote.c:198: error: 't_wiimote' has no member named 'nc_acc_atoms'
wiimote.c:198: error: 't_wiimote' has no member named 'nc_acc_atoms'
wiimote.c:199: error: 't_wiimote' has no member named 'nc_acc_atoms'
wiimote.c:199: error: 't_wiimote' has no member named 'nc_acc_atoms'
wiimote.c:200: error: 't_wiimote' has no member named 'nc_acc_atoms'
wiimote.c:200: error: 't_wiimote' has no member named 'nc_acc_atoms'
wiimote.c:201: error: 't_wiimote' has no member named 'outlet_nc_acc'
wiimote.c:201: error: 't_wiimote' has no member named 'nc_acc_atoms'
wiimote.c:203: error: 't_wiimote' has no member named 'nc_stick_atoms'
wiimote.c:203: error: 't_wiimote' has no member named 'nc_stick_atoms'
wiimote.c:203: error: dereferencing pointer to incomplete type
wiimote.c:204: error: 't_wiimote' has no member named 'nc_stick_atoms'
wiimote.c:204: error: 't_wiimote' has no member named 'nc_stick_atoms'
wiimote.c:204: error: dereferencing pointer to incomplete type
wiimote.c:205: error: 't_wiimote' has no member named 'outlet_nc_stick'
wiimote.c:205: error: 't_wiimote' has no member named 'nc_stick_atoms'
wiimote.c: At top level:
wiimote.c:219: warning: 'union wiimote_mesg' declared inside parameter list
wiimote.c: In function 'wiimote_callback':
wiimote.c:223: error: dereferencing pointer to incomplete type
wiimote.c:224: error: 'WIIMOTE_MESG_STATUS' undeclared (first use in this function)
wiimote.c:225: error: dereferencing pointer to incomplete type
wiimote.c:225: error: 'WIIMOTE_BATTERY_MAX' undeclared (first use in this function)
wiimote.c:226: error: dereferencing pointer to incomplete type
wiimote.c:227: error: 'WIIMOTE_EXT_NONE' undeclared (first use in this function)
wiimote.c:230: error: 'WIIMOTE_EXT_NUNCHUK' undeclared (first use in this function)
wiimote.c:232: error: 't_wiimote' has no member named 'wiimote'
wiimote.c:232: error: 'WIIMOTE_RW_REG' undeclared (first use in this function)
wiimote.c:232: error: 'WIIMOTE_RW_DECODE' undeclared (first use in this function)
wiimote.c:236: error: 't_wiimote' has no member named 'nc_acc_zero'
wiimote.c:237: error: 't_wiimote' has no member named 'nc_acc_zero'
wiimote.c:238: error: 't_wiimote' has no member named 'nc_acc_zero'
wiimote.c:239: error: 't_wiimote' has no member named 'nc_acc_one'
wiimote.c:240: error: 't_wiimote' has no member named 'nc_acc_one'
wiimote.c:241: error: 't_wiimote' has no member named 'nc_acc_one'
wiimote.c:244: error: 'WIIMOTE_EXT_CLASSIC' undeclared (first use in this function)
wiimote.c:247: error: 'WIIMOTE_EXT_UNKNOWN' undeclared (first use in this function)
wiimote.c:252: error: 'WIIMOTE_MESG_BTN' undeclared (first use in this function)
wiimote.c:253: error: dereferencing pointer to incomplete type
wiimote.c:255: error: 'WIIMOTE_MESG_ACC' undeclared (first use in this function)
wiimote.c:256: error: dereferencing pointer to incomplete type
wiimote.c:258: error: 'WIIMOTE_MESG_IR' undeclared (first use in this function)
wiimote.c:259: error: dereferencing pointer to incomplete type
wiimote.c:261: error: 'WIIMOTE_MESG_NUNCHUK' undeclared (first use in this function)
wiimote.c:262: error: dereferencing pointer to incomplete type
wiimote.c:264: error: 'WIIMOTE_MESG_CLASSIC' undeclared (first use in this function)
wiimote.c: At top level:
wiimote.c:272: warning: 'union wiimote_mesg' declared inside parameter list
wiimote.c: In function 'wiimote_callback_0':
wiimote.c:272: warning: passing argument 2 of 'wiimote_callback' from incompatible pointer type
wiimote.c: At top level:
wiimote.c:273: warning: 'union wiimote_mesg' declared inside parameter list
wiimote.c: In function 'wiimote_callback_1':
wiimote.c:273: warning: passing argument 2 of 'wiimote_callback' from incompatible pointer type
wiimote.c: At top level:
wiimote.c:274: warning: 'union wiimote_mesg' declared inside parameter list
wiimote.c: In function 'wiimote_callback_2':
wiimote.c:274: warning: passing argument 2 of 'wiimote_callback' from incompatible pointer type
wiimote.c: At top level:
wiimote.c:275: warning: 'union wiimote_mesg' declared inside parameter list
wiimote.c: In function 'wiimote_callback_3':
wiimote.c:275: warning: passing argument 2 of 'wiimote_callback' from incompatible pointer type
wiimote.c: At top level:
wiimote.c:276: warning: 'union wiimote_mesg' declared inside parameter list
wiimote.c: In function 'wiimote_callback_4':
wiimote.c:276: warning: passing argument 2 of 'wiimote_callback' from incompatible pointer type
wiimote.c: At top level:
wiimote.c:277: warning: 'union wiimote_mesg' declared inside parameter list
wiimote.c: In function 'wiimote_callback_5':
wiimote.c:277: warning: passing argument 2 of 'wiimote_callback' from incompatible pointer type
wiimote.c: At top level:
wiimote.c:278: warning: 'union wiimote_mesg' declared inside parameter list
wiimote.c: In function 'wiimote_callback_6':
wiimote.c:278: warning: passing argument 2 of 'wiimote_callback' from incompatible pointer type
wiimote.c: At top level:
wiimote.c:279: warning: 'union wiimote_mesg' declared inside parameter list
wiimote.c: In function 'wiimote_callback_7':
wiimote.c:279: warning: passing argument 2 of 'wiimote_callback' from incompatible pointer type
wiimote.c: In function 'wiimote_setReportMode':
wiimote.c:292: error: 'WIIMOTE_RPT_STATUS' undeclared (first use in this function)
wiimote.c:292: error: 'WIIMOTE_RPT_BTN' undeclared (first use in this function)
wiimote.c:293: error: 't_wiimote' has no member named 'toggle_ir'
wiimote.c:293: error: 'WIIMOTE_RPT_IR' undeclared (first use in this function)
wiimote.c:294: error: 't_wiimote' has no member named 'toggle_acc'
wiimote.c:294: error: 'WIIMOTE_RPT_ACC' undeclared (first use in this function)
wiimote.c:295: error: 't_wiimote' has no member named 'toggle_nc'
wiimote.c:295: error: 'WIIMOTE_RPT_EXT' undeclared (first use in this function)
wiimote.c:298: error: 't_wiimote' has no member named 'connected'
wiimote.c:300: error: 't_wiimote' has no member named 'wiimote'
wiimote.c:300: error: 'WIIMOTE_CMD_RPT_MODE' undeclared (first use in this function)
wiimote.c: In function 'wiimote_reportAcceleration':
wiimote.c:308: error: 't_wiimote' has no member named 'toggle_acc'
wiimote.c: In function 'wiimote_reportIR':
wiimote.c:314: error: 't_wiimote' has no member named 'toggle_ir'
wiimote.c: In function 'wiimote_reportNunchuck':
wiimote.c:320: error: 't_wiimote' has no member named 'toggle_nc'
wiimote.c: In function 'wiimote_setRumble':
wiimote.c:326: error: 't_wiimote' has no member named 'connected'
wiimote.c:328: error: 't_wiimote' has no member named 'wiimote'
wiimote.c:328: error: 'WIIMOTE_CMD_RUMBLE' undeclared (first use in this function)
wiimote.c: In function 'wiimote_setLED':
wiimote.c:339: error: 't_wiimote' has no member named 'connected'
wiimote.c:341: error: 't_wiimote' has no member named 'wiimote'
wiimote.c:341: error: 'WIIMOTE_CMD_LED' undeclared (first use in this function)
wiimote.c: In function 'wiimote_doConnect':
wiimote.c:361: error: 'bdaddr_t' undeclared (first use in this function)
wiimote.c:361: error: expected ';' before 'bdaddr'
wiimote.c:364: error: 'bdaddr' undeclared (first use in this function)
wiimote.c:364: error: 'BDADDR_ANY' undeclared (first use in this function)
wiimote.c:369: error: 't_wiimote' has no member named 'wiimote'
wiimote.c:370: error: 't_wiimote' has no member named 'wiimoteID'
wiimote.c:374: error: 't_wiimote' has no member named 'wiimote'
wiimote.c:375: error: 't_wiimote' has no member named 'wiimoteID'
wiimote.c:379: error: 't_wiimote' has no member named 'wiimote'
wiimote.c:380: error: 't_wiimote' has no member named 'wiimoteID'
wiimote.c:384: error: 't_wiimote' has no member named 'wiimote'
wiimote.c:385: error: 't_wiimote' has no member named 'wiimoteID'
wiimote.c:389: error: 't_wiimote' has no member named 'wiimote'
wiimote.c:390: error: 't_wiimote' has no member named 'wiimoteID'
wiimote.c:394: error: 't_wiimote' has no member named 'wiimote'
wiimote.c:395: error: 't_wiimote' has no member named 'wiimoteID'
wiimote.c:399: error: 't_wiimote' has no member named 'wiimote'
wiimote.c:400: error: 't_wiimote' has no member named 'wiimoteID'
wiimote.c:404: error: 't_wiimote' has no member named 'wiimote'
wiimote.c:405: error: 't_wiimote' has no member named 'wiimoteID'
wiimote.c:413: error: 't_wiimote' has no member named 'wiimote'
wiimote.c:417: error: 't_wiimote' has no member named 'wiimote'
wiimote.c:417: error: 'WIIMOTE_RW_EEPROM' undeclared (first use in this function)
wiimote.c:420: error: 't_wiimote' has no member named 'acc_zero'
wiimote.c:421: error: 't_wiimote' has no member named 'acc_zero'
wiimote.c:422: error: 't_wiimote' has no member named 'acc_zero'
wiimote.c:423: error: 't_wiimote' has no member named 'acc_one'
wiimote.c:424: error: 't_wiimote' has no member named 'acc_one'
wiimote.c:425: error: 't_wiimote' has no member named 'acc_one'
wiimote.c:428: error: 't_wiimote' has no member named 'connected'
wiimote.c: In function 'wiimote_discover':
wiimote.c:441: error: 't_wiimote' has no member named 'connected'
wiimote.c: In function 'wiimote_doDisconnect':
wiimote.c:449: error: 't_wiimote' has no member named 'connected'
wiimote.c:451: error: 't_wiimote' has no member named 'wiimote'
wiimote.c:454: error: 't_wiimote' has no member named 'wiimoteID'
wiimote.c:455: error: 't_wiimote' has no member named 'connected'
wiimote.c: In function 'wiimote_new':
wiimote.c:466: error: 'bdaddr_t' undeclared (first use in this function)
wiimote.c:466: error: expected ';' before 'bdaddr'
wiimote.c:471: error: 't_wiimote' has no member named 'outlet_btn'
wiimote.c:472: error: 't_wiimote' has no member named 'outlet_acc'
wiimote.c:473: error: 't_wiimote' has no member named 'outlet_ir'
wiimote.c:474: error: 't_wiimote' has no member named 'outlet_nc_btn'
wiimote.c:475: error: 't_wiimote' has no member named 'outlet_nc_acc'
wiimote.c:476: error: 't_wiimote' has no member named 'outlet_nc_stick'
wiimote.c:479: error: 't_wiimote' has no member named 'toggle_acc'
wiimote.c:480: error: 't_wiimote' has no member named 'toggle_ir'
wiimote.c:481: error: 't_wiimote' has no member named 'toggle_nc'
wiimote.c:483: error: 't_wiimote' has no member named 'connected'
wiimote.c:484: error: 't_wiimote' has no member named 'wiimoteID'
can you help me? sorry for my english
Midi in on linux
@Gimmeapill said:
do you have the alsa module snd-seq loaded ?
lsmod|grep snd_seq
snd_seq_dummy 4996 2
snd_seq_oss 36480 5
snd_seq_midi 9984 2
snd_rawmidi 27264 3 snd_usb_lib,snd_mpu401_uart,snd_seq_midi
snd_seq_midi_event 8960 2 snd_seq_oss,snd_seq_midi
snd_seq 59120 6 snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_seq_midi_event
snd_timer 25348 3 snd_rtctimer,snd_pcm,snd_seq
snd_seq_device 9868 5 snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_rawmidi,snd_seq
snd 58372 16 snd_usb_audio,snd_hwdep,snd_mpu401,snd_mpu401_uart,snd_seq_oss,snd_intel8x0,snd_ac97_codec,snd_rawmidi,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_seq,snd_timer,snd_seq_device
Thanks, Gimmeapill, but it has been loaded all along and of course I am not getting midi.
Frozen reverb
"Frozen reverb" is a misnomer. It belongs in the Chindogu section along with real-time timestretching, inflatable dartboards, waterproof sponges and ashtrays for motorbikes. Why? Because reverb is by definition a time variant process, or a convolution of two signals one of which is the impulse response and one is the signal. Both change in time. What you kind of want is a spectral snapshot.
-
Claudes suggestion above, a large recirculating delay network running at 99.99999999% feedback.
Advantages: Sounds really good, its a real reverb with a complex evolution that's just very long.
Problems: It can go unstable and melt down the warp core. Claudes trick of zeroing teh feedback is foolproof, but it does require you to have an apropriate control level signal. Not good if you're feeding it from an audio only source.
Note: the final spectrum is the sum of all spectra the sound passes through, which might be a bit too heavy. The more sound you add to it, with a longer more changing sound, the closer it eventually gets to noise. -
A circular scanning window of the kind used in a timestretch algorithm
Advantages: It's indefinitely stable, and you can slowly wobble the window to get a "frozen but still moving" sound
Problems: Sounds crap because some periodicity from the windowing is always there.
Note: The Eventide has this in its infiniverb patch. The final spectrum is controllable, it's just some point in the input sound "frozen" by stopping the window from scanning forwards (usually when the input decays below a threshold). Take the B.14 Rockafella sampler and write your input to the table. Use an [env~]-[delta] pair to find when the
input starts to decay and then set the "precession percent" value to zero, the sound will freeze at that point. -
Resynthesised spectral snapshot
Advantages: Best technical solution, it sounds good and is indefinitely stable.
Problems: It's a monster that will eat your CPUs liver with some fava beans and a nice Chianti.
Note: 11.PianoReverb patch is included in the FFT examples. The description is something like "It punches in new partials when theres a peak that masks what's already there". You can only do this in the frequency domain. The final spectrum will be the maxima of the unique components in the last input sound that weren't in the previous sound. Just take the 11.PianoReverb patch in the FFT examples and turn the reverb time up to lots.
Just tried pd but....
> yes, probably. but now I'll try to run it on my Atari ST
Seriously try it if you get time one day. Oddly the Atari ST is still *THE* choice for some serious techno musicians. Why? The simplicity of how the UART is addressed and clocked gives it rock solid midi timing. It's something that seems to elude complex architectures even with the best preemptive scheduling, buffering etc. I've watched top producers take a midi file on floppy disk from their $5000 super Mac/PC systems to have it play back on an Atari for final mixdown. It's one of those analog vs digital type debacles where real experience of good ears trumps what "technically shouldn't be so". The ST lacks enough grunt for useful audio DSP, but as a midi processing hub or sequencer it could be an astonishingly powerful tool with pd if you can compile it.
>mhh... this is just a anthropomorphic vision of reality...
You got me.
>what I need to ask now is where I can find reference for all objects:
>I know that there's no menu of them and i have to type their name in those little boxes, but
>I need to know, at least, what objects I can create, typing their names, is it true?
Yeah that bothers me too. Even after using for it some time I forget the name of an atom and have to go looking for it. I often do something like "ls /usr/lib/pd/externs/ | grep pd_linux$ | less" to see if I actually have something. For windows likewise search the externals directory for .dll files
>so, I would like to have a list with the object identifier (for oscs, filters etc.), their
>details (kind of filters, slopes, ripples etc. for filters, as example ), their parameters (cutoff, Q, etc.)
>is there a documentation like this?
The help files are detailed, well written and easy to use. Once you know that such an object exists. Just right click any atom and select "help". Usually there's an example case.
Check these to find common atoms
http://puredata.hurleur.com/sujet-248-suggestions-noobs
http://ccrma.stanford.edu/courses/154/pd-reference.html
http://pure-data.sourceforge.net/documentation.php
>I know... but I still feel more confortable with a traditional language (C++, pascal), also
>for writing my personal VSTs (you know, for those weirdest things...) I think it's still easier to write "algorithms" with a textual language,
>without a graphical metaphore.
Raw code is not an expedient or practical way to make music. Having used Music(N), Csound, Nyquist (LISP/SCHEME), and all that stuff I can say this from the bottom of my heart after 15 years experience. Pd gives you two really important things from a software engineering point of view. It's modularity and clarity of interface in abstracting things just beats any C++ classes hands down for it's intended purpose - digital signal dataflows. Consequently you get better decoupling and better reuse. One of the few pitfalls for a trad programmer imho is that pd is very dirty on types, in a way it's one of the most badly typed languages I've ever experienced. Ironic for a tool called "pure data", but you get used to it's lovable idiosynchrocies vis lists, messages, numbers, arrays, symbols and generic "anys". Also it's scoping rules leave a lot to be desired, everythings global within one instance of the server unless you say $0- at the head of a name.
>But now I need to teach a course on "languages for electronic music" in classical, academic shool.
>they don't know DSP matchematics or something like,
>so I need to urgently search for use a more "abstract" instrument for doing the lessons...
You couldn't wish for a more appropriate tool. For non maths/physics students you can use the power of abstraction to build "black boxes" like synths, analysis tools and sequencers and then open them up later in the course. As Claude says, it takes about 9 months or more before you really take to PureData. Electronic music is BIG, really big, not as big as space but it's a discipline that just explodes in scope once you get into it. You can waste weeks writing externals in C, or designing a synth, or creating a composition method...you can get really lost on a random walk in d>2. The best way forward is to have a context and a goal. Teaching this course sounds like an excellent vehicle to focus your scope.
>Tried also Jmax but on Windows (required OS, because > 95% students use billgatesware ) is quite unstable
I would make it "unrequired". Put your foot down as course leader/tutor that Windows is unsuitable. In order of preference I would go with Mac, then Linux, then Win. If the students only have Windows then try Dyne:bolic ( http://dynebolic.org/ ), a minimal GNU/Linux distro that runs from a CD in RAM and comes preconfigured with PureData and a smorgasboard of other digital media tools. That said, I've seen it work really well on Windows. Once. I've no hard evidence to back this up, but I feel a disturbance in the force when Pd runs on Windows, as if a million threads cried out at once and were suddenly silenced. I don't think it likes heavily loaded machines and I guess 99% certain the reason it's unstable on Win is down to *other* things running. Hint: a music machine shouldn't double as an email server and GCHQ spyware centre. Start with a clean install and nothing else running and you may have better luck, but that will probably remain stable about as long as a schizophrenic Z-boson particle if you network it.