Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SDcard: using to fill [data] objects #16

Open
grrrwaaa opened this issue Nov 25, 2020 · 26 comments
Open

SDcard: using to fill [data] objects #16

grrrwaaa opened this issue Nov 25, 2020 · 26 comments
Assignees
Labels
enhancement New feature or request

Comments

@grrrwaaa
Copy link
Contributor

Data objects could load audio data from wave, other binary, or even text files stored on SDcard if the names match.

@grrrwaaa grrrwaaa added the enhancement New feature or request label Nov 25, 2020
@grrrwaaa grrrwaaa self-assigned this Nov 25, 2020
@grrrwaaa grrrwaaa changed the title Using SDcard to fill [data] objects SDcard: using to fill [data] objects Nov 25, 2020
@manysounds
Copy link

manysounds commented Dec 23, 2020

Record *.wav to SD?
Totally random distraction, but somewhat related.

@grrrwaaa
Copy link
Contributor Author

grrrwaaa commented Feb 5, 2021

Some potential applications and impacts:

  1. Loading wavetables/one-shot buffers for sample playback. Likely [data drumloop] looks for drumloop.wav on sdcard or something like that. Impact of loading is at startup, which isn't too bad to handle.
  2. Ditto but interactively via some kind of OLED browser. This is more challenging as it can require memory reallocation when a larger file is loaded, and it requires managing processing overhead of loading while also playing audio. Might also included non-wave data such as sequencer info.
  3. Streaming input to disk / from disk to output, e.g. [in 5 sdcard]/[out 5 sdcard] -- but also needs some annotation for file name or again some OLED interface for browsing. Challenge of managing streaming overhead alongside audio processing. Simplest milestone would be an auto-recorder that increments a filename each time (like a 4ms wav recorder).
  4. Caching state between patcher loads / power cycles, including state of history and data objects, where data can be things like recorded CV or sequencer info >> see Daisy: Settings storage & recall (e.g. last used app) #9

This also suggests it might be desirable to have an OLED page displaying [data] contents. Which would be sweet for something like a shift register patch.

@DeathMeister
Copy link

Daisy would make such an awesome drum machine with its 4 outputs. Maybe controlled not with gates necessarily but more the way MakeNoise morphogene works. And I’m really eager for my param knob settings to persist through power cycle. thumbs up on this issue!

@grrrwaaa
Copy link
Contributor Author

Update: the dev branch now has the first working version of (1). It's not exactly smooth yet, but as a proof of concept I'm able to load a wav from sdcard and make it come out of the daisy sound holes.

It works as follows; for example, if you have a gen~ patcher with a [data foo], AND if there's a "foo.wav" in the same folder as the exported cpp, oopsy will notice that and insert code to auto-load a "foo.wav" (if found) from the sdcard when the patcher loads.

Lots more work to be done yet, but a minor step of progress.

@DeathMeister
Copy link

Wow that is great! And I am a NOOOOOB. How can I start using that feature?

@grrrwaaa
Copy link
Contributor Author

Update: a second way to have [data] auto-load from a wav on sdcard is to name it ending in "_wav", e.g. [data foo_wav] will load foo.wav.

Currently the [data] doesn't resize to fit the wave file itself, so make sure your [data foo_wav ] is big enough!

I'm looking into how to do auto-resizing without causing memory leaks.

@grabanton
Copy link

grabanton commented Apr 18, 2021

Hey! I try read wav file from sd card. And it's not work in my case. May be I'm doing someting wrong? I have 6 seconds test.wav file in the root of the 16gb micro sd card. And I try load it with data test_wav 288000 2 But when I boot my device I hear only silence...

image

And other issue: if I try set size of data by constant or mathematical expression, I got error:

image

image

@grrrwaaa
Copy link
Contributor Author

grrrwaaa commented Apr 21, 2021

Just a quick verification: are you on the dev branch of Oopsy? (I ask, because that bug with setting [data] size with constant expression was fixed in the dev branch a couple of weeks ago)

This example works for me (you'd need to add "drumloop.wav" to your SD card):


----------begin_max5_patcher----------
1852.3ocwYszaaiCD9r8uBBcYuj5HI+JomZw1CaA1taAJ1sGZBLnknjYKMo.
IkcRKZ9suCIkjEskbsSZydvV1bnHm4aFNu32FNHXo3NhJ.8RzmPCF7sgCFXG
xLvfp+OHXM9tDFVYmV.itgLRkHJHODbgiNubsnTyHZ6LhpF0Mj99Bha4CVh4
4AnaqHSSsKmX4mew0sVHJudchqFr.qSVQ44KjjDsaohBmNJ7BTbbn4Qz7qrO
FOaTH5VyK88gCMecwIJRIh0qIbcMWnI2Y2mfOPWWvHHxcX6SQFhIvo.qf93q
+WTFEFix0BTNg+.JEqwvTKDRMIEs7dzeKJT22MDEdHFLudlYBtVQ+pEzhLBV
GPSTq4xwqsyM30RJlgdqFynIAGA6t1BcSLeOc9L6el+SF3tI3Uoxx0LgnXwV
7FT8etI.gK0h0XMMAyX2awSERuhfR.QAVJCH+okkYYD4CMu1sNX1LMKTC3EH
N+lB8IKn2dqtslWXTNIQTxsLzjSUKLK3XvcGn433Hqs2jX6iqs34rvGIdxIa
AtnlG1fkMJWUZBVld.PagiWoofLgbSA0Mx2scXbeGUUzbNlEbQyu55X6zyEr
lNsEVEO0Y6Eavp1uCQVgPUPDXlCmz1PjJpf2ZGFDfKJZM7fVuhAW+rvtPWcQ
yPTtannlgjjMz52e2DwRfy0.aWJcn+cylDraYDoDIujZWI2ffFthkr5RiVSU
fSbubppXDnmpWffV3wr4NjvcXbr0a1Xy+pQDvfImIR9BIskAKnuJHbJuPRTv
QF3vjS.ZHmRxvkL8BOWIwi5jdVEa1IQeeKMRPtjlJ3FlvScXFtd6.+LNk8z1
BicFbbQGur6LcODUfPVpVhkFs0RFoksKbXPHX9jZdOFISWQtfx46ghZQQ+Dk
z7UG4cWJ.hqO1ZaonVTxcTW.FF5EJ7FezF7VypN06u72g4TvOIQScpf3vFhD
NFDzUpDofw7jWGkMcPIELzSHaoo5U1Mpsw.LcZQsQTPiVNklSTZ+wz3bk+HJ
88NPu0PkKqNHuPSfHmfT3OA3HBUoUqDaUUSr1PqM.rKsj1Gra6B0a7iFZx2q
oMxLJAyQRBNEEMyDODg4of6bzRpF89e+cHi2SiiG0HzeIzDH5CV6h4aOdivR
HnEVA9cIbEUaxJB0d27B.MtEg1GaWz6r5LT09dfGG3+FG3EtOOwwybIPU8Xr
0i7jlz.FTG5px41u.cva4.hRUVH7BSnc.NAKhRFj6DAgcH8MA0wuFApCH6AJ
2lEfTHrYJX98GdCxD26k8h8wmD1GetXe7SD6mccKne73exPuWlD9HOHZn8Y9
er3F8nk2nPW54StxEdaWT+mG4sXEVIjfKuo8KzsEgCRFpI4mCvjnGKl3vBmI
vrmcDQ4pmwKQwiXQL9nfyEUe5Cjl0KFEeJXTjqdknwW+biRGTaAjLy3IggGC
ph+gPUu1R8BSgmj6jZbpJkx3mQW4uleuqRraQaWITt.jHBGpraKUuB7huv48
dKkwPZB7kKBrolNo8goNPvoehPBNngL.sEYOpNDLJSJVW4ruUYPGOL6o4UK7
I5EOZ9+WAP2kThAXpvek1.wbBAvdLhQ34.9aRrADskDoIlYxJLjOJSgfD8Ar
K8F9M7OtxfxPNhDlnv.8Pb12gu6BXMbkXmID1pqsIMYhO6UEOvthDJ1z2CqB
GuqDdHG3aMMCAmZUoXvX3UUKlglog.ZsjtrzHLGTh+nd0zyOWM87mphdZnSS
aqUKJL74MfczYGvdxSK1zoEtdWocFsSOIra2CC8tgAknTlT6irJhAJzyOITi
hlxaJz8SMRH5TUBOFdH5D3ASZQ+xXBS9EmDRLqWlnZv5FTDXJ.Mcg6z0hlid
p863hqOlYBVpqaLAuCmX5AmZE5OdyKu7eTDo5xboTtEiwW9FQRowOk5RvoA5
pKeON4KXn3wKEF27v7vqvquro7O2hueqsFtiyOytlQ9ZJN4gStSqQSO21M65
a03Y1FVMYZ82OpV7YaedNlxenq17cHUewY5I2vtpzxxfHqZyOXTSs7czEunI
6ZVrD3CMT1tqOBs6l24AUUMleR69xW2WVrRWEBpwYdnmwYiU4QrO2fYkDQ1g
s8amLvD779wUuotFzPloMqoqH9To1yZuXdXmzgpVaYMe7cpVi005Txo5ltoL
YX6SxOpiE9MStIZx9MW29i+zThMllclsItw5p2q1Y7isg5gtzYmO1O9yYhA0
Mhp4rFkr01nPJipu261pxxTjJdvZ7F11n01B1TINeWq0pMZSXzjunWIEk4qZ
O9AcoymvlCIrL2zZYuQDxJGvgG06FVlWE60Ao6TEM1kVWwi.vo.2beMczMiy
UOUeEbwW07vSQYYD+jCb5s8iEVo8NHF3z1g.6I720dyYGl0oAyOyMNZR26bz
SZm2aU6YqmtKl+SamhNkcJpCs5dW+hYS16ZW16JWN75V5+pV1+ZVrYvz00qX
b.L76C+O.2FkPaB
-----------end_max5_patcher-----------

@directgumby
Copy link

Hi @grrrwaaa,

Will there be a "save to SD" coming soon ?

I ask because I would like to be able to save sequencer data/setup and reload it. Thus, I thought I would check in and see if saving to SD is possible.

Thanks,
Brett

@grrrwaaa
Copy link
Contributor Author

It's in the roadmap (see 4 above) but unlikely to be "soon", simply because of my workload.

@grabanton
Copy link

This example works for me (you'd need to add "drumloop.wav" to your SD card):

@grrrwaaa Unfortunately, this example doesn't work for me either. How can I check the health of the card reader? Maybe the problem is in the card itself? Are there any requirements for the size and type of sdcard? I use this:
https://www.amazon.com/Kingston-16GB-microSDHC-Adapter-SDCS2/dp/B07YGZHSJS

@grrrwaaa
Copy link
Contributor Author

This example works for me (you'd need to add "drumloop.wav" to your SD card):

@grrrwaaa Unfortunately, this example doesn't work for me either. How can I check the health of the card reader? Maybe the problem is in the card itself? Are there any requirements for the size and type of sdcard? I use this:
https://www.amazon.com/Kingston-16GB-microSDHC-Adapter-SDCS2/dp/B07YGZHSJS

Not sure if you missed this earlier: are you on the dev branch of Oopsy? The screenshots you posted above are the main branch, which doesn't have the SDcard support merged in yet.

Otherwise, if you are on dev, and it is a possible card / hardware issue, you might try posting questions on the Daisy forum or slack.

@simontho
Copy link

simontho commented May 8, 2021

Hi @grrrwaaa

If we want to load multiple WAVs into the same Gen~ patcher, what is the best way to achieve this? I tried creating a second buffer~ object and duplicated all of the objects inside the Gen~ patcher, then replaced the file name with another audio file in the Max library, but I have yet to get any sound from the second set of buffer/data/sample objects.

Update: Figured it out :) Just declare each sample in the Gen~ object arguments with "@buffer_wav buffername". One pair for each sample/buffer.
image

@simontho
Copy link

@grrrwaaa

I have not been able to make the "drumloop.wav" example work on my daisy patch yet. I am using the dev branch and placed a "drumloop.wav" file on both my SD card and in the same folder as sdcard.cpp (as mentioned above in one of the comments), but to no avail. My daisy patch shows a "no drumloop.wav" message. What might I be overlooking?

@simontho
Copy link

Now that I've reformatted my SD Card to MSDOS FAT-16, I am able to make use of the SD Card via the data object. It works really well :)

Have you had success in loading two .wav files from the SD Card into a single oopsy patch?

I've created a test patch using the Oopsy Patch template. While developing within Max, the two data/buffer pairs load and play simultaneously. When I attempt to flash the patch to my Daisy Patch, I run into a "compiler error".

If I remove one of the data objects inside the gen~ object and remove one of the argument pairs from the gen~ object, the patch compiles without issue.

image

<pre><code> ----------begin_max5_patcher---------- 3164.3oc6cs0iaiaE94Y9UP3WZ21INhT2rySIHoncAZ5Vros6CSBLnknsUhr nfH8bYWr42d4MYIYK4QV1Rd1fr.wWHkkNmOd34b34xr+10WMZN8ABaD3UfaA Wc0uc8UWoFRNvUlue0n03GBhwL0kMBy4YahFcidpjMqoa3wDtZRnYT8P7GSI 567nQfOYlJEyCVEkrbVFIfqmEY4N15F.DZMFMw0G5ne011QLnmmbNDZr01ag jBTjRLklNKljrjuZFrDEEkrKAEEp9Az4e9E11iji86Wes7katzb8DaEueH1L cElQNBFD0EFLN5NxXV.Mk70ijKmiSVdPN0FMQwbd5kYe02f1dk30J7DZedBM oK7TB4dwONmc3jG3Z77HYvEwTL+fbnmkhmr88UKon8VKeR9yeT46NIyvUF15 pQKhhI2QxXQzjRzpPHIMszvWU5mHwhOSU2nI2rcnnD8PvsCkQtKJ+2Wbg3LA OxEL3lLELL5AOmQE2FZHIKQrePdmzCJVULjjB+SvqIrTbf9GKWlxmt.0bmpD Drbju44XIeyYhUArIVeWFSC9BQATV4CJjQShRRyHLRBGyMz91oCIKvah4yVP S3rneUQAP4RRMyuvPg0NojGTj+axhvwaYfkYQgzDIQTYkPNb9i6V.TKq6VlY TWQBNslerPFP.KMLISvjaXywYxEp4wjRxPBoZJMt5Ta+cwjEbyzoQII6fhbZ ZySlEsb0A9syohIWen6sZF1rMI5YmIjI3yX36ph1bbbrYSZ0a+C3jn0XNgGo WBPVamjjfEL5JVPFMNtB+pm4tZlITHiGPtOJjuR8fJKLHt7nzbgnQaWkCiVR X7piwwKYUGgweTC5kFZybyd3Ybx5zXAWT8BD6NhXb1J58LyElKnUF.JLJWdO cYMdUFeGMeBUVBUNa2vtmtNToYZVTudiZ2riJ+lTJ5XaoMsYURoncoMDMYLa WkiPuQUdRYBhkKfW85cYfKmc1ts2db0oxViUTmW9fJKJF8W+AFqssQicOGX8 jm0PcEC5UMpulwoL75T1W6kUBVzxD4krq2.MJ7aYqVPz6AlLoyKHHqQG.wOi Xa.c8Zg8zZA2vMYJ6rf+LiD7CMCvVsFfqygXauR5Klpkgg6.YRRJfFqch4Vg lbWK3TO3M09IXWT1.eVg2qY+.nmvaGni1+KMdaegvazy.7Vp3Hl.DfNAPW.V QhSmuYwBR1Kb6IvGB8T5GzfOz+RIsaOPn+Azb+RIJXMtYfF1c01sSYct0Ssx ZW3SqrF0.b5e4gy+hPP3Bhktkc5yytyPoyPoW34h6aEphOA22rQOu8eay54j rKKVaDPsZs.ZSPs0o.0mQPUQosaG+IsmVGfF6su1LhY0fqrNkoxb6wkOar5G jDRdnTfk9CBFY1Be5fj6QARnyHHo4714vSiRIHG61h.MchGuSVLoHlawQIME IEEKHmudngQ2jEjKCjaQBTkcBILdTx1PPdaACHuvVszbrTgcqoBq8tPZVnNx xVWVRS5lTSjFreHMqVRZ4Kx8BUH2a2JpvtWoBm1REV8IUHu4v1Hrzm6lpQRr dpXxPuYp0TlRhE19MSFjLOeMijAkOblNADyj4bLZ9FtVmY4DPcTAJeYLcNNd mnaWWbzutf3Nxb6IHRtfTNyopzjHOjmi1VV9q0mHuZR9JBVjHuZ7HrCLZ03V TbNu29S+7O+2d6+4UfRAmSEFC1OTOpXLe2ri00BH9NxiF63nNTLb+nx04XT7 jPIL2A6Zcd9XSEb4SdT+oNN.v7zm13.BSFrSeh3xG03IQ.G6CJLcFQm5STdT xB5WAgYaVKqzBT8n2ziG8zdTeirnCX7hXp2xOH+WTR6RHORK1ZYezXObxYT5 SUbEKwQIaqsh6vE5EKl8V3mpGjcaBJKxKQwmpfVJH9f0ghuaopyvolhyPl61 fU3jDRb.ci1WbqVVXCNGRBFVwDzVaOGvJzc33MD5h8q0ghaeLMY4Ag1JW8Zw 5jJJGEQ+nxrQJqcuv2p14YqnY71+vxW2p6VsIIhuMaxNWW1pcmrOd9KXIaX2 pRqzX7iywAeYFKkPBQssLlP1mwR9QGM+R5x.eVHlD+3XbzhCaTnYkWsU+uOp F.y06v0HTc.BZzyH4fI1mjXPakBfOypkMcEdcJkx1zQmQm.+PjJwUjGzIvht .HjNCEjL3Wdy+CHKZLfvTIErjjHD9wbr3RSE5rHgf4OB9IZJ6wi0YQvOxwwQ AGvmQ3zBmmc80hD9GgftesVdmL9b587GG85bcAytGe2VECebD.ugSWK7nN.G G+nBOY.9JBHPPMhakDjucW8IeRCyxKSA05iS8mXfaUfd4G0VK7xCCt0dpyAW EZV4BzUm4fod49X1ZX16z0uV1KFVX.NKbOfVAGulGI3If9R.0i7ECipLdCtc ZeLdDY9TKrt4qdyAd7pmc+ltBNCYoiEKk0VEmpM59V9Z2C70IVwG9853760w 42qiySqNNOPd9UGc.ToEHDpP0h8.wGEJJTuge.Ts.JOhTe8jY8ZptvIbzV70 8xPYslsOsWZmaGfpMoufBMFXLfflJwkCiDMT3CH3.gDZAHSykTH5XoEcdQtr SegWHjR0pmFuLIOrShNVCDfceFNU.O8FhXh8hFWbceZ.ooh5Z5.AH+09EIz9 zpC.cm1JA8GHfPvg.6tm3bjVuoIlkmvBuy.wuUNTi1ccHxwwdJ.0th6o1.p+ jhE9lxjBZT01cyMvICpRVoKt7YJUs80VFOKXg5THD0YnY5vZ9oZvAKYFZrqw Pji1PjSegbt5i9gT5YrMI.rSBU1CEzIDjnY8Ld3o1j4zBsQMo80cffCS0aWU ezATDY+jJhto8vTtxnSAn79VSYjo5JElwcOMkQStfJitD5hzN9jqJB1Yb6rt 06PcNgJDxf.bhPrBGJNooj5A3jPfMBLOhC92u88.49QY3uXiA+KJm.3qvbcv oUAYBfyHhaAi.XjDVDWF89JM8RkHkZ2U2rrsbGaOU8e9dP2IPGjTDU6doo5M 86Rg.OTX8OlHPtHlBptQFqYArwVQ2DGBlS.XMh9wQ45AGKf8ONBDknBKcFkp Bcs7ye3c.YfXeUiXL5rhwnISJgw1cpK3FPG4Qc1QdnkIyGSOUG4QeS3IgVa1 o6HA7x3Hwv3GgI1Ylz4XOsyvj2k3ve5y94Z6XY0um8KOkqF2s776ta5Ck952 j7nN+eeBb+JJSasCPRBYf6i3qDppmoUQeeTbLfSDunMmJyjXl5MY1GEZ1CnY Bu1RoIpT6NN2dJXQFcsQidojucVsYBqQetvy2SzlIzZnVDJb3PhSlkCFWh3I Bm7DNe.zgOW4zhtLAk1IME7DCHbBT.kgeL4iI+xJInGRtiDSSkqDBaquG+vM h6gNOuKnTUJdUNDIsIWIUxBxkFDgkIeWs9iKxi7bb1mjYjGGpVgwBYiWatYx 4jYkNuln.6mm4wMtv6eVMja6oCqsSQKTczq7CYH4fc1RtyYxPdsAjqW5Nkos s2Kb0kKduTz5SZKQ.6QhvqsENeO1WAdss4F5yF8v8XVM5s97n08qTeJSffsj J756Vdo08GUeAEvoGyBxEuwaxI29gJZqtBXepr.15Mp8ZqPYeLVP5Mp.dj8P 34qCmzUF4BZro4oF8dbfrp9Xq.+i28pW9eYjL1KYQqoIyVQe46Hruvoou7uK cC6c40v1GdG3sBGw2VjAla5tEIW2KqaxuFhC95nisZAg1pbk4LEVbVbG2inp UMAyum56gAuoGf98XOO.e1zzCCWGOboa2gVV2+pO7OkAGc.J7en4OvR6mm5m 9ugqcY2Vd8pscuVD4dU8DFEGwerRcuuXAivyaXOKYG5URzWUolgY3kEUfWtn ePbTvW3qxnaVtp736ULeUm3t8mX9RYInVYjhNpMu2AxVZNcjFkGUF+ZmhOGc mbNQehUzjsuUbqxEloxXuLVfnoXdqaRkxqSpaY0yzoW110HnYw6vNr2fcuJd usSSHum7xw7fQOwC1o9GLZPdvv8evvd+AilzWX8SsHC6MvtUO4yNZ6zlmbI2 JOoGDrMOH3I9frsaAKUEvWGElRENTZTNffpLOZ5DLGqse4ToLz4hxz+AJGYY 5g1Je6bS0H+VP0N1mAQDzIuxY3ZcXAK8kSkvfsYWxjy.D.mzhmDx+b8j7ZyS 5T2PBGLcLvASIC7LIoZ9+uBSJsO17kCuMV6PyNMnjjX2owj1ooj1ugjZtYj1 sQjTGZuo+Dxe8ue8+G7U6AdK -----------end_max5_patcher----------- </code></pre>

@RyanPWM
Copy link

RyanPWM commented Jun 18, 2021

I cannot get this to work unfortunately. Sandisk ultra formatted to FAT16. drumLoop.wav onto SD card. Changed the aiff file to 16bit wav. 96khz for 96khz export if that matters. Also tried lower sample rate exports.

I do not receive an error that there is no wav file present with the export. wav file is also where .cpp file is located in source folder.

wav is in otherwise empty root directory. drumLoop.wav. Converted from .aiff to wav with RX. Max patch adjusted to be "buffer~ drumloop drumLoop.wav" and max patch is functioning fine.

@grrrwaaa
Copy link
Contributor Author

Now that I've reformatted my SD Card to MSDOS FAT-16, I am able to make use of the SD Card via the data object. It works really well :)

Have you had success in loading two .wav files from the SD Card into a single oopsy patch?

I've created a test patch using the Oopsy Patch template. While developing within Max, the two data/buffer pairs load and play simultaneously. When I attempt to flash the patch to my Daisy Patch, I run into a "compiler error".

Hi Simon,

Sorry for the delay in catching up to this.

Found the bug, and just pushed a fix -- if you git pull on the dev branch, let me know if it is working for you too.

Graham

@grrrwaaa
Copy link
Contributor Author

I cannot get this to work unfortunately. Sandisk ultra formatted to FAT16. drumLoop.wav onto SD card. Changed the aiff file to 16bit wav. 96khz for 96khz export if that matters. Also tried lower sample rate exports.

I do not receive an error that there is no wav file present with the export. wav file is also where .cpp file is located in source folder.

wav is in otherwise empty root directory. drumLoop.wav. Converted from .aiff to wav with RX. Max patch adjusted to be "buffer~ drumloop drumLoop.wav" and max patch is functioning fine.

I'm really not sure what the problem can be.

  • Could it be a case sensitivity problem? If you rename the file "drumloop.wav" instead of "drumLoop.wav", and ditto in the patcher, does it work?
  • Does the patch compile & flash to the DaisyPatch? (if not, can you share the console output, with quiet mode disabled)?
  • If it does flash to the DaisyPatch, is there any message on the final OLED page? It should be "read drumloop.wav" or "no drumloop.wav" or "bad drumloop.wav". If none of those messages are showing up, then there must be something wrong with the patcher.

The WAV loader supports 16, 24, and 32-bit PCM data. The samplerate doesn't matter (it's not used by gen~ anyway).

I just pushed an absolute minimal example to the dev branch's examples folder: https://github.com/electro-smith/oopsy/tree/dev/examples -- if you git pull that, maybe that works? Again, the file should be "drumloop.wav" not "drumLoop.wav"

@simontho
Copy link

Now that I've reformatted my SD Card to MSDOS FAT-16, I am able to make use of the SD Card via the data object. It works really well :)
Have you had success in loading two .wav files from the SD Card into a single oopsy patch?
I've created a test patch using the Oopsy Patch template. While developing within Max, the two data/buffer pairs load and play simultaneously. When I attempt to flash the patch to my Daisy Patch, I run into a "compiler error".

Hi Simon,

Sorry for the delay in catching up to this.

Found the bug, and just pushed a fix -- if you git pull on the dev branch, let me know if it is working for you too.

Graham

No Problem, Graham. I know you're busy, thanks for taking the time. I git pulled the dev branch just now, but the fix isn't working for me yet. I still get a compiler error message when trying to flash a patch with two data objects to my hardware, and I am getting compiler messages trying to flash the daisy patch blank example, so I think something didn't go quite right. I opened a new terminal window at the oopsy folder and ran "git pull". It seemed like everything updated alright, but all oopsy bpatchers are throwing compiler errors at the moment. Copied the log for one of the attempts below.

gen~: exported: Macintosh HD:/Users/simon_ho/Desktop/Gen~ Drumloop SD Card/test3.cpp
oopsy-verbose: script start patch 48kHz block48 /Users/simon_ho/Desktop/Gen~ Drumloop SD Card/test3.cpp boost
oopsy-verbose: stop success dictionary u992000849
oopsy-verbose: start success dictionary u909000854
oopsy-verbose: using build tools found in /usr/local/bin
oopsy-verbose: Target patch configured in path /Users/simon_ho/Documents/Max 8/Packages/oopsy/source/daisy.patch.json
oopsy-verbose: Building to /Users/simon_ho/Documents/Max 8/Packages/oopsy/source/build_test3_patch
oopsy-verbose: Will upload from /Users/simon_ho/Desktop/Gen~ Drumloop SD Card/test3.cpp by writing to:
oopsy-verbose: /Users/simon_ho/Documents/Max 8/Packages/oopsy/source/build_test3_patch/test3_patch.cpp
oopsy-verbose: /Users/simon_ho/Documents/Max 8/Packages/oopsy/source/build_test3_patch/Makefile
oopsy-verbose: /Users/simon_ho/Documents/Max 8/Packages/oopsy/source/build_test3_patch/build/test3.bin
oopsy-verbose: oopsy generated code
oopsy-verbose: oopsy compiling...
oopsy-verbose: compiling...
oopsy-verbose: generated code
oopsy-verbose: oopsy compiler error
oopsy-verbose: Error: Command failed: export PATH=$PATH:/usr/local/bin && make clean && make
oopsy-verbose: In function 'gen_numname',
oopsy-verbose: inlined from 'dir_register' at ../libdaisy/Middlewares/Third_Party/FatFs/src/ff.c:2339:4:
oopsy-verbose: ../libdaisy/Middlewares/Third_Party/FatFs/src/ff.c:1825:8: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
oopsy-verbose: 1825 | ns[i] = '';
oopsy-verbose: | ~~~~~~^~~~~
oopsy-verbose: ../libdaisy/Middlewares/Third_Party/FatFs/src/ff.c: In function 'dir_register':
oopsy-verbose: ../libdaisy/Middlewares/Third_Party/FatFs/src/ff.c:1796:7: note: at offset -1 to object 'ns' with size 8 declared here
oopsy-verbose: 1796 | BYTE ns[8], c;
oopsy-verbose: | ^

oopsy-verbose: In file included from test3_patch.cpp:20:
oopsy-verbose: ../genlib_daisy.h: In member function 'int oopsy::GenDaisy::run(oopsy::AppDef*, int)':
oopsy-verbose: ../genlib_daisy.h:490:24: error: 'Config' is not a member of 'daisy::UartHandler'
oopsy-verbose: 490 | daisy::UartHandler::Config config;
oopsy-verbose: | ^~~~~~
oopsy-verbose: ../genlib_daisy.h:491:4: error: 'config' was not declared in this scope
oopsy-verbose: 491 | config.baudrate = 31250;
oopsy-verbose: | ^~~~~~
oopsy-verbose: ../genlib_daisy.h:492:47: error: 'daisy::UartHandler::Config' has not been declared
oopsy-verbose: 492 | config.periph = daisy::UartHandler::Config::Peripheral::USART_1;
oopsy-verbose: | ^~~~~~
oopsy-verbose: ../genlib_daisy.h:493:47: error: 'daisy::UartHandler::Config' has not been declared
oopsy-verbose: 493 | config.stopbits = daisy::UartHandler::Config::StopBits::BITS_1;
oopsy-verbose: | ^~~~~~
oopsy-verbose: ../genlib_daisy.h:494:47: error: 'daisy::UartHandler::Config' has not been declared
oopsy-verbose: 494 | config.parity = daisy::UartHandler::Config::Parity::NONE;
oopsy-verbose: | ^~~~~~
oopsy-verbose: ../genlib_daisy.h:495:47: error: 'daisy::UartHandler::Config' has not been declared
oopsy-verbose: 495 | config.mode = daisy::UartHandler::Config::Mode::TX_RX;
oopsy-verbose: | ^~~~~~
oopsy-verbose: ../genlib_daisy.h:496:47: error: 'daisy::UartHandler::Config' has not been declared
oopsy-verbose: 496 | config.wordlength = daisy::UartHandler::Config::WordLength::BITS_8;
oopsy-verbose: | ^~~~~~
oopsy-verbose: ../genlib_daisy.h:532:26: error: 'Result' is not a member of 'daisy::UartHandler'
oopsy-verbose: 532 | daisy::UartHandler::Result res = uart.PollTx(midi_out_data + midi_out_readidx, size);
oopsy-verbose: | ^~~~~~
oopsy-verbose: ../genlib_daisy.h:533:10: error: 'res' was not declared in this scope
oopsy-verbose: 533 | if (res == daisy::UartHandler::Result::OK) {
oopsy-verbose: | ^~~
oopsy-verbose: ../genlib_daisy.h:533:37: error: 'daisy::UartHandler::Result' has not been declared
oopsy-verbose: 533 | if (res == daisy::UartHandler::Result::OK) {
oopsy-verbose: | ^~~~~~
oopsy-verbose: test3_patch.cpp: In member function 'void App_test3::mainloopCallback(oopsy::GenDaisy&, uint32_t, uint32_t)':
oopsy-verbose: test3_patch.cpp:143:21: error: 'ResetToBootloader' is not a member of 'daisy::System'
oopsy-verbose: 143 | daisy::System::ResetToBootloader();
oopsy-verbose: | ^~~~~~~~~~~~~~~~~
oopsy-verbose: make: *** [build/test3_patch.o] Error 1
oopsy-verbose:
oopsy-verbose: at ChildProcess.exithandler (child_process.js:295:12)
oopsy-verbose: at ChildProcess.emit (events.js:223:5)
oopsy-verbose: at maybeClose (internal/child_process.js:1021:16)
oopsy-verbose: at Socket. (internal/child_process.js:430:11)
oopsy-verbose: at Socket.emit (events.js:223:5)
oopsy-verbose: at Pipe. (net.js:664:12) {
oopsy-verbose: killed: false,
oopsy-verbose: code: 2,
oopsy-verbose: signal: null,
oopsy-verbose: cmd: 'export PATH=$PATH:/usr/local/bin && make clean && make'
oopsy-verbose: }
oopsy-verbose: In function 'gen_numname',
oopsy-verbose: inlined from 'dir_register' at ../libdaisy/Middlewares/Third_Party/FatFs/src/ff.c:2339:4:
oopsy-verbose: ../libdaisy/Middlewares/Third_Party/FatFs/src/ff.c:1825:8: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
oopsy-verbose: 1825 | ns[i] = '';
oopsy-verbose: | ~~~~~~^~~~~
oopsy-verbose: ../libdaisy/Middlewares/Third_Party/FatFs/src/ff.c: In function 'dir_register':
oopsy-verbose: ../libdaisy/Middlewares/Third_Party/FatFs/src/ff.c:1796:7: note: at offset -1 to object 'ns' with size 8 declared here
oopsy-verbose: 1796 | BYTE ns[8], c;
oopsy-verbose: | ^

oopsy-verbose: In file included from test3_patch.cpp:20:
oopsy-verbose: ../genlib_daisy.h: In member function 'int oopsy::GenDaisy::run(oopsy::AppDef*, int)':
oopsy-verbose: ../genlib_daisy.h:490:24: error: 'Config' is not a member of 'daisy::UartHandler'
oopsy-verbose: 490 | daisy::UartHandler::Config config;
oopsy-verbose: | ^~~~~~
oopsy-verbose: ../genlib_daisy.h:491:4: error: 'config' was not declared in this scope
oopsy-verbose: 491 | config.baudrate = 31250;
oopsy-verbose: | ^~~~~~
oopsy-verbose: ../genlib_daisy.h:492:47: error: 'daisy::UartHandler::Config' has not been declared
oopsy-verbose: 492 | config.periph = daisy::UartHandler::Config::Peripheral::USART_1;
oopsy-verbose: | ^~~~~~
oopsy-verbose: ../genlib_daisy.h:493:47: error: 'daisy::UartHandler::Config' has not been declared
oopsy-verbose: 493 | config.stopbits = daisy::UartHandler::Config::StopBits::BITS_1;
oopsy-verbose: | ^~~~~~
oopsy-verbose: ../genlib_daisy.h:494:47: error: 'daisy::UartHandler::Config' has not been declared
oopsy-verbose: 494 | config.parity = daisy::UartHandler::Config::Parity::NONE;
oopsy-verbose: | ^~~~~~
oopsy-verbose: ../genlib_daisy.h:495:47: error: 'daisy::UartHandler::Config' has not been declared
oopsy-verbose: 495 | config.mode = daisy::UartHandler::Config::Mode::TX_RX;
oopsy-verbose: | ^~~~~~
oopsy-verbose: ../genlib_daisy.h:496:47: error: 'daisy::UartHandler::Config' has not been declared
oopsy-verbose: 496 | config.wordlength = daisy::UartHandler::Config::WordLength::BITS_8;
oopsy-verbose: | ^~~~~~
oopsy-verbose: ../genlib_daisy.h:532:26: error: 'Result' is not a member of 'daisy::UartHandler'
oopsy-verbose: 532 | daisy::UartHandler::Result res = uart.PollTx(midi_out_data + midi_out_readidx, size);
oopsy-verbose: | ^~~~~~
oopsy-verbose: ../genlib_daisy.h:533:10: error: 'res' was not declared in this scope
oopsy-verbose: 533 | if (res == daisy::UartHandler::Result::OK) {
oopsy-verbose: | ^~~
oopsy-verbose: ../genlib_daisy.h:533:37: error: 'daisy::UartHandler::Result' has not been declared
oopsy-verbose: 533 | if (res == daisy::UartHandler::Result::OK) {
oopsy-verbose: | ^~~~~~
oopsy-verbose: test3_patch.cpp: In member function 'void App_test3::mainloopCallback(oopsy::GenDaisy&, uint32_t, uint32_t)':
oopsy-verbose: test3_patch.cpp:143:21: error: 'ResetToBootloader' is not a member of 'daisy::System'
oopsy-verbose: 143 | daisy::System::ResetToBootloader();
oopsy-verbose: | ^~~~~~~~~~~~~~~~~
oopsy-verbose: make: *** [build/test3_patch.o] Error 1
oopsy-verbose:
oopsy-verbose: compiler error

@grrrwaaa
Copy link
Contributor Author

There was a bump in the libdaisy version -- you'll need to rebuild libdaisy (e.g. run ./install.sh from Oopsy root).

@simontho
Copy link

Ah right, of course. Did that just now. No more compiler errors and I am able to successfully read two files at once on my daisy patch now. Thanks!

@simontho
Copy link

Hi there @grrrwaaa

I've been testing the SD card functionality during the past week and I want to share my findings so far.

  • In my first test, I used an oopsy patch very similar to the "drumloop.wav" example (except there were two instances of a data object instead of one). The daisy Patch hardware successfully read both samples 100% of the time and played back both samples simultaneously without issue.
  • In my second test, I modified the "breakbeat chopping" oopsy patch that I posted a video of on the forum. In the modified version, one of the daisy patch knobs chooses between 8 different breakbeat samples, instead of a single sample like the original. The patch works great inside Max while developing, using the buffer~ method suggested. I loaded all of the same samples onto my SD card and double-checked that I had the names correct
  • I am able to flash the patch to my Daisy Patch hardware successfully without any visible error messages on the baptcher, but when the daisy is done flashing something really weird happens with the daisy patch screen. (see photo below) The knobs/buttons no longer work and the tiny reset button stops working as well. The only way to get the hardware out of this state is to reflash the daisy with a different oopsy patch.

image

  • Screenshots of the multi-sample modified patch: (This version only has 4 samples instead of 8, as I thought testing fewer samples might change the outcome.)

image
image
image

  • I wasn't sure what exactly was causing the problem, so I tried to work thru all of the easy mistakes I could think of. I double-checked the file name and captilization on the SD card and in the Max patch. I double-checked the Max patch to make sure there weren't any obvious mistakes, etc. I recompiled and flashed the patch a dozen or so times and each time I got the same static on the daisy patch LCD screen.
  • Eventually, at some point, I removed 4 of the data object/sample instances so that there were 4 left in the patch instead of the original 8, and that made a difference. With the new 4-sample modification, the compiled Oopsy patch will load successfully after the daisy patch is powered on, maybe 1 out of every 8 times. The majority of the time, the same static appears on the screen and I have to power off the module and try again. Sometimes, the screen shows static for 20-30 seconds and then the patch loads up on the screen as normal. Sometimes the daisy reads all 4 samples successfully, and sometimes it only reads some of the samples successfully.

image
image

  • I took a video to capture the behavior but it is too large to post here, so here it is on youtube: https://youtu.be/iAPfE0xQfzQ
  • In the video, the daisy patch screen is frozen and the "reset" button is not resetting the patch. I power my rack off then on, and the daisy patch shows static on the screen. After 15-20 seconds and pressing the reset button multiple times, the static disappears and the patch appears on the screen as expected. The patch works great until my rack is powered off. When the power is cycled off and on again, the same thing happens and the static appears on the screen.

The patch: <pre><code> ----------begin_max5_patcher---------- 9430.3oc6c01jiaaj9yy9qfmt5pDmrdVhWHHXpK0Y63b4RUmurUVmOYmREmQ bzvXIQUhTyrqSE+a+.A.kHkHoHEIA4Laut7LiHojP+fFMZ.z8S+OeyMytK5i Awyr9cV+f0M27OeyM2HuT5EtQ+5als1+i2uxOV9Xy1D7bzc+iYuUcqjfOlHu 7VqUQ9Kle29GdHX27GBWI9T0Oyl8qC2rJHQ99Q5Kt0O49GC2rb9tf6STe+T2 aseqElvS+ExlIeE9Vaq+9wOnn8Im9IotTxm1Fn9XlM6vaHbgrsIZueI1YV9u 4fcZQTKi2LKsI+Tvt3vnM49zuYl+1s4t7M4dKo.y+HR9Awe6gKEtQcIzgKsK 3ovr2u2gq5uSH+IBge+NYCe1GYzYG+XhVDray9P4mj5h+q2j0jjcFa7WGDu0 +d0aNsOK614PTBRhkddo+haam9KGO9QLUzaubUz8+TfDorytXz1fMga1tKHN XShehtwe31KBdve+pj4ODsIIN7mkMAjnmpr6+ftIV5MSEBY6+q2E5u5fDrbW 3hnMoMhBcEoWN6q6GrPNRYyIuvHehM9aK4MKTBD3RE2LVHj6iuyeWZO0cqje C3ralDEsp3sN79VE7Ph91aC2r4DTLIZa02bW3xGq48dWj3lqq6yVdm3462nt 6bgRQx7X+mJh1I9qVoGxV7i+i9aBW6mDjDp5Bv1GtYvFegf9X786hVspf7pt ySkbmEBk76CdNbQxixun7JChGObalRzrC8xKBWFDmT7ZI9KiKdk3jOo.8bWZ +c5AwySBVuckPJTiyi1F+o4xac3YEiTBiSheL54X86ISmKOVbzDX9w24MEV3 5mXRTLPL1eYvgQu4sK9WCuOR7slL+a1E3+Sye1+IqhWJ+6phwSY2p7QKmYhE m6FkXl0QMtASk1Ws8N0La0lZuf41SM453NK65+q27lr+3sC.H+cAI6h1FsJL NGLe5EMOPaqLPo.Zr6vAzLiAz96Di+Kfx4uhwgXlT6E4xU5xngChcLGDKrX8 Tv7udcvFMBe7BFGfco25jhrXE.SGN.l94sN7AHd.0gIlBh+eCWeWN783KMO3 hyAtHFe3.Wro.2+6vcBG89CBHx+9jilIN+xizDdYZxNCnmEHSA1K1se8Jgek XIFe3UikSa1ZWJHCFzh50I5jxWkxr8EjYwbOLrX5GpTpIG940Jz24uYYkBNO ey79n0hAPEWah742rH3i4VSdu.Rp1YknDpgnDlSaLLYWQmOqyfvw0huJbSUK qRJFo2ubzINZ+t6y5zz8MVEEGwhJSB2bXmI9gCq33zGLZ2B0d8PaTO1f0xXU 2xbG2VlS0sL731xnU2xrG2VFo5VFZbaY3paYjwskgptkwF0VFplQ.NCRKqD6 TUzzzlMFlVAaRzJblDsB5jnUPlDsB7jnUflBsBTOncpuX142LKcO5WLWcdDy 8SR1Ed29DkqR4OPpVsu4KWEcm+pS1g6x1V82brwI+oBjZxA+k1R2G11C0iPQ o6fDWsQcryOTuzOV8ZERlK9TmG8v73Ug2W37Cu9i8a1UHoUbDmpy17WxscF4 9yaSWeHxJakgUrpvpWQXiATWpduLTqxF6bgiIEWEd8vpHewpNNYYQ4AOJa.P uy2mhRtjwQSB4VL2wEQU+jXyDqgBwFPr0Y.v1uY+pUKh94fcJbs3KMNlZKVY 5ADU7SNU.ltjADSoWCllsL2SA0uVaYVX+828iaD+2rsAA+z7c9aVDsddrPbE 2Y91U9e5N+6+oeblUvG8WucUf0C6hVa8m1ErLZ2mr9d+OsJZ2uJ15OI5P998 IQoHp0+N05Ope52KsYGq9Fden3EVe3wvGRReC+h3S8O1sO0LwJcNu6i1qVNu aaMhykVYbvx8OknO4cDsxNQ6y6btN888quSnXmIDwgKKb3xcTGNSUKMXKx+5 xP.h736nNxYybbanRbIA.w4J1BoZSZKLSEuTUa6dzbw1ZQixhLGOxsx8gSNv liu1HyoZ4iv9LL7bT6PNRcpZL0tbR41Pz4.QmyqvnywngjivRivlTkGSC4ji oY2ZeonxttCu4BaQOUsm7HlcNymjZ2fdbsGdyauvYYTbe725uSHFIh9CkBRy 2+zWfXMgfSmpxbXM2jPcgIzKNo953jnXgyew+Ri6I5M8aao6AHkZNm2ULuJG hNaw8184YUVbc.mbLv62Imm05WK76+KLN.iIrbFP7TJ0nFeBeohw8QqTN97C Bq+N1HOF5sk9Wm9wl2rBx73853uvx7JzHZtia2iLV3M1T3crZUiBPOvJ5AqG CVsUsmBeoiwAeDhIslni0A2QSauWCWpZrb+tTY0919GnwMapRkYaGTCLaWa3 UTuwZjqgfyeinS03XoSdO7XjgEJo8pcgIm6aGs7Z.22HXi5+lb+rLtIUs1oc y0N6HnZaRPsaAYlZWW5oHL6B9qRGsXLqSXjdPog.ImVAR3oSf3oh9UJoqQgG dhFEdzlFW.3g7D4IMtUXa5vGqwMMjqoieLhcCaZYcxCRq.2znofLnshlFqOY f1vzJR+vQid7szzHQia5ASMtkI0XQMevzqjvwQzHSh1z5brWcRdXU73nyATZ 6OIuJOCdB+3A4Ugae8z4y+G9K+0+5e7O78+NqbaNmbaLh+hRCwAROFhCNpE5 QUwyD57cjqhyC+Z2ahBKj195OI8AGXxNoXEvnPo7K0noA6Q8w4Aou0wp3fxC 27PzuTd9ZO3PHgpzsH3KfgdWLfYVEFmbb2za3ej9+gap3z58l04.HbQXbZry jE6E7qKtBQZ1BQ67ckAVXh+V4oQFMufMyqOtBYiNBfnbIBnCsx5Pfk9IAndQ rQyLcjihz6EecgN5yhECE8buHfDyIfYcfL7EEv6ehNOUMdaZ7gMONM9vl6uV FNW8fPSPFWn8rafLijxrZR84wAqR+P5CwEadk3FzGe2108gzQMuBbCFgd+SX YmYzCODGzK8hLyKm54ZpWNIGhPzzfXuWzWI8Xr+kxRWRGqF5n.VylWJZ7hgt 1PFrRm.cGf3m9P9ce7uLcTS65bKOeTSmtP.LBMbAMMwtOCZ5OjpzaIcTN15I TonFuFTy5Om3K9HZK3gOPLIo+TgVtsI5jwWkYyjnkKWEz5Fqx.BUOnvI6msc nQUdmiwFZ4QAKVF7KWqziktsRu5zAPYDqFEabupXm5B80Jpb2bhpcaTKQd8o LHlDt0hfcmEAd+JBn1O6siRDbtZQv8EctKj0Gpr2X9bW.QeQCeY5OiF7cMnW vOuv+9eo044gT3bHJSyrre1hQJWkqpqBeJ31k9gaNzfex+3tle7t+.5ueHcl 7iEsd+MaBVcHqlraozxkwYFUkoBpNYd0NM3b49vi+UgcRSt8ak1yV6D0nBmO wgClnlin3I+U6Chd37Dg43G+pnMKqEYK7zqEcSxX84XboT3tgxiB4KcsK89w OFsKojurx9lxvyx9b1uIL4PdFPeS9yy4pN4jlpt0m5Zp.3cL00PSEcsOeTzx xClCpYgAOKySovUgIepfu8psEQenP1omBzQcCUFfsXm+xiY1Sl928hEK8SIO tKZ+xGye8yRRnh23oyuwcKylK7vUNdBuYaywtkwYKrLLX0hTMtuJQb0.oxmh 4cyqS2rCSywI0PrqhqpU4Xp7WWXdmC83Rd+8VAzu0+fGi4T8859NEj2.gbIt yw1pE4l9GJNOGa+s9I9he8DS7i4XNU7K8IRJ9KwXnj4XuyWXQvlew5qpfm4r 9ph4vs7tmjk2eUiIDPqu5RDyXwzDlVlqVG8.qc6DDQuIFhNau7+iRR83nxNa 21XJrk+UoaGxq57PcQ71aWdjYHmkeBJ83N0FUSck6nhGECYiJjMpP1n1srQs lrUP58gU0muWZTaa8UByEVo+x+iVTp7J5QFVEhz5BVuw8NGkdgvDli32xxYY W7Zwr5L4AfgQp.h0owgM7cKKDnL1TBh3hcndGhSFJC6Rcr831DOLhIuT5e4v 3x6TR58zbdPk5XnzUQXN1Je2NtR3mbAp5VmyDpZ9g2vw9tnYm1PNNMYQPnxo KqZJySd6kM0YESeV8TnWdZzplJsvzoMbJ0SlV0U0OvTmIAS0EQcNItvKel0F L6ZSlg8hyx1vYZqY11lMi6El08hy7dwYeuvLvWdV3KNSbClMtIyH2lYkqYl4 KN6b8yPW+rz0OScsyVW0L1kOqcEyb2nYua3L3kOK9oFaN0X9Y2+RF0OM3AsH mdyplNsxstWU+ETAXAtT1qudy5MvzdIGeX96cX1uhy.NvfmnIagN8t0Xf6hd xTa57TchOQUmYjzHNwsg3ucMfKZB.t+lgEXwWFXoHoWgDWkWgx7PdvUr0Gl5 m6XO1wcDvd9D.6WDrx+S5EPgG19ARCFCH20SBRkufXmF1OfuX+vauTegKLNH 03tiJbgzaOogFGLEr+eeT7nO0JUG2S5vDzyHt1flBt17aDK2ex.+HWC5YYNF UY7f+uLMCqlJ3OREWUDGyf+zI.9+eLA7qOC8wp4dQlA8cl.n+ucJo86I+IwP FeXS.3+.I8M5cAXZNtexEalt.6IPWP3lg12e6lh9dlbxWXwuxsk1ieqqio85 mCN8q2NSj4c52E74uH5aTe9YfK+Egey5xuC3weAv2nd7SmHN7OUPes+9lA7m B60v1G8ii1M963uB9opz5v0Lmh3zvUej0WoSkLqeT75s6SrRhrjQZyON6z2X UgO03rFA04Cn8UBYSJK9o5+knUW2VwH43LlE77dyx37qR5SOi6u7Nk5upg9u P1k9vECdLYjfcF2JcUZnWqLwaiL4dJklcpLch3jIhFVlbaiLweYHSrVHStWR 0aZHRNsPjXuLDIZKDI9UKRmZJ8LZEbxIqN8trZaTYkzBYkVjWLMR6CiaQCDO FMvVz9JGrGIs71zvQr5a4lUmE0F2UvnQPo.wm7svx83ohteuFZkajc4C0Z+i dALyKpMNHkU9rMaKrM96fnWstzDw5SqjVTuKslcVBTabFBQdgXmnMd8fvuPD pVMgtWCWb3XKTn1tJd7K.gxtkKlBcU61xDw.hcaMW1uRqgmbnspq0q6k6lGu iQSOxqM4Hc34SNRNavRNRFjbjMO4HUapsiZKtgjiDRNxSanPxQdCjbjUerlP xQNhGpOjbjCzw0CIG4HFpDPxQBIGILN.RNxQcpUH4HmDvOjbjiJ9CIG4MPxQ dCjbjPxQBIGIjbjPxQBIG4qZm9gjibJf9PxQdCjbjPxQBIGIjbjCL3CIG4X6 pOjbjPxQBIG4PISPxQBIGIjbjPxQ1exJjbjcsABIGIjbjPxQBIG4fITPxQBI GIjbj8pPAIGIjbjPxQN8DVH4HG8jibgehu0I0zYDFgr4EBiCyT9OQXcsCFaK idFUFWdgjrDWaRV91ZRzRG6YFDjqnFaivbGBZDAaNWEiFrAEqodFBqypFtHY 0vUU7zmGGrRH2GK4snB0CW90BgTO0oFX6IS0.LdvxIXJ2PvmBoh1UCn30nhH KSU1R0Grxv.JrWLfhN4wMAnPLXUGVM7JdU38AzJgF1EzWbn2Rn4J5y1doovs FnPCpUIBjq8MOW6ITYHMg7zodNWMWMx0Ax1dHa6grsOe25qwrsm00Htv0QY. wwjoauQhPOcLvTI58gsAAKrdP3AgL9WB1YEFaIrQG9j3x28IqEgOEtP.VVIO FX4uN8YrhdHa5UKA3GsIvRf16SBRe9JeL4M1uHLxJc1JqesvZdvNggV8G8Ol YY7GmYc210xVzw2h5y4Kda5k1HaS52lxm5u48emUpdaTVKHS.N8S8W+7ig2+ nU7JgNr0hnmEs9cVwoPPr09sx2p5qRJXoqbOMngVmpvj6qK8SR9lt0p1.IBQ 6Xzy45H8Fi4vjK5zQsmCdzoOODbI0t2mx5QVe3DVO5p.Itbzpiqbg4Lk6q1c AgbrmfQvVwEOJjk4QOLW5darZEiH0JFI3yits1ZMjvctkjlqDH0BlHLxUZP7 tkE2wLJAQbwNTuCmjEkgcoN1dbahGFwjWJ8ubXb4cpZW0ZW33NE5Q0FZncs2 AIV.BW16nxhHGmdpyw1ker+Am1Sfx0aItqbqNy5XTcY8Quyjf1YhaRuSKLYq n4Dmqk3XFt9l7.+THRoeWWiwYMh63J2sPWuaQ4VwNGwMQptLIlS8qiiSgtkV bq6B7SrVEEssyStRw253cxVf3PjPMBS6gIaIShjzh2YfBQNWwSCTXhYVOwTH qSVDt9jCsoqy2wECrYmhrTGsJngfV1qAKkkqiZKyDVN0H4CqyTHmLUKwaW5l bzUcSJ+bDkZK0MYFZWD3Swz6tWTM0CxEyuaDUyoPdxyr6rJYoHoMOCCMg6P1 uJmHBSk1HEqIMWBkN7Iw9Tf2vddm+VK6NSACL4dzP4xYbp3nF6e.bhjPh3x1 NGrb6bhd3g3fbAAfcgf.nrszov9Lx5598H5WHJtwPwNIx.tf68Rc6dbIuFlR jfcU6yCwQ1e3fLxzftzovZYUiH5b1myIZHTsClZBmpSKX0cJrTfeaeYJVsAu HNSa.Xv0tbmFFiIkYLlLem+lEQqU6qdAavntuq5Nd5XFTwEBD7K68T28Uw5N ndpv3gqBpGjYVylq2TvF68OFEEGX4aEGrL8A+wMIQVaSIJY0vfUepUzjPaMN 6nHBGhKSA8T0vhtXalaOEv03D+cIpiSOc2XeXWz5aE+qVvjzQvD4oLm3wUUa jL99nCXIdJfkO+nexuJVd16RrRFW.Z8UqUAaVl73+0fpkR0LjnsJ.QPrdPKk 7pvChrigTqyg8LCg5QeULsCUxD+TjJ1aMDWDNEnDrjc62bemYQV0r15oNHlg Wi3SAG+iu2eUf0WhtU3A2E1PFRywQc3yZHxfkOEVCvpTznm7djfjdO5ZFmG4 SAGu2DEF24SOIy4aUbsQLCofx8dMbTdDarNHfbcyRGASLGh2qys1+.b5hM4d 66ME1a+NehSXBRGtfp.RCYlAxdSBddLH3mNMIUS2n+G82rIXUZ1tXkd1IiO6 Wq1uOGrxLQiiKMRip4PWptC4QmDzfsL916pOSGW2iZBKDCaVrzAJReEUpcwb UYMqeh0RGF001gywDGrGUtgpEBqRrL7KOt+po6pJ4hwZoGahzsgGeNAlwy2s 4Lo61bmB6B1e4u88u+u88enq.uF2Uk1RlW2OKLBeJfN+4+udAbb0kkLYra0G fi6zfQccZA+pwKmjWVGtXaT3lj3r.gwVOEnqJzqcT68mKw3LXiWa3.K9Xvaj dzVf+dtiUKroXnGaLZgsglrxT3MaKrM7sim8Xfg1sECwUykQ3oaSmWtEgSLg QDd5ni3AcP8o8dT7poBEN0Jw1k1RwVGEBt4d8Tgot3sgVUc8FgAS71Pqp7wv nNuMLPJeLLpyYscTsoMpyasyEWz0IscFJUsoALrrljcxKwpHEB4d3DVsMeQK nMNE3NFZ3tswJQ1.Vy1B4s0Nlo0vcaiUB2wfUycasdnwwPRaml13sv1PHqdi whjbQsUOzzXHqMsPLYDvPVabWzYL7ZxoMVrcFi4Tb3sECMsdnSarX6LFikcX ssW13XXalSggFiVXaafFuJ7X2186.MYJpN1scsaWzqdhGUGMFpR2liNnLRe0 TY2DZU8qwyYJxHzmvqmjqkWOcR4SKVt+YyLGudRAd8D30SfWOAd8D30SfWOG tCEG30SfWOGA0NfWOAd87ySd8j.754MSWd8j.75ogAdfWOAd8br0AAd8rWy4 pxqSXCJ+dx7.98D32SfeOGaCo.+d1O.IvumS+IjNgmOMzTP.OeB77Ivym.Oe B77Ivym.Oe1WFiAd9D34SfmOAd9bHvUfmOAd9D34yAxzIvymWOzA77Ivym.O eB77YO.e.OeB774qvs3+T99zP6wOv2mcA7lL78Y45ju.38yT0df2OuNen.d+ D38Sf2O6zoz.79Iv6m.ueB79YeIc.ue18VHv6mcqEB794DooC79YyDaf2OAd +D38y5ag.ueB79Iv6m.ueVeKD38yt2BAd+r6sPf2O6dKD38yt2BAd+r6sPf2 OmFMcf2OqdCrGad+Des79IwgeqKmb7e1Dyw6mDf2OaLuepixcDgC79Y9mB38 Sf2OAd+D38Sf2OAd+zr79IvpkedxpkXfUKuY5xpkXfUKMLvCrZIvpkisNHvp k8ZFF8M6WsZQzOKVpjQXzRpKvnk.iVBLZ4XaDEXzx9AHAFsbZOYzIrYogl9A XyRfMKA1rDXyRfMKA1rDXyx9xXLvlk.aVBrYIvlkCAtBrYIvlk.aVNPlNA1r 75gNfMKA1rDXyRfMK6A3CXyRfMKeks89mxjkFZ+8AlrrKf2jgIKOWe7E.KVh 4HfEKuRem.VrDXwRfEK6kSmA3wRfGK6EzA3wxbOFvik2.7XIvik.OVB7XYcl v.drD3wRfGKAdrr9VHvik.OVB7XIvik02BAdrr6sPfGK6dKD3wxt2BAdrr6s PfGK6dKD3wxoQSG3wxp2.aiyikK7S7K6H2QXpmCovYaUy4ZU+YZUYLPT5QPh U4WqhOpv1NCKEXdLJbLJeghtV9BEwjAZPqXHT5Egm2dAXB6BLEZiYJzrf.0S SalJ8YtGPTn.QgBDEJPTnW5TyAhBEHJTfnPegS6adTO0gA50aD8FxaRPzacl fGQ1DUHtXKScKsYtg1.GZJPdI+mozNYugetxPOlYlnqGglHgaYABG39TOnsD W9BrJPKfUlMUYfyaRGDkSgv0+Q+3nccNP5yTmUlJUYh3vm7RuJnorLriRzjP hYHcgWC480AnyUt8hFJygYSA+cR8PcczlvDg+lhl+18Ic21ol6IbkSl2Kt6v bmNTNNpyCTQ5HymHogwW7LNNCCL7Ovv+S2ga.C+O.8NwMo2AX3+InyN.C+CL 7em23Gfg+6QVWXwt8qSU9vCN49iX.49Cj6OPt+is8Sfb+mJ6ZFPt+8jJY119 P3xSxw0LLmDE+5vcnCnGw0fd.QvSjywgleqaVDb29komkcObNNh+kaOwaNW7 MJmiCw40nCoHDWMiDiZRePorWGmLg1tfMQsDRlYLqxeU42YlY.rMyftZR8dM MuNVEqOFx6RF6UxYxpAOalIcnj+ZbdjSJTTFZZDnPQAEJJnPQAEJJnPQAEJJ nPQ0WFigBEETnnfBEETnnFBbEJTTPghBJTTCUnxCEJpqF5fBEETnnfBEETnn 5A3CJTTPgh50yN6eZMhxPasOTin5B3MYpQTETEeITdnndP4g5J8XBJOTP4gB JOTc5LYzEoHn3PAEGp9.cfhCUtGCJNT2.EGJn3PAEGJn3PUmILn3PAEGJn3P AEGp5agPwgZBWbnZyPPDBpdUP0qBpdUMzOBn5U8xq5U0lAJiwz8r1XqgMJsv 13PBcLrWyZy3DJTC0dYVC0ZiZHBCE4MnHuAE4sFLkBTj2JqRo401YkMMDRay PYxXXNj1Z+FLNFhaoygSmJ4WaZ4jxGtMRaeKT+DeoU+DIs18ZSapouqvi8eK D0lV3XrFJTqNotQqFYddPOjKbP1DD+XTx6R1EtbYvNquKZQPkEvQzEJfiHlL bP35hkm5bgNMxGpNpGJTSVblYHD3qSDx9cokUqOH6es9N+jfZKymMDFbUQ9g tbRckv.wTvvGdNLs5a8MAIOGDrIkDg2E3+SVgahS72bePbmQCUJJizQo+UgF TSAFemTcPRu9cUtYdpz4nChM1Th86kot92mVg2tZw1FWFEb6HyPMNoCiD3lB E9d+scECHtmiAHEI6pqoUWGFvLTI8MM3NcsVJLDhtVP.qJLALd9ffC2XodPh HyxqxTCKTpnChTd4IweqrpeFMOZSUrySA3tpTOtUEcZtZ5GWUVgZK09HN01O fptenW3GhKjaFE39KGC0M8eUodNoQ3KQQkgHO9kK.A0.2s.YnlxVPz13Ocap sfaEnx0ZNvi3cNOti3tYbC0.gRtlR+4e6cVLaw+5B9bVkV.q31LG7vgOlpHw mx9kwIQqi6W.hpBCc6ACfXDCAPKENcKlgHoKNdT5fLgMYouWMQIBWKF81ZvI TAMeccqN+xoysV5YoUl3mB1kUa6KTht82tM2sJco3BL8enlRhWrl2GtQc4Bg n+rcAoEOc0mmWg63uSffIB3a+NUNo7QgU0hejhkCuay9vS12LgFPtlrr+MMu Vh2pKE8yVDu8VQOZg55cdxaRkkspEHnXMKpyoYHfXt2zR.ZIkZ8zJIe3ls6B hE9vdXeFNoVlKcuXdMYjSgm4AcKuxGn571Y1xcgKpn71mdqru9z7cSsf3SET 4SsweaEeHB8KAzUyCHVhZx93672k1QempvqiKo1zm61Ed+qBdH4RE29s0+.6 BW93E9LtKR7.quz2i7twy2uQ8DyE5VIyi8e57dmD+UqzFTJo1v6uIbsXN6jP U2F1tvCDrwW.DOFe+tnUqNCOT28oJt6Bw3o6CdNbQxixu3SUpDusvsYJkEKs 8KBWFDmb90S7WFe9UiS9jpy5jKu+Ns8Eo6zqRYT4ydHwHxv3j3GidNV+vYJv mBTWJYYldDEg1iScY39ynZL8ihtzncepyIMHhjEf9x3m8ymhL8u+228ZbNyI OMaXFV2EY+5Iou0.msjUHLcxyOAfQ+6ue+59wDHVWNLne1TWsWlDr0pyUoRE 5gTLALE+YSk0dQvpD+dB7T7MNwwLTf+TMg+aeErQZvipr9c04qe9B20DoZM2 YB8UoVoLkYFt+BMUY+iqaHYOpTQmFoa+TO3c8ZQ5niFiPHm293yXhj1psoq2 dJEpZtS7X1oMAXo6TOnmlTAoXqZ4zoznsVGGWnWjsbd8sbCqsX21Y2tXbg5p phw5HLRSg44dAgJcMP8XxWLY5FsuhDPdhzO1q4J3PEBjWL.MROeabwPwHWLZ L6JC9BOcQhTQIxXxvcNkN3YlFtP8ObUZPBnWSzPBdNFE7dNbyhnmsP15X+Ao PPJUdkLTr5PAJeDoT846UOa60tXHBwOuew0VEPmT2rMx7kQHEQoFOxuDXw7n GTEBn3B84DbEc3so6AwTaCJOqzp1twIic+gsQ6Ota65bPNyQ0OfyFKZ26AfW EQDqtrERIurBHOrYG8zzZZX+2qwK1o4w8Dl7bTUyb9Kq9LWhg6ypqzm0CtIf Qt2Rsy+OVZ1lnhvUO2WVl+bMVbsGs4chgQcN4dzkCpNDJ+bjACi8Byp1OdKc AjxgKQHtJjqItStHe2jYQ.13vuqcA32YxA+tFB9W3m3eR4D.goBKWCQmxklN Eq2OF05gcICZvn5YLapmwWzsRUsA7DcyrnRJUm5vmy4GR0QLnr88IGRz.ddq pLnmcJuudF2OiY25c573TUzb35wtkQy49EipuWw4YOaSupsCe3DVZWDVGO9s b1w+4j52QMBKZjEVRWDVpsv3Hmb7en56YwiqvhcuJgUusHXwpwI4uEBouW4B KYXDVmFJrnSXS59sUPZikCTcPdZZVwNc0YYVNDtegya4fyFCKGj1X43pEVGN Vr7jbVN3jwvxAoMVNtZgkvoBmuNZ3.yGCCGj1X3n8xJRESioEQ8yMpfPF1vg cCEV1IT8Yu1JXNsoULTluXz1X9xotNdtpHWnUq4Tma4zSxrMiavp4hGschGK ceoyYhhYyFASTMW7HsS7RyaKbd2YrIifUoFKdRqRsP7vN3CuxjVdXM0Lq6P5 xBqgMhSqjI8Zivool+bcFxVAdJzJnM0s8yIRug1.ZyaZjpaZCiwOZS0iQCYW WimE+rEbMzviSKfGrQ0ons.yPFEyns.yPFEyHs.yFLkc613rncsqRv0N27wt LxDvYwlKdz1IdNL1DvYwlKdj1IdDFeB3rXiEOraCEOckt93KLoqhkrcQ03S. sVeeKaoXoTXU5HOGY8NV9pAxpAg0FWHpURJ0NgVRXjgWRnsoOgTmjT55Gy5S nnLRFaPkjF2mTqjTpwsr9D7vKIj1zmT6VdW5hdYpHzzkHsBHe0PJIMtOoVIo TKxZIggFbIojSWngYmz4mBgysn7JWNtogDn5fVUggr7UCofzXkqKrsnt2luG Qd.QYJWXUOyP2kzXkKTClcLScxd3a6z1rSo3ApUfZ7tFSFPWvQMcuabqrQnu XFaOMKkFdVLWQGQy8y3M33rFjt0LK3iai1k7PzJsaOy9N+6EJEQwOZ8+7s+t 282hC1E+t3v0Qal+Xz691f3eJIZ669N+OZ8ce38u6a8Ci+j06SkVquLkOl2u JH9cRxn05aR4j2XquY+CODr6cYgcf9K7PjZHe14Xa0Sm9GxmW7Geqehu3WOw D+XNlSE+JkX1DeAh+RHIIywZJhPgBxepCjfhAQfTVOqO4e9lFjTfU4rYt8MR +891V+EwZvWTgIONaHqiL3NQ5X7jb1KzAXnC6PzF1wlLsqMYhCZPZXDulzxX 8Pul7ah0juITW+l3MQl75CYpIphTRe7MQ5KkdFNmRe9Wz+5V39pMqxNHcaN+ K5+1LpuZybVt1b9Wz+s4FLvBa2GJg48EpAbTPm9htTmP9Rz5U+EgY8jg4rQR J5Fq3q58NbrSya0c6KhzWvid1UM7T3U8O7zWig0E8bjlMzJ9pduUa2D+m5iQ WX6FLNte9l5K0GU7xjo9T3U8dGApIsZDoGbTAgZ52TQYR4p9Ijna5WxIjl6I jk64jja0ji6ojhqb4QkQBtogW8a9Wu4+GwUiGpC -----------end_max5_patcher----------- </code></pre>

@RyanPWM
Copy link

RyanPWM commented Jun 30, 2021

I cannot get this to work unfortunately. Sandisk ultra formatted to FAT16. drumLoop.wav onto SD card. Changed the aiff file to 16bit wav. 96khz for 96khz export if that matters. Also tried lower sample rate exports.
I do not receive an error that there is no wav file present with the export. wav file is also where .cpp file is located in source folder.
wav is in otherwise empty root directory. drumLoop.wav. Converted from .aiff to wav with RX. Max patch adjusted to be "buffer~ drumloop drumLoop.wav" and max patch is functioning fine.

I'm really not sure what the problem can be.

  • Could it be a case sensitivity problem? If you rename the file "drumloop.wav" instead of "drumLoop.wav", and ditto in the patcher, does it work?
  • Does the patch compile & flash to the DaisyPatch? (if not, can you share the console output, with quiet mode disabled)?
  • If it does flash to the DaisyPatch, is there any message on the final OLED page? It should be "read drumloop.wav" or "no drumloop.wav" or "bad drumloop.wav". If none of those messages are showing up, then there must be something wrong with the patcher.

The WAV loader supports 16, 24, and 32-bit PCM data. The samplerate doesn't matter (it's not used by gen~ anyway).

I just pushed an absolute minimal example to the dev branch's examples folder: https://github.com/electro-smith/oopsy/tree/dev/examples -- if you git pull that, maybe that works? Again, the file should be "drumloop.wav" not "drumLoop.wav"

I'm not sure either... Ok some progress. After reinstalling daisy etc. I can get a no drumloop.wav error with no SD card. When I put an SD card in and reboot daisy, it freezes. If I load the patch with no file or sd card its working just no wav. If I have another wav file name in there, it also works.

It only freezes when the name of the wav file matches identically. I've just reformatted again to FAT (16) and a slow format just to make sure things are alright on a on a new sandisk ultra.

**Ok its working and I'm gonna die of joydom. Something must have been wrong with my file at the end of the day. When in doubt reinstall everything and build from scratch lol.

@simontho
Copy link

simontho commented Jul 2, 2021

**Ok its working and I'm gonna die of joydom. Something must have been wrong with my file at the end of the day. When in doubt reinstall everything and build from scratch lol.

Ah, great! That's awesome you've got it working over there now. I was also having trouble prior to reformatting my SD card, so that seems to be part of the problem.

An update on my multi-sample Oopsy patch posted last week:

  • The patch loads 90% of the time after I power up my Daisy patch, but the screen shows static for 10-45 seconds prior to the patch loading.
  • The patch contains 4 wav samples. All 4 samples are "read" successfully about 10% of the time. Most of the time, 2 or 3 samples are read successfully, and 1 or 2 fail to read. There does not seem to be a pattern in which samples fail to read each time. Sometimes it's samples 1 and 2, sometimes 3 and 4 etc.
  • The "reset" button on the front of my Daisy does not work to reset the patch (as it normally does with patches that do not utilize the SD card). Resetting the patch requires fully powering off the daisy.
  • When the patch loads all 4 samples.... 😌 🤟🏼

@MarianoDesivo
Copy link

I can´t get it to work

On C++ I changed the BusWidth from 4 to 1, and it works

Can you change the BusWidth on oopsy?

@bwschwartz
Copy link

Hi everyone! Is there functionality to store a play a WAV File on the board without an SD card? (just data object in gen~, which reads from a buffer~ in the enclosing patch, for example)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

9 participants