Start a new topic

Custom Drum Presets

Hi Artiphon,


Any updates on whether/when there will be added functionality to the Orba 2 app allowing for user-customizable drum presets? I realize there are only 2gb of space available, but would love even just 2-4 customizable preset slots on the desktop app where I could assign all 9 keys. I primarily use my Orba 2 for on-the-go songwriting, and having a drum kit that matches the sound(s) I'm going for would be huge.


I realize that in order for the functionality to fully transfer on iOS, the user would probably need to send the drum sample files with unmodified file names to the associated preset folder on their phone. I've already done this with custom bass presets from OrbaSynth and I don't think it would be a problem for anyone with mid-level technical prowess. I think this feature would exponentially boost the value of the Orba 2 for anyone interested in quick, on-the-go production.


I'm about to write another request/problem I'm having with OrbaSynth, which is otherwise incredibly useful from a production standpoint. Planning on making a youtube review video as well. Thanks for keeping the updates coming, super excited for what's to come!



2 people like this idea

Just to notice - 48000 / 41000 is 1.08843537414966,  that is too similar to  the pitch coefficient from Taetro preset to be a coincidence . 

--- 

Regarding UUID generation - yep, I've taken the same route, using GIT BASH console for automatic UUID generation as below, otherwise it is too time consuming:


Removing .wav extension:


for i in `ls` ; do mv $i `echo $i | sed s/.wav//g`; done

Checking how new filenames will look like:

for i in `ls` ; do echo $i $i\_`echo $i | md5sum | awk '{print $1}'`.wav; done

Actual renaming:

for i in `ls` ; do mv $i $i\_`echo $i | md5sum | awk '{print $1}'`.wav; done


---

Regarding stereo - looks like I did not guess, and your information confirms that stereo is not a root cause.  At this point I was able to push mono mixed new samples to Orba, and  sounds that I get from orba  are still  a white noise with a distorted hang samples heard. Need to experiment more,  to understand what's wrong with these samples,  probably there is some encoding requirement that I still miss.

---

As for samples removal - 


 I've tried using User sample pool instead, as that's the place where actual user-recorded samples are placed, but it did not change anything in terms of samples removal, still broken. But I think it might be a better place than ArtiphonExt1 that I tried to use initially   ArtiphonBasic.

Could understand it earlier, if I'd noticed you used User pool  in your TechnoKit.


I've created a ticket for Artiphon support, as if debug logs do not lie - even users who use stock in-app recorded samples preset generation  -  are affected.


 ---


Most obscure question for now  - if it is even possible to choose a sample depending on velocity, it is quite important for hang/handpan, as  sound harmonics  differ quite seriously. 

I see something some place in XML for that (velocityThresholds) , but could not find any preset that actually uses it, so it might be a placeholder that does not have any implementation behind yet.


 

 

 

 

The difference is about 1.5 semitones. There's a legendary performance of Valen Halen's "Jump" where the keyboard backing track was played at 48KHz instead of 44KHz. 


https://youtu.be/LCIyeXn1sKQ?t=169



1 person likes this

On the topic of 44kHz vs. 48kHz. I think you are right and that Orba wants 48kHz by default. I just noticed that the PanDrum Lead Preset I made seems approximately a semitone out of true pitch. I never really paid attention to the samples since I found them online and just accepted them as is. I wonder if the difference between 44kHz and 48kHz would be about a semitone.  


1 person likes this

@Ignis32


>>Yep. Seems  like my bad version of custom samples are still on the orba

There is a way to add/delete files stored on the Orba. I've kept this secret low key because I'm worried that people would access it and mess up the factory sounds or even delete them. Recently, I have tracked down where the app downloads the samples from so now there is a way to recover the samples if they are accidentally removed from the device. But this still requires a little bit of tech savvy that not everyone has. I'm going to start an Orba 2 Hacking Knowledge Base soon with a bunch of this information. Stay Tuned.


2 people like this

@Ignis32


I wanted to address your findings first in green:


0) New preset structure should be put into personal folder, not public.

It will require preset, sample pool and cover image. Correct. Avoid modifying the Public folders. The App will read the same folder structure from the personal structure (including Images and Drum)

(C:\Users\{username}\Documents\Artiphon\Common)

1) Developing presets should happen somewhere else, as "delete preset" deletes it from local orba files, and you  loose all your work. Correct. I never delete my files in the personal folders while developing, I just replace them and on the Orba.

2) Orba 2 seems to use 48 Khz  32bit float wav files.  Stereo probably is not supported, looks like I forgot to convert my wav files to mono, and therefore got white noise instead of the actual sample. Stereo samples are supported. I've tried them and they work. However, I never validated that it was actually playing them in stereo via the headphones. It may have been playing the sample in mono. Most of the presets I've made, I've merged to mono to keep the file sizes small. 

3) Using Taetro drums as a starting point/template was a good idea, 

 However, my guess is that Taetro drums where originally in 44.1khz, because pitch correction coefficient  pitch="-1.08844"  seems to match pitch difference between 44.1 and 48 of 1.08843537414966  and is probably used for compensation.

Probably the one who is doing it should keep an eye on this pitch correction and fix it (to -1 I guess..) if using 48khz samples. I haven't messed with 44KHz vs. 48KHz yet. My guess is it would accept them both. I know that -1 means "play the pitch as is and do not tune" Pitch is used for creating Bass, Chord, Lead presets where Orba must know the pitch of the sample to properly map to the notes for the selected scale and octave.

4) using UUID in filenames is mandatory, both for preset and wav file names. At least without following the convention preset does not appear in the preset list, and this uuids are used in app.properties separately. Correct. This took me too long to figure out and the app was adding additional UUIDs and messing up the app.properties file. I have a script that will calculate the MD5 UUID for an entire folder of wavs and append them. The good news is they don't need to be correct you can just make up any unique MD5 hash value.


2 people like this

Had some hopes for User samples pool but it seems like the same happens for the presets created by in-app samples recording:


Here I am creating a record:


[0001352758]+9258 [t:MessageManager] (SampleAuditionController) -> exiting audition mode.

[0001352758]+0000 [t:MessageManager] (SampleImporter) -> importMelodic: C:\Users\ignis\AppData\Local\Temp\Record\2022-11-20-16-36.wav

[0001352762]+0004 [t:MessageManager] (SampleImporter) -> starting sample import: 2022-11-20-16-36_da12fe55bd7747d4ba4e4abf4edb198b

[0001352762]+0000 [t:MessageManager] (SampleImporter::createPatchData) ->

[0001352762]+0000 [t:MessageManager] (SampleImporter) -> Setting patch name to 2022-11-20-16-36

[0001352768]+0006 [t:MessageManager] (SampleImporter) -> Saving preset to C:\Users\ignis\Documents\Artiphon\Common\Presets\Lead\2022-11-20-16-36_da12fe55bd7747d4ba4e4abf4edb198b.artipreset

[0001352776]+0008 [t:MessageManager] (ViewController.cpp) -> going back from Save Preset Dialog

[0001354036]+1260 [t:MessageManager] (ViewController.cpp) -> navigating to Ok/Cancel Dialog

[0001355256]+1220 [t:MessageManager] (ViewController.cpp) -> going back from Ok/Cancel Dialog

[0001362422]+7166 [t:MessageManager] (ViewController.cpp) -> navigating to Preset List Actions

[0001363168]+0746 [t:MessageManager] (ViewController.cpp) -> navigating to Delete Dialog

[0001364200]+1032 [t:MessageManager] (ViewController.cpp) -> going back from Delete Dialog

[0001385435]+21235 [t:MessageManager] (ViewController.cpp) -> navigating to class MetadataViewerDialogContent


Here I am uploading it to Orba:



[0001386236]+0801 [t:MessageManager] (ViewController.cpp) -> navigating to Progress Dialog

[0001386255]+0019 [t:MessageManager] (TemariComm.cpp) -> queueFileOpenForWrite /SamplePools/User/2022-11-20-16-36_7052271854584d9f8a6600d7553aeeac/2022-11-20-16-360_85e0b8ac7ecd4876b9b5f5a35b8a44b2.wav

[0001386257]+0002 [t:MessageManager] (TemariComm.cpp) -> queueFileWrite

[0001386257]+0000 [t:MessageManager] (TemariComm.cpp) -> queueFileOpenForWrite /SamplePools/User/2022-11-20-16-36_7052271854584d9f8a6600d7553aeeac/2022-11-20-16-361_0706e860bcb8447e9220750b790f262c.wav

[0001386257]+0000 [t:MessageManager] (TemariComm.cpp) -> queueFileWrite

[0001386257]+0000 [t:MessageManager] (TemariComm.cpp) -> queueFileOpenForWrite /SamplePools/User/2022-11-20-16-36_7052271854584d9f8a6600d7553aeeac/2022-11-20-16-362_4b1baaad191645de914d605446819db5.wav

[0001386258]+0001 [t:MessageManager] (TemariComm.cpp) -> queueFileWrite

[0001386258]+0000 [t:MessageManager] (TemariComm.cpp) -> queueFileOpenForWrite /SamplePools/User/2022-11-20-16-36_7052271854584d9f8a6600d7553aeeac/2022-11-20-16-363_9c90ac360c914fa9bb7237d38293b0b8.wav

[0001386258]+0000 [t:MessageManager] (TemariComm.cpp) -> queueFileWrite

[0001386258]+0000 [t:MessageManager] (TemariComm.cpp) -> queueFileOpenForWrite /Presets/Lead/2022-11-20-16-36_da12fe55bd7747d4ba4e4abf4edb198b.artipreset

[0001386259]+0001 [t:MessageManager] (TemariComm.cpp) -> queueFileWrite

[0001390126]+3867 [t:MessageManager] (TemariComm.cpp) -> assigning to mode Lead preset: 2022-11-20-16-36_da12fe55bd7747d4ba4e4abf4edb198b.artipreset to slot 1

[0001390137]+0011 [t:MessageManager] (ViewController.cpp) -> going back from Progress Dialog

[0001390195]+0058 [t:commsEventThread] (TemariDeviceInstance) -> skipping preset scan

[0001390200]+0005 [t:commsEventThread] (TemariDeviceInstance) -> skipping sample pool scan

[0001399046]+8846 [t:MessageManager] (ViewController.cpp) -> navigating to Preset List Actions

[0001400204]+1158 [t:MessageManager] (TemariComm.cpp) -> assigning to mode Lead preset: 2022-11-20-16-36_da12fe55bd7747d4ba4e4abf4edb198b.artipreset to slot 1

[0001400217]+0013 [t:MessageManager] (ViewController.cpp) -> going back from Preset List Actions

[0001405655]+5438 [t:MessageManager] (ViewController.cpp) -> navigating to Preset List Actions


Here delete happens, but only artipreset is removed:



[0001406580]+0925 [t:MessageManager] (ViewController.cpp) -> navigating to Delete Dialog

[0001407533]+0953 [t:MessageManager] (TemariComm.cpp) -> TemariComm::queueFileDeleteFile deleting file on the orba: /Presets/Lead/2022-11-20-16-36_da12fe55bd7747d4ba4e4abf4edb198b.artipreset

[0001407534]+0001 [t:MessageManager] (ViewController.cpp) -> going back from Delete Dialog

[0001407583]+0049 [t:commsEventThread] (TemariDeviceInstance) -> skipping preset scan




Basically, it look  like everyone who uses custom samples functionality will run out of space without ability to clean it.

That's the whole debug log for deleting preset - it even does not try..


[0001142043]+2334 [t:MessageManager] (TemariComm.cpp) -> TemariComm::queueFileDeleteFile deleting file on the orba: /Presets/Drum/FreepatsHangDrum_c9af2af0425e49864539d84ca50eebd3.artipreset

[0001142043]+0000 [t:MessageManager] (ViewController.cpp) -> going back from Delete Dialog

[0001142076]+0033 [t:commsEventThread] (TemariDeviceInstance) -> skipping preset scan

Okay, Looks like problem is the following. "Delete" actually does not delete. 

image


It seems to  be able remove artipreset from the device, it deletes local files on my pc. But it does not remove actual wav  samples from orba's  internal storage  for some reason.


Next time PC app syncs to orba, it gets list of sample files on it,  writes it to app.properties and their existance blocks app from enabling "Send to orba",  and showing "play" instead, even if interface shows that preset  it is not present on orba.  Preset is  therefore in  a kind of limbo of some sort  - treated as installed and not installed in the same time by different parts of the app.


It can be partially fixed by removing every <Location >   ....  /> for the custom samples, where url starts with orba:// 


for example: 

<Location url="orba://LA22346429/SamplePools/ArtiphonExt2/FreepatsHangDfreepats_hang_D4_01_b34481822bcc78de07d8d44300077a6b.wav"

                  crc="45534"/>


Basically it convinces the app to think that samples do not exist on orba. In this case "Send to orba" starts working.


However,  actual samples are not rewritten, generating errors in debug log:


[0000017333]+0021 [t:MessageManager] (TemariComm.cpp) -> queueFileWrite

[0000017334]+0001 [t:MessageManager] (TemariComm.cpp) -> queueFileOpenForWrite /SamplePools/ArtiphonExt2/FreepatsHangD/freepats_hang_Bb4_01_0fc6398d5ee22d51432547791b20d998.wav

[0000017343]+0009 [t:MessageManager] (TemariComm.cpp) -> queueFileWrite

[0000017344]+0001 [t:MessageManager] (TemariComm.cpp) -> queueFileOpenForWrite /SamplePools/ArtiphonExt2/FreepatsHangD/freepats_hang_C5_01_ac77fbb19b38ef0a79208a51cdd4caa9.wav

[0000017355]+0011 [t:MessageManager] (TemariComm.cpp) -> queueFileWrite

[0000017356]+0001 [t:MessageManager] (TemariComm.cpp) -> queueFileOpenForWrite /SamplePools/ArtiphonExt2/FreepatsHangD/freepats_hang_D5_01_90468cd7ddb0530cffecc3adcfd9351c.wav

[0000017366]+0010 [t:MessageManager] (TemariComm.cpp) -> queueFileWrite

[0000017367]+0001 [t:MessageManager] (TemariComm.cpp) -> queueFileOpenForWrite /Presets/Drum/FreepatsHangDrum_c9af2af0425e49864539d84ca50eebd3.artipreset

[0000017367]+0000 [t:MessageManager] (TemariComm.cpp) -> queueFileWrite

[0000030674]+13307 [t:commsEventThread] (Comm.cpp) -> [comms error: (queueFileSetOperation - kGroupFile/kFileClose) received ack with error (kErrorFileFileExists) ]

[0000051437]+20763 [t:commsEventThread] (Comm.cpp) -> [comms error: (queueFileSetOperation - kGroupFile/kFileClose) received ack with error (kErrorFileFileExists) ]

[0000076852]+25415 [t:commsEventThread] (Comm.cpp) -> [comms error: (queueFileSetOperation - kGroupFile/kFileClose) received ack with error (kErrorFileFileExists) ]

[0000099321]+22469 [t:commsEventThread] (Comm.cpp) -> [comms error: (queueFileSetOperation - kGroupFile/kFileClose) received ack with error (kErrorFileFileExists) ]


My current preset starts being "fully installed" but still generates white noise sound , most probably due to stereo samples I'd uploaded initially.


Basically, at this point - it looks to me that if you have written any samples to Orba2 they are stuck there forever.

Of course, I can rename all my samples and fix the preset by using new filenames  for new non-stereo samples, but old samples will still consume the storage space. And I will have to do that each time when I will need a samples replaced.

 

Any ideas how to rewrite the samples or delete them from orba?


Yep. Seems  like my bad version of custom samples are still on the orba,  even reflashing orba does not clean them. If I clean the app.properties, and nothing on the PC side knows about this preset and it's samples - samples are still shown during sync.


Do you guys have any idea how to remove leftovers from the Orba storage?

 

image

@Subskybox - that's fantastic. Hope you will share the preset once you will consider it ready.



I was working on my Hang preset as well, and that's what I learned. My statements might be incorrect, as I did not a lot of iterations.


0) New preset structure should be put into personal folder, not public.

It will require preset, sample pool and cover image.

(C:\Users\{username}\Documents\Artiphon\Common)

1) Developing presets should happen somewhere else, as "delete preset" deletes it from local orba files, and you  loose all your work.

2) Orba 2 seems to use 48 Khz  32bit float wav files.  Stereo probably is not supported, looks like I forgot to convert my wav files to mono, and therefore got white noise instead of the actual sample.


3)

Using Taetro drums as a starting point/template was a good idea,

 However, my guess is that Taetro drums where originally in 44.1khz, because pitch correction coefficient  pitch="-1.08844"  seems to match pitch difference between 44.1 and 48 of 1.08843537414966  and is probably used for compensation.

Probably the one who is doing it should keep an eye on this pitch correction and fix it (to -1 I guess..) if using 48khz samples


4) using UUID in filenames is mandatory, both for preset and wav file names. At least without following the convention preset does not appear in the preset list, and this uuids are used in app.properties separately.

 

-------------

My current problem where I stuck  is that I no more can do "Send to Orba" , my custom preset shows as absent on Orba, but I've got only "Play" button in Orba PC app, that does nothing. I have the same situation for "Bright Violin" stock preset, and cannot find out a way to fix that yet. Probably there is still some corrupted data on the Orba itself that I cannot clean. Searching for the way to reset Orba to defaults. 


p.s.


Regarding handpands in general -  there is a notice on freepats description for hang samples, that I tend to agree with:

 Note that this sound bank only responds to notes produced by the original instrument, other notes are silent. The common method of varying the pitch of the nearest tone to generate all missing semitones does not produce good results here, because the hang creates fixed harmonics (actually background notes) which would be randomly shifted to different scales.


Notes are not that isolated on hang/pan/rav and other similar instruments, and pitch shifting to fill missing notes to achieve chromatic does not work well. 


1 person likes this

Made my first test with the PanDrum sound I'm working on. I still haven't figured out the right deployment strategy or how to customize the scales but tinkering a bit at a time.. Here's a demo:

https://www.youtube.com/watch?v=x6d6WBOXikU


1 person likes this

Cool. I also have some nice Pan samples. I'm still trying to find a nice deployment process that's easy for everyone before I start creating presets. There are some nice Presets coming soon.. My App has already downloaded the samples but there are no associated presets. My guess is that Artiphon is prepping for an app update soon which will include new presets. Maybe American Thanksgiving? 

Sounds like an interesting challenge for the weekend. :-)


Very interesting thread.  Hoping to convert Creative Commons  SF2 Hang drum  from here: https://freepats.zenvoid.org/ChromaticPercussion/hang.html  to an Orba2 preset.


Please continue sharing your findings on the preset xml internals, that might make implementing my idea much easier.


Would be even better if Artiphon guys could step in an  share some documentation on the format, to skip that reverse engineering and guessing part.


1 person likes this

Many Orba 2 Drum kits have more samples than you can access. If you use the Orba Piano app you can find some of them assigned to other keys.

Login or Signup to post a comment