Announcement

Collapse
No announcement yet.

WAV metadata supported tags

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • WAV metadata supported tags

    Is there a list of all the tags supported in bitbox and which sample type (sample, cue, slice multisample, etc) exploits them?
    Meaning when bibox is loading a WAV eg as a clip, what chunks is it looking for inside the RIFF file? Likewise for the other destination types? Just looking for a little more detail to the table found in the manual...

    I´m kind of pulling my hair out while importing samples to my library adding tempo, root note etc. It seems like bitbox wouldn´t save theese informations when overwriting or packing if the tags haven´t been in the sound files? So I guess I need to edit all the samples beforehand to include these tags, just I don´t know which ones to include for the various file types...

  • #2
    There are several different tags we support. Much of this is new on bitbox:

    WAV smpl tag

    We use this tag for root note information when loading multisamples

    WAV inst tag

    We just started reading and writing this tag on multisample recording introduced in the past few weeks. It includes key range and velocity range.

    WAV acid tag

    This tag contains the beat count used in clips

    WAV cue points

    This tag represents markers in the file, which we interpret as slice points.

    Comment


    • #3
      Thanks Aaron!

      Does bitbox add tags to untagged WAV files or do they have to be included when the file is being created?
      If the tags need to be in the file before importing to bitbox is it okay to just include them /wo content?

      Last but not least, if it is not too much to ask for, would you like to share little more info about the content structure?

      Comment


      • #4
        Bitbox will only add tags when you save a WAV file and when you record a mutlisample. The tags aren't required--except when loading key-mapped multisamples. That is where you will need to have the smpl tag set correctly in order for the loading to work.

        Comment


        • #5
          Searching the forum and it doesn't seem like anyone has figured out how to do the multisample velocities right so I figured I'd give it a shot and hopefully publish some documentation and/or code to help folks out since there are basically zero wav editors that make reading/writing this particular metadata easy. Spent all day yesterday reading RIFF/WAV documentation and messing with code to figure out how to write the chunks properly and finally have a multisample of kicks with each having a velocity range in the inst chunk, yay!

          So I toss them on a card, fire up Bitbox, File -> Load all and.....it just always plays the last one no matter what. I tried removing the MIDI velocity -> Level mapping and it just always plays the last one at full volume. It definitely loads them all at first and the waveform starts with the lowest but any trigger it goes to the highest and stays there.

          Below is what my inst chunk looks like. This is the lowest, the next one is low 5 and high 8, then low 9 high 12, etc. They are named in what I think the correct multisample format is Kik-048-001.wav, Kik-048-005.wav, Kik-048-009.wav, etc.

          Code:
          Instrument Chunk
          ================================================== ================================
          Chunk ID: inst | inst | ["i"] ["n"] ["s"] ["t"]
          Chunk size: int_32 | 7 | [7] [0] [0] [0]
          ----------------------------------+------------+----------------------------------
          Unshifted Note: byte | 48 | [48]
          Fine Tune: byte | 0 | [0]
          Gain: byte | 0 | [0]
          Low Note: byte | 0 | [0]
          High Note: byte | 127 | [127]
          Low Velocity: byte | 1 | [1]
          High Velocity: byte | 4 | [4]
          I only have OG Bitbox so I can't look at what the created multisamples are to copy off that. I tried hitting New Multi -> Rec and it just crashes the whole OS.

          Any advice on getting this working? Anyone have single-note / multi-velocity samples to share that I can match up the headers? Does this maybe depend on being saved into the XML preset and this entire inst chunk thing was just a red herring?

          Thank you in advance for ANY tips. Really pulling my hair out here.

          Comment


          • #6
            Thanks for the effort here. I can confirm that the multisample import code should take velocity into consideration. It is hard to be more certain without some content and more testing.

            Hopefully someone has a working multi-velocity set to share.

            Comment


            • #7
              So in another thread Steve or Aaron wrote that the bitbox can't parse note numbers or velocities from the filenames. Then the note name metatag convention isn't used by any audio editors (I certainly can't figure out how to add a "unshifted note" tag to a wav file in Reaper).
              We can't edit velocities inside of the bitbox either.
              So if we don't set this up perfectly correct inside the ecosystem box every time, it doesn't work. Geez that's really not user friendly. But ... seeing as how five months have passed since this thread was last commented on and everyone here has bluebox fever, perhaps there will never be a way to import multisamples into bitbox? lame.
              Last edited by rayultine; 02-10-2021, 01:35 PM. Reason: added parenthesis

              Comment


              • #8
                Originally posted by scragz View Post
                Searching the forum and it doesn't seem like anyone has figured out how to do the multisample velocities right so I figured I'd give it a shot and hopefully publish some documentation and/or code to help folks out since there are basically zero wav editors that make reading/writing this particular metadata easy. Spent all day yesterday reading RIFF/WAV documentation and messing with code to figure out how to write the chunks properly and finally have a multisample of kicks with each having a velocity range in the inst chunk, yay!

                So I toss them on a card, fire up Bitbox, File -> Load all and.....it just always plays the last one no matter what. I tried removing the MIDI velocity -> Level mapping and it just always plays the last one at full volume. It definitely loads them all at first and the waveform starts with the lowest but any trigger it goes to the highest and stays there.

                Below is what my inst chunk looks like. This is the lowest, the next one is low 5 and high 8, then low 9 high 12, etc. They are named in what I think the correct multisample format is Kik-048-001.wav, Kik-048-005.wav, Kik-048-009.wav, etc.

                Code:
                Instrument Chunk
                ================================================== ================================
                Chunk ID: inst | inst | ["i"] ["n"] ["s"] ["t"]
                Chunk size: int_32 | 7 | [7] [0] [0] [0]
                ----------------------------------+------------+----------------------------------
                Unshifted Note: byte | 48 | [48]
                Fine Tune: byte | 0 | [0]
                Gain: byte | 0 | [0]
                Low Note: byte | 0 | [0]
                High Note: byte | 127 | [127]
                Low Velocity: byte | 1 | [1]
                High Velocity: byte | 4 | [4]
                I only have OG Bitbox so I can't look at what the created multisamples are to copy off that. I tried hitting New Multi -> Rec and it just crashes the whole OS.

                Any advice on getting this working? Anyone have single-note / multi-velocity samples to share that I can match up the headers? Does this maybe depend on being saved into the XML preset and this entire inst chunk thing was just a red herring?

                Thank you in advance for ANY tips. Really pulling my hair out here.
                Hi scragz,

                Not sure if you're still around but in case you are, could you share the code you used to get the Instrument Chunk?

                Did you find a way to edit them?

                Cheers.
                Last edited by domo_o; 03-24-2021, 05:23 PM.

                Comment


                • #9
                  Originally posted by domo_o View Post

                  Hi scragz,

                  Not sure if you're still around but in case you are, could you share the code you used to get the Instrument Chunk?

                  Did you find a way to edit them?

                  Cheers.
                  Alright, so I try to find a software that support the edition of this RIFF "chunk" but no chance.
                  I only find out that Ableton Sampler is able to read them and use them to load the key and vel zones.

                  So, I end up doing what scragz did, read RIFF/WAV documentation and mess around with hex editor and Python.

                  The good news is that I was able to make it work, but this is nowhere near user friendly.

                  So, first I found out that Aaron actually did a good job at documenting what Blackbox and Bitbox is using to support velocity and note range on this post:
                  https://forum.1010music.com/forum/ge...ags-we-support

                  I just didn't get it the first time I read it.
                  If you're like me, reading this WAVE/RIFF specification will help:
                  https://www.recordingblogs.com/wiki/wave-file-format
                  https://www.recordingblogs.com/wiki/...of-a-wave-file

                  I then created sample with the Blackbox auto sampler and compared their structure against the RIFF doc.
                  Turns out that Blackbox add the data use for key range and velocity in the "inst" chunk at the end of the file.

                  Using Python, I was able to manually add that to existing file and it worked fine.
                  Once loaded back to the Blackbox, I can see that the sample played change depending on the velocity I pressing.

                  For anyone interested, below is the piece of code that I used.

                  import struct

                  f = open('C:/WIP/file.WAV', 'ab')
                  #inst in 4 bytes (105,110,115,116)
                  #size of the array in 2 byte (7)
                  #note as midi note
                  #tuning, gain, lowNote, highNote, lowVel, highVel
                  byte_arr = [105,110,115,116,7,0,0,0,43,0,0,1,127,97,128]
                  binary_format = bytearray(byte_arr)
                  f.write(binary_format)
                  f.close()
                  I'll see, if I motivate enough to create something more complex to automate this.
                  I'm only a script kiddie messing with code here but who knows.

                  If I produce something more solid, I'll report here.

                  Hope this can be helpful.

                  Comment


                  • #10
                    Alright, so I was able to build something that automate the process.

                    This script scan a folder for WAV file, guess note and velocity value from the name file, ask for input (if you want to overwrite the guess value) and write the Inst chunk into the file.

                    Before you use it, few warnings:
                    - Backup your data, the script is destructive, which means that it will overwrite existing files and not create a copy of it.
                    - It was specifically made to handle files produce by MPC Beats Auto Sampler (it is using MPC Beats naming convention to guess the note and velocity values).
                    - I'm not a professional coder, in fact I probably didn't wrote python script in the last 20 years ago. So if you find the code ugly, I won't take offense. Feel free to improve it.
                    - I build this on a Windows 10 machine using Python 3.8.8. If it fails for you try to use a similar version of Python.

                    To use it:
                    - Install Python
                    - Download the file attached to this post
                    - Renamed it from .txt to .py (the forum didn't let me upload a .py file)
                    - Run on a console: python MPCBeats2BlackBox.py
                    - Follow the prompt

                    I'm hoping some of you folks will find it useful.






                    Attached Files

                    Comment


                    • shankiphonic
                      shankiphonic commented
                      Editing a comment
                      I was able to run this -
                      I quickly perused the code, it's clean enough. nice. (this isn't saying much considering I'm not much of a programmer).
                      have a pretty big sample library and I don't use MPC beats.
                      I aspire to making time branch this to serve more generically.
                      perhaps either to just take a note & velocity per file, or to take a root note from the alphabetical first file, and then bump up a semitone for each consecutive file.

                      I'd say there's a 25% chance I'll actually get to it.

                      Thank you for sharing this.

                  • #11
                    A few questions domo_o

                    1. Do you think this could be turned into a small standalone program that doesn't require Python?
                    2. Which version of Python should I install?3
                    3. Is there anything else necessary?
                    4. What is the MPC Beats naming convention specifically?


                    I'll try it on Windows 10 but I haven't the slightest idea how to work with/around Python.

                    I'm also curious why 1010 music went with metadata attributes which aren't easily editable via most software. I'm using Reaper and it's not like it doesn't have an extensive list of metadata it can edit, but not the ones that 1010 uses. Any chance that can change in the future? I'm curious.

                    Comment


                    • #12
                      Same here with Reaper, Paranormal Patroler. I've made the parallel feature request on the Reaper forum to expand metadata editing to /smpl. Lots of views but no response. Maybe you can +1 it!
                      https://forum.cockos.com/showthread.php?t=251370

                      Edit, I've also started working on a Reaper template track to properly give filenames of take slices. I could share my preliminary work here, or maybe someone else has already made something better.
                      I've been thinking about how cool it would be to quickly render patches of microtonal synths like Surge in Reaper and then shoving the already tagged files into bitbox for maximum weird melodic pleasure.

                      Comment


                      • #13
                        I can't seem to be able to post on the thread yet, just made an account though so will definitely +1 there.

                        In the meantime, I posed the question here https://www.youtube.com/watch?v=lio7xJr4cRE first minutes in, answers the questions about metadata. We all know by now that the types that Bitbox supports aren't usable in Reaper. It would make things so much easier if they were, as it would allow batch processing of samples.

                        Comment


                        • #14
                          Hi @Paranormal Patroler,

                          1) I use pyinstaller to create an exe but I cannot add it here (too big). You can MP me your email, I'll be happy to share it.

                          2) As mentioned earlier, I used Python 3.8.8 to write this.
                          https://www.python.org/downloads/release/python-388/

                          3) I don't thing you need something else. Python is called “the batteries included language” for a reason, a lot of stuff is include in the Standard Library and I didn't use anything else.

                          4) The format I get from MPCBeats is <program name>-<midi note> <note name> <Note velocity>.WAV
                          Here is an example: Micahs Choir-043 G1 032.WAV

                          Hope this will work out for you.

                          Comment


                          • #15
                            hi domo_o
                            thanks for your effort!
                            i'm new to this whole python business. could you help out with an example of how to answer the prompts?
                            1. it didnt seem to pickup the first note - "C1 033"
                            2. why does sometimes it say "inst found" and sometimes "no inst found"?
                            3. in this case I left the following prompts unanswered. did it fill in the prompts correctly? if not, what should have been answered?
                            1. Note: 36
                            2. Low Note: 36
                            3. High Note: 48
                            4. Low Vel: 93
                            5. High Vel: 127
                            Once again, thank you for your valiant effort.


                            Click image for larger version

Name:	Screen Shot 2021-04-15 at 07.05.32.png
Views:	57
Size:	346.9 KB
ID:	24113

                            Comment

                            Working...
                            X