Help: Turn a signal into a list
I would like to take a signal from pfft~ and turn it into a list or vector so I can easily get the amplitude at each frequency. I am new at Max so please be clear and simple in explanation. thanks
also give a look at the msp tutorials about the fft, that should help a lot
I have looked at capture and record as well as the tutorials and I am having trouble figuring out how to access the stored data. In the attached picture I am showing the input from adc~ going through pfft~ (with FFT size of 512) and then capturing the whole spectrum (512, same as FFT size, right?). I also have a spectrograph hooked up to make sure the audio is working. I do not know how to get this data back. For instance if I want to have a live updating number of the amplitude of bin number X, how would I do that?
/Max */examples/fft-fun/sonograph.maxpat is a pretty interesting example of this. You can also use poke~ to write into a buffer~.
You can also store FFT frames into a jit.matrix and access/view them.
So I looked at the sonograph example (mentioned by mzed) and looked into jit.matrix (mentioned by christopher) and am still confused on how to actually store and retrieve the info. I feel like all the tutorials and examples I see are just barley over my head (I understand the concepts and what a jit.matrix is for example, but the implementation is not described clearly enough for me to figure it out.) If someone could do a brief example using the basic pfft example I attached in my last post, and modify it to store values and retrieve the amplitude values for a certain frequency that would be very helpful and would be greatly appreciated.
Thanks for all the help guys.
Your graphic appears to show an incorrect patch. Your pfft~ object is apparently sending out a time-domain signal (implying that the pfft~ subpatch contains a fftin~ 1 object connected to a fftout~ 1 object), so you’re capturing a snippet of the audio signal, not of the FFT.
Do you feel you understand the distinction? The FFT process (fftin~) takes some number of samples of the time-domain audio signal and converts that into the same number of complex numbers (real and imaginary pairs) representing the spectrum of that audio. At that point it shows up in the subpatch in the form of two MSP signals, but those represent the real and imaginary values of the FFT, not the original audio itself. What I think you want to do is convert the complex numbers of the FFT into magnitude and phase information, then capture/display the magnitudes, right?
Here is a patch that demonstrates that. You will first need to download the attached file and save it somewhere in the Max file search path. Then open the patch below, and try it out.
----------begin_max5_patcher---------- 1749.3oc0ZsziaaCD9r2eED5rqqodY6dKH.AnGJxgDfdHIvfVhxlIxjBRT6t MAM+16PRIYIKqG1qWG2CqWqgOzLeySxw+3gIVaDOSyrP+A5SnIS9wCSlnIoH Lo34IV6IOGDSxzSyJPreOkKslZFSReVpo+gchmJIFktcih37YyKoH3xL12oJ pX6Jx778LdLUp2Z7AhhbYI0xolPjA6X7sqSoARCCaim4MEsT8VPtX0m1v2Qe oXErPMiI170eC6aUiQ3j8ZFw5MoLRrkZf+8gGTeL8EBBuIOjIPum+6uOJ5FC FXWEXf8UvfAR5DLbuMfwaIIx7T5s1nvY0AfvyoWfv91.D3Yn+h7MJJCPCjbG EEEIiRgWWfAgPQrXJhkgXb8vYTRZvNDHb6l8Yt8LzGB1QCyioopYXrw9Stjl llmHQY6D4wgnMTjfCS2YF5i4obDQOMMI2Yn2FyB9F7jd+KTLnM4Rohj.sMkr AFE3DEagDQ548t28QX0dGsZkid4RyD.yBrtbVoPGy3z.QNWK4d2VUuybWsRW q5crWo92B2Sq6WdcU8F7vZ7hAtGwPgGnU9kltca.W4Ha1X4+jPMag0FBeqE5 KWfjvoOAacKa3LxS+D4uDvTeaOqyPKZethuQvMJwU18I99cJ9YrsbPQVsnqi Rl98PRvOsFuTNeHkr4SWuxOOkT5Yc8zhIPjme1J7CdtsKBilil+xUryGRwZx MgWrpOMqy0067qP.pjmX7vCknLBWT6gzdXWS7FacsG9cDowtSqTqoveWjS50 LbicY7xgi2Xae6B3n4THiWFUtNLKYsDxfJdjlZ8ZlAYUMn.61qIJF2iMZ82. vxFguP5gE.o6AIIiApvCb4DKRRRMxSpsDEj8Ugdi7mVQhwMjvUjRoOxJWuSE UU0DLIHjppwTL4yK8sLCBpoGJWZkws1ndk9eNNtFrnVvIPgtMVD7MZXMzDLI RnbFOIklA0.QjGKbgzHRdrb8o0aMGOhDPar20G7jP8DqsorPAWwDMVohb4q6 SkkGWWVzSfSRNwZy.wHOaCIUApaho0BJ.FpBQbygpDUvdmvY6IRpjY3U64Ua JaeRJyTdTEMJm.6wtrfTQbbisxLximXjPPUGPehEJ20nzJ0HvzYIkZ.qJHJj sklIaRSR1l0jRiSDV2FrtibC5G4Pq8+J2tV9jyaNP6XTcd.mRcG3S5U9Ykdr iftcD3swx1wBCo7i4fxh40XSIYcnsB+lKDcZDtqYHOVcpc3mzUZ3K.OWnATr uFRczGerdvtVA7V0Klpso+xQBvIRcekfwlm05nqhnmiK0.hO9XImEv2.dqE0 qd5Dscpit7.rWqzIcmaZf5NLkE20NVWmsvpCt7XI30UaIEa2FSsdAP4hEGfx 1Eob9V+EHomcOa3otyjAAxgcLRHphuA6w0ln6Z89sx0PJ.dWeN9O2qexmsTU dIAPClLQVb6DznH.AQOsiZtK.MvpFKhklIQwBRHMbJhvCUCCyIOkCKTpt6.Q JRDEMEERg7rgpMt3BEHoayUL7Lze2deSopMD34CLNj+TjVwcanQvHnXJ4Q3w Y0k5ScWDssw5bVu5gGLVydZKa6EstthyO7fIEocw+5XGqaUO+9H7PO4DIglp vPGU++UJGo8nhRTjoD6NTXhk8W1wzadZxdPVkqk9TauPi6yqnC6kGtD.ukCg mK5EOKNy48.XdiKcyfhXy8ctDODL5eOU4VOnnDgQatt1iiyA2.jNC5e6LHPN 8txr7WazSysofcJhd5MXQV9+OJ7opVmad3Si4pI5o+vEs5bWE9Lgvow04n8h P5wB81TRnsgAmOaEj40cwzleyECeGrmZWnzYU7kuo0fEMHzbFXmWdwW9EwPV Uc7hN0N8V60Iv8C2Ykpj0NthFMioF+zJjLQdZPoAPQFVTSVLDp0lwq3jOUkB 4n4c3ZSpCLgrL0YZBG+gZNWN1ejbLdrr7dVXh.BrTfnXmE5FHa5eHdtW0SMe ou5BJ38B4CGgft5xDTOeSixMWOwRupm9EHmiRg5d2XCdBHua2F7EXCVnMLWB ewA5Z9TQx0U5esCpGtwZMr+4XdhuOTatiTss79wRardGNWIV1zCupFCYkQdj FtFdCPht0DoLksIWZx9TumVuz12Lb6gNilZbRlnmWdWuzswhMj3ht3Us1Sz6 jGN.hWmtep5X8dB.1OW0sdvGJBJ5T5Xi7Z9KW5xZC5vs21tnU889ivXUmsDF jg0FYnnQ2ipm95o0rBGCNdrmSAZ1xioQn4NbVraLmVNJscRZoUGK23OBtw4l wMtifaVcy3Fa6QBN3KfcL1QG0RcEmbTqzOpM5sagdWsOGdO+6C+WSs0l+ -----------end_max5_patcher-----------
(P.S. You say you’re new to Max. This is moderately complicated stuff, so you might want to start with simpler tasks.)