├── griffon-app ├── i18n │ ├── messages.properties │ └── resources.properties ├── conf │ ├── webstart │ │ ├── griffon.png │ │ ├── griffon-icon-128x128.png │ │ ├── griffon-icon-16x16.png │ │ ├── griffon-icon-24x24.png │ │ ├── griffon-icon-256x256.png │ │ ├── griffon-icon-32x32.png │ │ ├── griffon-icon-48x48.png │ │ ├── griffon-icon-64x64.png │ │ ├── applet.html │ │ ├── application.jnlp │ │ └── applet.jnlp │ ├── keys │ │ └── productionKeystore │ ├── Builder.groovy │ ├── Config.groovy.orig │ ├── Config.groovy │ └── Application.groovy ├── resources │ ├── icon-16x16.png │ ├── icon-24x24.png │ ├── icon-32x32.png │ ├── icon-48x48.png │ ├── icon-64x64.png │ ├── icon-128x128.png │ ├── icon-256x256.ico │ ├── icon-256x256.png │ ├── SampleMapBuilder.pdf │ ├── SampleMapBuilder.icns │ └── templates │ │ ├── shortcircuit │ │ ├── InstrumentTemplate.xml │ │ └── ZoneTemplate.xml │ │ ├── renoise │ │ └── sections │ │ │ ├── ZoneTemplate.xml │ │ │ └── SampleTemplate.xml │ │ ├── studio_one │ │ ├── ZoneTemplate.xml │ │ └── metainfo.xml │ │ └── ableton │ │ └── sections │ │ └── MultiSamplePart.xml ├── models │ └── drumkitbuilder2 │ │ ├── ExportProgressModel.groovy │ │ ├── PreferencesModel.groovy │ │ ├── FormatOptionsModel.groovy │ │ ├── DrumKitBuilder2Model.groovy │ │ ├── AbstractDialogModel.groovy │ │ └── AboutModel.groovy ├── views │ └── drumkitbuilder2 │ │ ├── DrumKitBuilderStatusBar.groovy │ │ ├── DrumKitBuilderToolBar.groovy │ │ ├── DrumKitBuilderActions.groovy │ │ ├── DrumKitBuilder2View.groovy │ │ ├── ExportProgressView.groovy │ │ ├── AboutView.groovy │ │ ├── DrumKitBuilderMenuBar.groovy │ │ └── DrumKitBuilderContent.groovy ├── lifecycle │ ├── Ready.groovy │ ├── Stop.groovy │ ├── Shutdown.groovy │ ├── Startup.groovy │ └── Initialize.groovy ├── services │ └── drumkitbuilder2 │ │ ├── AudioPlayerService.groovy │ │ ├── FileScannerService.groovy │ │ └── ExportService.groovy └── controllers │ └── drumkitbuilder2 │ ├── AboutController.groovy │ ├── DialogController.groovy │ └── ExportProgressController.groovy ├── lib ├── silk-1.3.jar ├── log4j-1.2.17.jar ├── appbundler-1.0.jar ├── SampleMapBuilder.jar ├── griffon-rt-1.5.0.jar ├── groovy-all-2.2.1.jar ├── slf4j-api-1.7.5.jar ├── swing-worker-1.1.jar ├── swingx-core-1.6.4.jar ├── swingx-plaf-1.6.4.jar ├── swingxbuilder-0.3.jar ├── jul-to-slf4j-1.7.5.jar ├── miglayout-core-4.2.jar ├── miglayout-swing-4.2.jar ├── slf4j-log4j12-1.7.5.jar ├── swingx-action-1.6.4.jar ├── swingx-common-1.6.4.jar ├── timingframework-1.0.jar ├── PgsLookAndFeel-1.1.1.jar ├── jcl-over-slf4j-1.7.5.jar ├── swingx-beaninfo-1.6.4.jar ├── swingx-graphics-1.6.4.jar ├── swingx-painters-1.6.4.jar ├── glazedlists_java15-1.9.0.jar ├── PgsLookAndFeel-jide-1.1.1.jar ├── griffon-swing-runtime-1.4.0.jar ├── griffon-tasks-runtime-0.1.jar ├── swingx-autocomplete-1.6.4.jar ├── griffon-miglayout-runtime-1.0.0.jar ├── griffon-silkicons-runtime-1.0.0.jar ├── griffon-glazedlists-runtime-2.0.0.jar ├── griffon-lookandfeel-runtime-1.0.0.jar └── griffon-lookandfeel-pgslaf-runtime-1.0.0.jar ├── resources ├── formats │ ├── Exs24 │ │ ├── exs24.txt │ │ ├── OneZone.exs │ │ ├── OneZone.pst │ │ ├── TwoZones.exs │ │ ├── TwoZones.pst │ │ ├── ._ThreeZones.exs │ │ ├── ThreeZones.exs │ │ ├── OneZoneWithALongerName.exs │ │ └── ._OneZoneWithALongerName.exs │ ├── Reason NNXT │ │ ├── Empty.sxt │ │ ├── EA_IFF_85.doc │ │ ├── BassDrum NNXT.sxt │ │ ├── 2 BassDrums NNXT.sxt │ │ └── NN-XT Patch File Format.doc │ ├── Live │ │ ├── OSX Examples │ │ │ ├── b.wav │ │ │ ├── S14.adv.7z │ │ │ ├── part2 │ │ │ │ ├── b.bin │ │ │ │ ├── c.bin │ │ │ │ ├── b.adv.7z │ │ │ │ ├── c.adv.7z │ │ │ │ ├── bnodata2.adv │ │ │ │ ├── bnodata3.adv │ │ │ │ ├── bnodata2.adv.gz │ │ │ │ ├── bnodata_test.adv │ │ │ │ ├── b.hex │ │ │ │ └── c.hex │ │ │ ├── S14_FileRef.bin │ │ │ ├── FileRef_A_Wav.bin │ │ │ ├── OSX_Simpler.adv.7z │ │ │ ├── OSX_OneSample.adv.7z │ │ │ ├── OSX_TwoSamples.adv.7z │ │ │ ├── NoSourceContext.adv.7z │ │ │ ├── OSX_Sampler_TestWav.adv.7z │ │ │ ├── OneSample_OriginalFileRef.bin │ │ │ ├── OneSamplerTestWavFileRef.bin │ │ │ ├── OneSample_SampleRef_NoFolder.bin │ │ │ ├── OneSample_SourceContext_Folder.bin │ │ │ ├── SourceContext_A_Wav_Documents.bin │ │ │ ├── OSX_OneSampleNoSourceContext_test.adv.7z │ │ │ ├── OneSample_Context.hex │ │ │ ├── SourceContext_A_Wav_Documents.hex │ │ │ ├── OneSample.hex │ │ │ ├── FileRef_A_Wav.hex │ │ │ ├── OneSample_OriginalFileRef.hex │ │ │ ├── S14_FileRef.hex │ │ │ ├── OneSamplerTestWavFileRef.hex │ │ │ └── FileRefData_Investigation.txt │ │ ├── CrcTests │ │ │ ├── TestCRC_Gen.adv │ │ │ └── TestCRC.adv.orig.gz │ │ ├── Sampler │ │ │ ├── One Zone.adv.7z │ │ │ ├── Two Zones.adv.7z │ │ │ ├── One Sampler.adg.gz │ │ │ ├── Two Samplers.adg.7z │ │ │ └── One Zone Non Relative.adv.7z │ │ ├── ableton file format.txt │ │ ├── OSX Data Blocks │ │ │ ├── Block1.bin │ │ │ ├── Block2.bin │ │ │ ├── Block3.bin │ │ │ ├── Block4.bin │ │ │ ├── FolderRef.bin │ │ │ ├── SMBMount.bin │ │ │ ├── SilenceA.bin │ │ │ ├── SilenceB.bin │ │ │ ├── TestWavA.bin │ │ │ ├── LongVolumeA.bin │ │ │ ├── NacintoshA.bin │ │ │ ├── TestWavA_Later.bin │ │ │ └── Plan.txt │ │ ├── Simpler │ │ │ ├── Two Simplers.adg.7z │ │ │ └── SimplerSampleRef.xml │ │ ├── DataBlocks.txt │ │ └── DataBlockUnknowns.txt │ ├── SampleOne │ │ ├── SampleOne.zip │ │ ├── SampleOne.preset │ │ └── SampleOne │ │ │ └── metainfo.xml │ ├── Reaktor │ │ ├── MDK-TwoSamples.map │ │ └── ReaktorMap.bt │ └── ShortCircuit │ │ └── OneSample.scm ├── gfx │ ├── Icon.fla │ ├── Splash.psd │ ├── Toolbar.png │ ├── Toolbar.psd │ ├── Interface.png │ ├── Interface.psd │ ├── Settings.png │ ├── Settings.psd │ ├── BrowseButton.png │ ├── BrowseButton.psd │ ├── ExportButton.png │ ├── ExportButton.psd │ ├── Export-Button.png │ ├── ReScan Button.psd │ ├── ReScan-Button.png │ ├── Settings Button.psd │ └── Settings-Button.png ├── keys │ ├── pubkey.der │ ├── privkey.der │ └── privkey.pem ├── docs │ ├── SMB Manual.docx │ └── SampleMapBuilder.pdf ├── packaging │ ├── .DS_Store │ ├── icon-256x256.icns │ ├── appbundler-1.0.jar │ ├── SampleMapBuilder.exe4j │ └── Info.plist └── jarlist.txt ├── wrapper ├── griffon-wrapper.jar └── griffon-wrapper.properties ├── packaged └── SampleMapBuilder.pdf ├── src └── main │ ├── com │ └── relivethefuture │ │ ├── formats │ │ ├── ableton │ │ │ ├── archive │ │ │ │ ├── Event.java │ │ │ │ ├── ModulationTarget.java │ │ │ │ ├── FloatEvent.java │ │ │ │ ├── MidiControllerRange.java │ │ │ │ ├── GroupDevicePreset.java │ │ │ │ ├── ArrangerAutomation.java │ │ │ │ ├── MultiSampler.java │ │ │ │ ├── DrumGroupDevice.java │ │ │ │ ├── Device.java │ │ │ │ └── Ableton.java │ │ │ ├── AbletonSamplerZonesWriter.java │ │ │ ├── AbletonDrumRackSamplersWriter.java │ │ │ ├── AbletonDrumRackSimplersWriter.java │ │ │ ├── SamplerZonesConfig.java │ │ │ ├── DrumRackSamplersConfig.java │ │ │ ├── DrumRackSimplersConfig.java │ │ │ └── OSXFileDataGenerator.java │ │ ├── exs24 │ │ │ ├── Exs24Config.java │ │ │ └── Exs24Writer.java │ │ ├── sfz │ │ │ ├── SfzConfig.java │ │ │ └── SFZWriter.java │ │ ├── renoise │ │ │ └── RenoiseConfig.java │ │ ├── reaktor │ │ │ └── ReaktorConfig.java │ │ ├── shortcircuit │ │ │ └── ShortcircuitConfig.java │ │ └── SamplerFormat.java │ │ ├── generic │ │ ├── ZoneFactory.java │ │ ├── InstrumentFactory.java │ │ ├── SampleFactory.java │ │ ├── BasicZoneFactory.java │ │ ├── BasicInstrumentFactory.java │ │ ├── BasicSampleFactory.java │ │ ├── Zone.java │ │ ├── Instrument.java │ │ ├── MidiRange.java │ │ ├── Sample.java │ │ ├── BasicZone.java │ │ ├── LoopSettings.java │ │ └── BasicInstrument.java │ │ ├── dkb │ │ ├── NameComparator.groovy │ │ ├── ConfigModel.groovy │ │ ├── RootNoteComparator.groovy │ │ ├── LayoutStyle.groovy │ │ ├── DKBUtils.groovy │ │ ├── SampleComparator.groovy │ │ ├── OutputLayout.groovy │ │ ├── SampleTableFormat.groovy │ │ └── PathUtils.groovy │ │ ├── kitbuilder │ │ ├── SimpleProgressListener.java │ │ ├── builder │ │ │ ├── BuildProgressListener.java │ │ │ └── BuildProgressEvent.java │ │ ├── writers │ │ │ ├── InstrumentWriter.java │ │ │ └── BasicInstrumentWriter.java │ │ ├── output │ │ │ ├── GenericOutput.java │ │ │ └── OutputConfig.java │ │ ├── KitFileNameGenerator.groovy │ │ └── model │ │ │ └── FolderOfSamples.java │ │ └── audio │ │ └── AudioFilePlayer.java │ ├── javaFlacEncoder │ ├── UnfinishedBlockError.java │ ├── ChannelData.java │ ├── FLACStreamIdentifier.java │ ├── ArrayRecycler.java │ ├── CRC16.java │ ├── BlockEncodeRequest.java │ ├── FrameThread.java │ └── Subframe_Constant.java │ └── net │ └── sf │ └── jtpl │ └── TemplateFactory.java ├── scripts └── _Events.groovy ├── .gitignore ├── package.sh ├── application.properties ├── application.properties.orig ├── README.md ├── test └── unit │ └── com │ └── relivethefuture │ └── dkb │ ├── ResourceUtilsTest.groovy │ ├── BasicSampleTest.groovy │ ├── FilenameGeneratorTest.groovy │ ├── RelativePathTests.groovy │ └── PathUtilsTest.groovy ├── DrumKitBuilder2.iml ├── DrumKitBuilder2-griffonPlugins.iml ├── griffonw.bat └── notes └── ideas.txt /griffon-app/i18n/messages.properties: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /griffon-app/i18n/resources.properties: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lib/silk-1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/silk-1.3.jar -------------------------------------------------------------------------------- /resources/formats/Exs24/exs24.txt: -------------------------------------------------------------------------------- 1 | Starts : 2 | 3 | 01 01 00 00 28 00 00 00 94 03 00 00 40 00 00 00 -------------------------------------------------------------------------------- /lib/log4j-1.2.17.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/log4j-1.2.17.jar -------------------------------------------------------------------------------- /lib/appbundler-1.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/appbundler-1.0.jar -------------------------------------------------------------------------------- /resources/gfx/Icon.fla: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/gfx/Icon.fla -------------------------------------------------------------------------------- /lib/SampleMapBuilder.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/SampleMapBuilder.jar -------------------------------------------------------------------------------- /lib/griffon-rt-1.5.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/griffon-rt-1.5.0.jar -------------------------------------------------------------------------------- /lib/groovy-all-2.2.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/groovy-all-2.2.1.jar -------------------------------------------------------------------------------- /lib/slf4j-api-1.7.5.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/slf4j-api-1.7.5.jar -------------------------------------------------------------------------------- /lib/swing-worker-1.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/swing-worker-1.1.jar -------------------------------------------------------------------------------- /lib/swingx-core-1.6.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/swingx-core-1.6.4.jar -------------------------------------------------------------------------------- /lib/swingx-plaf-1.6.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/swingx-plaf-1.6.4.jar -------------------------------------------------------------------------------- /lib/swingxbuilder-0.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/swingxbuilder-0.3.jar -------------------------------------------------------------------------------- /resources/gfx/Splash.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/gfx/Splash.psd -------------------------------------------------------------------------------- /resources/gfx/Toolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/gfx/Toolbar.png -------------------------------------------------------------------------------- /resources/gfx/Toolbar.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/gfx/Toolbar.psd -------------------------------------------------------------------------------- /resources/keys/pubkey.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/keys/pubkey.der -------------------------------------------------------------------------------- /lib/jul-to-slf4j-1.7.5.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/jul-to-slf4j-1.7.5.jar -------------------------------------------------------------------------------- /lib/miglayout-core-4.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/miglayout-core-4.2.jar -------------------------------------------------------------------------------- /lib/miglayout-swing-4.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/miglayout-swing-4.2.jar -------------------------------------------------------------------------------- /lib/slf4j-log4j12-1.7.5.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/slf4j-log4j12-1.7.5.jar -------------------------------------------------------------------------------- /lib/swingx-action-1.6.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/swingx-action-1.6.4.jar -------------------------------------------------------------------------------- /lib/swingx-common-1.6.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/swingx-common-1.6.4.jar -------------------------------------------------------------------------------- /lib/timingframework-1.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/timingframework-1.0.jar -------------------------------------------------------------------------------- /resources/gfx/Interface.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/gfx/Interface.png -------------------------------------------------------------------------------- /resources/gfx/Interface.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/gfx/Interface.psd -------------------------------------------------------------------------------- /resources/gfx/Settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/gfx/Settings.png -------------------------------------------------------------------------------- /resources/gfx/Settings.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/gfx/Settings.psd -------------------------------------------------------------------------------- /resources/keys/privkey.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/keys/privkey.der -------------------------------------------------------------------------------- /wrapper/griffon-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/wrapper/griffon-wrapper.jar -------------------------------------------------------------------------------- /lib/PgsLookAndFeel-1.1.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/PgsLookAndFeel-1.1.1.jar -------------------------------------------------------------------------------- /lib/jcl-over-slf4j-1.7.5.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/jcl-over-slf4j-1.7.5.jar -------------------------------------------------------------------------------- /lib/swingx-beaninfo-1.6.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/swingx-beaninfo-1.6.4.jar -------------------------------------------------------------------------------- /lib/swingx-graphics-1.6.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/swingx-graphics-1.6.4.jar -------------------------------------------------------------------------------- /lib/swingx-painters-1.6.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/swingx-painters-1.6.4.jar -------------------------------------------------------------------------------- /packaged/SampleMapBuilder.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/packaged/SampleMapBuilder.pdf -------------------------------------------------------------------------------- /resources/docs/SMB Manual.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/docs/SMB Manual.docx -------------------------------------------------------------------------------- /resources/gfx/BrowseButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/gfx/BrowseButton.png -------------------------------------------------------------------------------- /resources/gfx/BrowseButton.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/gfx/BrowseButton.psd -------------------------------------------------------------------------------- /resources/gfx/ExportButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/gfx/ExportButton.png -------------------------------------------------------------------------------- /resources/gfx/ExportButton.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/gfx/ExportButton.psd -------------------------------------------------------------------------------- /resources/packaging/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/packaging/.DS_Store -------------------------------------------------------------------------------- /lib/glazedlists_java15-1.9.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/glazedlists_java15-1.9.0.jar -------------------------------------------------------------------------------- /resources/gfx/Export-Button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/gfx/Export-Button.png -------------------------------------------------------------------------------- /resources/gfx/ReScan Button.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/gfx/ReScan Button.psd -------------------------------------------------------------------------------- /resources/gfx/ReScan-Button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/gfx/ReScan-Button.png -------------------------------------------------------------------------------- /lib/PgsLookAndFeel-jide-1.1.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/PgsLookAndFeel-jide-1.1.1.jar -------------------------------------------------------------------------------- /lib/griffon-swing-runtime-1.4.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/griffon-swing-runtime-1.4.0.jar -------------------------------------------------------------------------------- /lib/griffon-tasks-runtime-0.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/griffon-tasks-runtime-0.1.jar -------------------------------------------------------------------------------- /lib/swingx-autocomplete-1.6.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/swingx-autocomplete-1.6.4.jar -------------------------------------------------------------------------------- /resources/docs/SampleMapBuilder.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/docs/SampleMapBuilder.pdf -------------------------------------------------------------------------------- /resources/formats/Exs24/OneZone.exs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Exs24/OneZone.exs -------------------------------------------------------------------------------- /resources/formats/Exs24/OneZone.pst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Exs24/OneZone.pst -------------------------------------------------------------------------------- /resources/gfx/Settings Button.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/gfx/Settings Button.psd -------------------------------------------------------------------------------- /resources/gfx/Settings-Button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/gfx/Settings-Button.png -------------------------------------------------------------------------------- /griffon-app/conf/webstart/griffon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/conf/webstart/griffon.png -------------------------------------------------------------------------------- /griffon-app/resources/icon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/resources/icon-16x16.png -------------------------------------------------------------------------------- /griffon-app/resources/icon-24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/resources/icon-24x24.png -------------------------------------------------------------------------------- /griffon-app/resources/icon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/resources/icon-32x32.png -------------------------------------------------------------------------------- /griffon-app/resources/icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/resources/icon-48x48.png -------------------------------------------------------------------------------- /griffon-app/resources/icon-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/resources/icon-64x64.png -------------------------------------------------------------------------------- /resources/formats/Exs24/TwoZones.exs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Exs24/TwoZones.exs -------------------------------------------------------------------------------- /resources/formats/Exs24/TwoZones.pst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Exs24/TwoZones.pst -------------------------------------------------------------------------------- /resources/packaging/icon-256x256.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/packaging/icon-256x256.icns -------------------------------------------------------------------------------- /griffon-app/conf/keys/productionKeystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/conf/keys/productionKeystore -------------------------------------------------------------------------------- /griffon-app/resources/icon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/resources/icon-128x128.png -------------------------------------------------------------------------------- /griffon-app/resources/icon-256x256.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/resources/icon-256x256.ico -------------------------------------------------------------------------------- /griffon-app/resources/icon-256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/resources/icon-256x256.png -------------------------------------------------------------------------------- /lib/griffon-miglayout-runtime-1.0.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/griffon-miglayout-runtime-1.0.0.jar -------------------------------------------------------------------------------- /lib/griffon-silkicons-runtime-1.0.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/griffon-silkicons-runtime-1.0.0.jar -------------------------------------------------------------------------------- /resources/formats/Exs24/._ThreeZones.exs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Exs24/._ThreeZones.exs -------------------------------------------------------------------------------- /resources/formats/Exs24/ThreeZones.exs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Exs24/ThreeZones.exs -------------------------------------------------------------------------------- /resources/formats/Reason NNXT/Empty.sxt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Reason NNXT/Empty.sxt -------------------------------------------------------------------------------- /resources/packaging/appbundler-1.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/packaging/appbundler-1.0.jar -------------------------------------------------------------------------------- /griffon-app/resources/SampleMapBuilder.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/resources/SampleMapBuilder.pdf -------------------------------------------------------------------------------- /lib/griffon-glazedlists-runtime-2.0.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/griffon-glazedlists-runtime-2.0.0.jar -------------------------------------------------------------------------------- /lib/griffon-lookandfeel-runtime-1.0.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/griffon-lookandfeel-runtime-1.0.0.jar -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/b.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/b.wav -------------------------------------------------------------------------------- /resources/formats/SampleOne/SampleOne.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/SampleOne/SampleOne.zip -------------------------------------------------------------------------------- /griffon-app/resources/SampleMapBuilder.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/resources/SampleMapBuilder.icns -------------------------------------------------------------------------------- /resources/formats/Reaktor/MDK-TwoSamples.map: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Reaktor/MDK-TwoSamples.map -------------------------------------------------------------------------------- /resources/formats/Reason NNXT/EA_IFF_85.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Reason NNXT/EA_IFF_85.doc -------------------------------------------------------------------------------- /resources/formats/SampleOne/SampleOne.preset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/SampleOne/SampleOne.preset -------------------------------------------------------------------------------- /resources/formats/Live/CrcTests/TestCRC_Gen.adv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/CrcTests/TestCRC_Gen.adv -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/S14.adv.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/S14.adv.7z -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/part2/b.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/part2/b.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/part2/c.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/part2/c.bin -------------------------------------------------------------------------------- /resources/formats/Live/Sampler/One Zone.adv.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/Sampler/One Zone.adv.7z -------------------------------------------------------------------------------- /resources/formats/Live/Sampler/Two Zones.adv.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/Sampler/Two Zones.adv.7z -------------------------------------------------------------------------------- /resources/formats/Live/ableton file format.txt: -------------------------------------------------------------------------------- 1 | 2 | 1 : 3 | 2 : Library 4 | 3 : Project 5 | 4 : Blank ? 6 | 5 : Live Pack 7 | -------------------------------------------------------------------------------- /resources/formats/Reason NNXT/BassDrum NNXT.sxt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Reason NNXT/BassDrum NNXT.sxt -------------------------------------------------------------------------------- /griffon-app/conf/webstart/griffon-icon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/conf/webstart/griffon-icon-128x128.png -------------------------------------------------------------------------------- /griffon-app/conf/webstart/griffon-icon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/conf/webstart/griffon-icon-16x16.png -------------------------------------------------------------------------------- /griffon-app/conf/webstart/griffon-icon-24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/conf/webstart/griffon-icon-24x24.png -------------------------------------------------------------------------------- /griffon-app/conf/webstart/griffon-icon-256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/conf/webstart/griffon-icon-256x256.png -------------------------------------------------------------------------------- /griffon-app/conf/webstart/griffon-icon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/conf/webstart/griffon-icon-32x32.png -------------------------------------------------------------------------------- /griffon-app/conf/webstart/griffon-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/conf/webstart/griffon-icon-48x48.png -------------------------------------------------------------------------------- /griffon-app/conf/webstart/griffon-icon-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/griffon-app/conf/webstart/griffon-icon-64x64.png -------------------------------------------------------------------------------- /lib/griffon-lookandfeel-pgslaf-runtime-1.0.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/lib/griffon-lookandfeel-pgslaf-runtime-1.0.0.jar -------------------------------------------------------------------------------- /resources/formats/Exs24/OneZoneWithALongerName.exs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Exs24/OneZoneWithALongerName.exs -------------------------------------------------------------------------------- /resources/formats/Live/OSX Data Blocks/Block1.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Data Blocks/Block1.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Data Blocks/Block2.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Data Blocks/Block2.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Data Blocks/Block3.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Data Blocks/Block3.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Data Blocks/Block4.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Data Blocks/Block4.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/part2/b.adv.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/part2/b.adv.7z -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/part2/c.adv.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/part2/c.adv.7z -------------------------------------------------------------------------------- /resources/formats/Live/Sampler/One Sampler.adg.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/Sampler/One Sampler.adg.gz -------------------------------------------------------------------------------- /resources/formats/Live/Sampler/Two Samplers.adg.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/Sampler/Two Samplers.adg.7z -------------------------------------------------------------------------------- /resources/formats/Live/Simpler/Two Simplers.adg.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/Simpler/Two Simplers.adg.7z -------------------------------------------------------------------------------- /resources/formats/Reason NNXT/2 BassDrums NNXT.sxt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Reason NNXT/2 BassDrums NNXT.sxt -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/ableton/archive/Event.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.ableton.archive; 2 | 3 | public interface Event { 4 | } 5 | -------------------------------------------------------------------------------- /resources/formats/Exs24/._OneZoneWithALongerName.exs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Exs24/._OneZoneWithALongerName.exs -------------------------------------------------------------------------------- /resources/formats/Live/CrcTests/TestCRC.adv.orig.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/CrcTests/TestCRC.adv.orig.gz -------------------------------------------------------------------------------- /resources/formats/Live/OSX Data Blocks/FolderRef.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Data Blocks/FolderRef.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Data Blocks/SMBMount.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Data Blocks/SMBMount.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Data Blocks/SilenceA.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Data Blocks/SilenceA.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Data Blocks/SilenceB.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Data Blocks/SilenceB.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Data Blocks/TestWavA.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Data Blocks/TestWavA.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/S14_FileRef.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/S14_FileRef.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Data Blocks/LongVolumeA.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Data Blocks/LongVolumeA.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Data Blocks/NacintoshA.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Data Blocks/NacintoshA.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/FileRef_A_Wav.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/FileRef_A_Wav.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/OSX_Simpler.adv.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/OSX_Simpler.adv.7z -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/part2/bnodata2.adv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/part2/bnodata2.adv -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/part2/bnodata3.adv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/part2/bnodata3.adv -------------------------------------------------------------------------------- /resources/formats/Live/OSX Data Blocks/TestWavA_Later.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Data Blocks/TestWavA_Later.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/OSX_OneSample.adv.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/OSX_OneSample.adv.7z -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/OSX_TwoSamples.adv.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/OSX_TwoSamples.adv.7z -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/part2/bnodata2.adv.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/part2/bnodata2.adv.gz -------------------------------------------------------------------------------- /resources/formats/Reason NNXT/NN-XT Patch File Format.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Reason NNXT/NN-XT Patch File Format.doc -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/NoSourceContext.adv.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/NoSourceContext.adv.7z -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/part2/bnodata_test.adv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/part2/bnodata_test.adv -------------------------------------------------------------------------------- /resources/formats/Live/Sampler/One Zone Non Relative.adv.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/Sampler/One Zone Non Relative.adv.7z -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/OSX_Sampler_TestWav.adv.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/OSX_Sampler_TestWav.adv.7z -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/OneSample_OriginalFileRef.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/OneSample_OriginalFileRef.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/OneSamplerTestWavFileRef.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/OneSamplerTestWavFileRef.bin -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/ableton/archive/ModulationTarget.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.ableton.archive; 2 | 3 | class ModulationTarget { 4 | public int id = 0; 5 | } 6 | -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/OneSample_SampleRef_NoFolder.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/OneSample_SampleRef_NoFolder.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/OneSample_SourceContext_Folder.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/OneSample_SourceContext_Folder.bin -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/SourceContext_A_Wav_Documents.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/SourceContext_A_Wav_Documents.bin -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/ableton/archive/FloatEvent.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.ableton.archive; 2 | 3 | class FloatEvent implements Event { 4 | public Float value; 5 | } 6 | -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/OSX_OneSampleNoSourceContext_test.adv.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normalised/SampleMapBuilder/HEAD/resources/formats/Live/OSX Examples/OSX_OneSampleNoSourceContext_test.adv.7z -------------------------------------------------------------------------------- /scripts/_Events.groovy: -------------------------------------------------------------------------------- 1 | eventPreparePackageEnd = {installers -> 2 | ant.copy( todir: "${projectWorkDir}/packaged/lib/", overwrite: true ) { 3 | fileset( dir: "${basedir}/dist/", includes: "*.jar" ) 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/ableton/archive/MidiControllerRange.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.ableton.archive; 2 | 3 | class MidiControllerRange { 4 | public int min; 5 | public int max; 6 | } 7 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/generic/ZoneFactory.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.generic; 2 | 3 | /** 4 | * Created by martin on 08/01/12 at 16:45 5 | */ 6 | public interface ZoneFactory { 7 | Zone createZone(); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/ableton/archive/GroupDevicePreset.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.ableton.archive; 2 | 3 | /** 4 | * Created by martin on 07/01/11 at 10:59 5 | */ 6 | class GroupDevicePreset { 7 | } 8 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/ableton/archive/ArrangerAutomation.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.ableton.archive; 2 | 3 | import java.util.List; 4 | 5 | class ArrangerAutomation { 6 | 7 | List events; 8 | } 9 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/ableton/archive/MultiSampler.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.ableton.archive; 2 | 3 | /** 4 | * Created by martin on 05/01/11 at 00:36 5 | */ 6 | class MultiSampler extends Device { 7 | } 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | resources/packaging/SMB.app/ 3 | resources/packaging/lib/ 4 | staging/ 5 | dist/ 6 | packaged/SampleMapBuilder-OSX.zip 7 | packaged/SampleMapBuilder-Windows.zip 8 | packaged/Sample Map Builder.app/Contents/Resources/Java/ 9 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/ableton/archive/DrumGroupDevice.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.ableton.archive; 2 | 3 | /** 4 | * Created by martin on 05/01/11 at 00:36 5 | */ 6 | class DrumGroupDevice extends Device { 7 | } 8 | -------------------------------------------------------------------------------- /wrapper/griffon-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRIFFON_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRIFFON_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=http\://dist.codehaus.org/griffon/griffon-1.2.0-bin.zip 6 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/dkb/NameComparator.groovy: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.dkb 2 | 3 | class NameComparator implements Comparator { 4 | int compare(String o1, String o2) { 5 | return(o1.compareToIgnoreCase(o2)) 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/generic/InstrumentFactory.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.generic; 2 | 3 | /** 4 | * Created by martin on 25/04/11 at 07:18 5 | */ 6 | public interface InstrumentFactory { 7 | Instrument createInstrument(String name); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/kitbuilder/SimpleProgressListener.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.kitbuilder; 2 | 3 | /** 4 | * Created by martin on 20/01/12 at 17:03 5 | */ 6 | public interface SimpleProgressListener { 7 | public void reportProgress(Float percent); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/dkb/ConfigModel.groovy: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.dkb 2 | 3 | /** 4 | * Model for Configs in the FormatOptionsModel 5 | * 6 | */ 7 | class ConfigModel { 8 | String absolutePath 9 | String relativePath 10 | boolean active 11 | } 12 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/generic/SampleFactory.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.generic; 2 | 3 | import java.io.File; 4 | 5 | /** 6 | * Created by martin on 08/01/12 at 16:44 7 | */ 8 | public interface SampleFactory { 9 | Sample createSample(File file); 10 | } 11 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/ableton/archive/Device.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.ableton.archive; 2 | 3 | /** 4 | * Created by martin on 05/01/11 at 00:35 5 | */ 6 | class Device { 7 | public Boolean isExpaned; 8 | public Boolean isFolded; 9 | } 10 | -------------------------------------------------------------------------------- /src/main/javaFlacEncoder/UnfinishedBlockError.java: -------------------------------------------------------------------------------- 1 | package javaFlacEncoder; 2 | 3 | /** 4 | * Created by martin on 20/01/12 at 14:08 5 | */ 6 | public class UnfinishedBlockError extends Throwable { 7 | public UnfinishedBlockError(String s) { 8 | super(s); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/exs24/Exs24Config.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.exs24; 2 | 3 | import com.relivethefuture.kitbuilder.output.OutputConfig; 4 | 5 | /** 6 | * Created by martin on 28/05/13 at 20:25 7 | */ 8 | public class Exs24Config extends OutputConfig { 9 | } 10 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/kitbuilder/builder/BuildProgressListener.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.kitbuilder.builder; 2 | 3 | import java.util.EventListener; 4 | 5 | public interface BuildProgressListener extends EventListener { 6 | public void handleProgressEvent(BuildProgressEvent event); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/generic/BasicZoneFactory.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.generic; 2 | 3 | /** 4 | * Created by martin on 08/01/12 at 16:50 5 | */ 6 | public class BasicZoneFactory implements ZoneFactory { 7 | public Zone createZone() { 8 | return new BasicZone(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/dkb/RootNoteComparator.groovy: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.dkb 2 | 3 | import com.relivethefuture.generic.Sample 4 | 5 | class RootNoteComparator implements Comparator { 6 | int compare(Sample o1, Sample o2) { 7 | return o1.root.compareTo(o2.root) 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /griffon-app/resources/templates/shortcircuit/InstrumentTemplate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {zones} 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/generic/BasicInstrumentFactory.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.generic; 2 | 3 | /** 4 | * Created by martin on 08/01/12 at 15:58 5 | */ 6 | public class BasicInstrumentFactory implements InstrumentFactory { 7 | public Instrument createInstrument(String name) { 8 | return new BasicInstrument(name); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /griffon-app/models/drumkitbuilder2/ExportProgressModel.groovy: -------------------------------------------------------------------------------- 1 | package drumkitbuilder2 2 | 3 | import groovy.beans.Bindable 4 | 5 | class ExportProgressModel { 6 | @Bindable String currentFormat 7 | @Bindable String currentMap 8 | @Bindable Integer overallProgress 9 | @Bindable Integer formatProgress 10 | @Bindable String buttonLabel = "Cancel" 11 | } -------------------------------------------------------------------------------- /src/main/com/relivethefuture/generic/BasicSampleFactory.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.generic; 2 | 3 | import java.io.File; 4 | 5 | /** 6 | * Created by martin on 08/01/12 at 16:49 7 | */ 8 | public class BasicSampleFactory implements SampleFactory { 9 | public Sample createSample(File file) { 10 | return new BasicSample(file); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/kitbuilder/writers/InstrumentWriter.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.kitbuilder.writers; 2 | 3 | import com.relivethefuture.generic.Instrument; 4 | import com.relivethefuture.kitbuilder.SimpleProgressListener; 5 | 6 | import java.io.File; 7 | 8 | public interface InstrumentWriter { 9 | void write(Instrument instrument, File outputDirectory); 10 | } 11 | -------------------------------------------------------------------------------- /package.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | export JAVA_HOME="D:/dev/apps/jdk1.6.0_45" 3 | griffon package zip 4 | cp dist/zip/lib/* packaged/lib/ 5 | cp dist/zip/lib/* "packaged/Sample Map Builder.app/Contents/Resources/Java/" 6 | cd packaged 7 | zip -r SampleMapBuilder-Windows.zip SampleMapBuilder.exe SampleMapBuilder.pdf lib/ 8 | zip -r SampleMapBuilder-OSX.zip "Sample Map Builder.app" SampleMapBuilder.pdf 9 | 10 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/ableton/AbletonSamplerZonesWriter.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.ableton; 2 | 3 | /** 4 | * Created by martin on 24/04/11 at 14:19 5 | */ 6 | public class AbletonSamplerZonesWriter extends AbletonWriter { 7 | 8 | public AbletonSamplerZonesWriter() { 9 | mainTemplate = "ableton/SamplerTemplate.xml"; 10 | setupTemplates(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/sfz/SfzConfig.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.sfz; 2 | 3 | import com.relivethefuture.formats.SamplerFormat; 4 | import com.relivethefuture.kitbuilder.output.OutputConfig; 5 | 6 | public class SfzConfig extends OutputConfig { 7 | 8 | public SfzConfig() { 9 | setWriter(new SFZWriter(this)); 10 | setFormat(SamplerFormat.SFZ); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /griffon-app/conf/Builder.groovy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | jx { 5 | 'groovy.swing.SwingXBuilder' { 6 | controller = ['withWorker'] 7 | view = '*' 8 | } 9 | } 10 | 11 | 12 | 13 | 14 | jx { 15 | 'groovy.swing.SwingXBuilder' { 16 | view = '*' 17 | } 18 | } 19 | 20 | 21 | root { 22 | 'groovy.swing.SwingBuilder' { 23 | controller = ['Threading'] 24 | view = '*' 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /application.properties: -------------------------------------------------------------------------------- 1 | #Griffon Metadata file 2 | #Sat Mar 01 13:23:21 CET 2014 3 | app.griffon.version=1.5.0 4 | app.name=SampleMapBuilder 5 | app.toolkit=swing 6 | app.version=0.1 7 | archetype.default=1.2.0 8 | plugins.glazedlists=2.0.0 9 | plugins.installer=0.8 10 | plugins.lookandfeel=1.0.0 11 | plugins.lookandfeel-pgslaf=1.0.0 12 | plugins.miglayout=1.0.0 13 | plugins.silkicons=1.0.0 14 | plugins.swing=1.4.0 15 | plugins.swingx-builder=0.7 16 | plugins.tasks=0.1 17 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/generic/Zone.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.generic; 2 | 3 | /** 4 | * Created by martin on 24/04/11 at 21:22 5 | */ 6 | public interface Zone { 7 | 8 | MidiRange getNoteRange(); 9 | MidiRange getVelocityRange(); 10 | void setKeyRange(Integer lowKey, Integer highKey); 11 | void setSample(Sample s); 12 | Sample getSample(); 13 | 14 | void setBaseNote(Integer baseNote); 15 | Integer getBaseNote(); 16 | } 17 | -------------------------------------------------------------------------------- /application.properties.orig: -------------------------------------------------------------------------------- 1 | #Griffon Metadata file 2 | #Fri Jun 07 09:24:01 CEST 2013 3 | app.griffon.version=1.3.0 4 | app.name=SampleMapBuilder 5 | app.toolkit=swing 6 | app.version=0.1 7 | archetype.default=1.2.0 8 | plugins.glazedlists=2.0.0 9 | plugins.installer=0.8 10 | plugins.lookandfeel=1.0.0 11 | plugins.lookandfeel-pgslaf=1.0.0 12 | plugins.miglayout=1.0.0 13 | plugins.silkicons=1.0.0 14 | plugins.swing=1.3.0 15 | plugins.swingx-builder=0.7 16 | plugins.tasks=0.1 17 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/ableton/archive/Ableton.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.ableton.archive; 2 | 3 | /** 4 | * Created by martin on 07/01/11 at 10:56 5 | * 6 | * 7 | */ 8 | class Ableton { 9 | String majorVersion = "4"; 10 | String minorVersion = "8.1_226"; 11 | // TODO : replace with KitBuilder info 12 | String creator = "Ableton Live 8.2.1"; 13 | } 14 | -------------------------------------------------------------------------------- /griffon-app/resources/templates/renoise/sections/ZoneTemplate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {index} 4 | true 5 | true 6 | {rootkey} 7 | {keymin} 8 | {keymax} 9 | 0 10 | 127 11 | 12 | -------------------------------------------------------------------------------- /griffon-app/views/drumkitbuilder2/DrumKitBuilderStatusBar.groovy: -------------------------------------------------------------------------------- 1 | package drumkitbuilder2 2 | 3 | vbox { 4 | separator() 5 | panel { 6 | gridBagLayout() 7 | label(id: 'status', text: bind { model.status }, 8 | constraints: gbc(weightx: 1.0, 9 | anchor: GridBagConstraints.WEST, 10 | fill: GridBagConstraints.HORIZONTAL, 11 | insets: [1, 3, 1, 3]) 12 | ) 13 | } 14 | } -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/exs24/Exs24Writer.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.exs24; 2 | 3 | import com.relivethefuture.generic.Instrument; 4 | import com.relivethefuture.kitbuilder.writers.BasicInstrumentWriter; 5 | 6 | import java.io.File; 7 | 8 | /** 9 | * Created by martin on 28/05/13 at 20:26 10 | */ 11 | public class Exs24Writer extends BasicInstrumentWriter { 12 | 13 | public void write(Instrument instrument, File outputDirectory) { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /griffon-app/lifecycle/Ready.groovy: -------------------------------------------------------------------------------- 1 | /* 2 | * This script is executed inside the UI thread, so be sure to call 3 | * long running code in another thread. 4 | * 5 | * You have the following options 6 | * - execOutsideUI { // your code } 7 | * - execFuture { // your code } 8 | * - Thread.start { // your code } 9 | * 10 | * You have the following options to run code again inside the UI thread 11 | * - execInsideUIAsync { // your code } 12 | * - execInsideUISync { // your code } 13 | */ 14 | -------------------------------------------------------------------------------- /griffon-app/lifecycle/Stop.groovy: -------------------------------------------------------------------------------- 1 | /* 2 | * This script is executed inside the UI thread, so be sure to call 3 | * long running code in another thread. 4 | * 5 | * You have the following options 6 | * - execOutsideUI { // your code } 7 | * - execFuture { // your code } 8 | * - Thread.start { // your code } 9 | * 10 | * You have the following options to run code again inside the UI thread 11 | * - execInsideUIAsync { // your code } 12 | * - execInsideUISync { // your code } 13 | */ 14 | -------------------------------------------------------------------------------- /griffon-app/lifecycle/Shutdown.groovy: -------------------------------------------------------------------------------- 1 | /* 2 | * This script is executed inside the UI thread, so be sure to call 3 | * long running code in another thread. 4 | * 5 | * You have the following options 6 | * - execOutsideUI { // your code } 7 | * - execFuture { // your code } 8 | * - Thread.start { // your code } 9 | * 10 | * You have the following options to run code again inside the UI thread 11 | * - execInsideUIAsync { // your code } 12 | * - execInsideUISync { // your code } 13 | */ 14 | -------------------------------------------------------------------------------- /griffon-app/lifecycle/Startup.groovy: -------------------------------------------------------------------------------- 1 | /* 2 | * This script is executed inside the UI thread, so be sure to call 3 | * long running code in another thread. 4 | * 5 | * You have the following options 6 | * - execOutsideUI { // your code } 7 | * - execFuture { // your code } 8 | * - Thread.start { // your code } 9 | * 10 | * You have the following options to run code again inside the UI thread 11 | * - execInsideUIAsync { // your code } 12 | * - execInsideUISync { // your code } 13 | */ 14 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/ableton/AbletonDrumRackSamplersWriter.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.ableton; 2 | 3 | /** 4 | * Created by martin on 21/01/12 at 20:35 5 | */ 6 | public class AbletonDrumRackSamplersWriter extends AbletonWriter { 7 | 8 | public AbletonDrumRackSamplersWriter() { 9 | itemTemplate = "ableton/sections/SamplerRackItemTemplate.xml"; 10 | mainTemplate = "ableton/DrumRackTemplate.xml"; 11 | setupTemplates(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/ableton/AbletonDrumRackSimplersWriter.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.ableton; 2 | 3 | /** 4 | * Created by martin on 21/01/12 at 20:35 5 | */ 6 | public class AbletonDrumRackSimplersWriter extends AbletonWriter { 7 | 8 | public AbletonDrumRackSimplersWriter() { 9 | itemTemplate = "ableton/sections/SimplerRackItemTemplate.xml"; 10 | mainTemplate = "ableton/DrumRackTemplate.xml"; 11 | setupTemplates(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/renoise/RenoiseConfig.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.renoise; 2 | 3 | import com.relivethefuture.formats.SamplerFormat; 4 | import com.relivethefuture.kitbuilder.output.OutputConfig; 5 | 6 | /** 7 | * Created by martin on 08/01/12 at 17:55 8 | */ 9 | public class RenoiseConfig extends OutputConfig { 10 | public RenoiseConfig() { 11 | setWriter(new RenoiseWriter()); 12 | setFormat(SamplerFormat.RENOISE_INSTRUMENT); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/ableton/SamplerZonesConfig.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.ableton; 2 | 3 | import com.relivethefuture.formats.SamplerFormat; 4 | import com.relivethefuture.kitbuilder.output.OutputConfig; 5 | 6 | /** 7 | * Created by martin on 08/01/12 at 17:55 8 | */ 9 | public class SamplerZonesConfig extends OutputConfig { 10 | public SamplerZonesConfig() { 11 | setWriter(new AbletonSamplerZonesWriter()); 12 | setFormat(SamplerFormat.ABLETON_SAMPLER); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/reaktor/ReaktorConfig.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.reaktor; 2 | 3 | import com.relivethefuture.formats.SamplerFormat; 4 | import com.relivethefuture.kitbuilder.output.OutputConfig; 5 | 6 | /** 7 | * Created by martin on 08/01/12 at 16:56 8 | */ 9 | public class ReaktorConfig extends OutputConfig { 10 | 11 | public ReaktorConfig() { 12 | super(); 13 | setWriter(new ReaktorSampleMapWriter()); 14 | setFormat(SamplerFormat.REAKTOR); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/shortcircuit/ShortcircuitConfig.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.shortcircuit; 2 | 3 | import com.relivethefuture.formats.SamplerFormat; 4 | import com.relivethefuture.kitbuilder.output.OutputConfig; 5 | 6 | /** 7 | * Created by martin on 08/01/12 at 17:55 8 | */ 9 | public class ShortcircuitConfig extends OutputConfig { 10 | public ShortcircuitConfig() { 11 | setWriter(new ShortcircuitWriter()); 12 | setFormat(SamplerFormat.SHORTCIRCUIT); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /griffon-app/views/drumkitbuilder2/DrumKitBuilderToolBar.groovy: -------------------------------------------------------------------------------- 1 | package drumkitbuilder2 2 | 3 | import javax.swing.SwingConstants 4 | import java.awt.Color 5 | 6 | toolBar(id: 'toolbar', rollover: true,floatable:false,border:matteBorder(color:Color.BLACK,top:1,left:0,right:0,bottom:0)) { 7 | button(browseAction, text: null) 8 | button(scanAction, text: null) 9 | button(exportAction, text: null) 10 | separator(orientation: SwingConstants.VERTICAL) 11 | button(configureAction, text: null) 12 | button(helpAction, text: null) 13 | } 14 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/ableton/DrumRackSamplersConfig.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.ableton; 2 | 3 | import com.relivethefuture.formats.SamplerFormat; 4 | import com.relivethefuture.kitbuilder.output.OutputConfig; 5 | 6 | /** 7 | * Created by martin on 08/01/12 at 17:55 8 | */ 9 | public class DrumRackSamplersConfig extends OutputConfig { 10 | public DrumRackSamplersConfig() { 11 | setWriter(new AbletonDrumRackSamplersWriter()); 12 | setFormat(SamplerFormat.ABLETON_DRUM_RACK_SAMPLERS); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/ableton/DrumRackSimplersConfig.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.ableton; 2 | 3 | import com.relivethefuture.formats.SamplerFormat; 4 | import com.relivethefuture.kitbuilder.output.OutputConfig; 5 | 6 | /** 7 | * Created by martin on 08/01/12 at 17:55 8 | */ 9 | public class DrumRackSimplersConfig extends OutputConfig { 10 | public DrumRackSimplersConfig() { 11 | setWriter(new AbletonDrumRackSimplersWriter()); 12 | setFormat(SamplerFormat.ABLETON_DRUM_RACK_SIMPLERS); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/kitbuilder/builder/BuildProgressEvent.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.kitbuilder.builder; 2 | 3 | import java.util.EventObject; 4 | 5 | public class BuildProgressEvent extends EventObject { 6 | 7 | private static final long serialVersionUID = 1L; 8 | 9 | private int total; 10 | private int current; 11 | 12 | public BuildProgressEvent(MapBuilder builder, int total, int current) { 13 | super(builder); 14 | this.total = total; 15 | this.current = current; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /griffon-app/services/drumkitbuilder2/AudioPlayerService.groovy: -------------------------------------------------------------------------------- 1 | package drumkitbuilder2 2 | 3 | import com.relivethefuture.audio.AudioFilePlayer 4 | 5 | /** 6 | * Created by martin on 09/04/13 at 21:47 7 | * 8 | */ 9 | class AudioPlayerService { 10 | AudioFilePlayer audioFilePlayer; 11 | 12 | void serviceInit() { 13 | audioFilePlayer = new AudioFilePlayer() 14 | } 15 | 16 | void serviceDestroy() { 17 | audioFilePlayer = null 18 | } 19 | 20 | def play(File file) { 21 | audioFilePlayer.play(file) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/ableton/OSXFileDataGenerator.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.ableton; 2 | 3 | import java.io.File; 4 | 5 | /** 6 | * Created by martin on 04/08/12 at 16:03 7 | */ 8 | public class OSXFileDataGenerator { 9 | 10 | // 40 byte wide hex string : 11 | /* 12 | 00000000014E00020000094D6163696E746F7368000000000000000000000000000000000000CAA4 13 | ... 14 | 00012F0000150002000BFFFF0000 15 | */ 16 | public String createOSXFileData(File file, Boolean isSourceContext) { 17 | return ""; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /griffon-app/resources/templates/studio_one/ZoneTemplate.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /griffon-app/views/drumkitbuilder2/DrumKitBuilderActions.groovy: -------------------------------------------------------------------------------- 1 | package drumkitbuilder2 2 | 3 | actions { 4 | action(scanAction, smallIcon: silkIcon('package_add'),toolTipText: "ReScan Source Folder",id:"scanAction",enabled:false) 5 | action(browseAction, smallIcon: silkIcon('folder'),toolTipText: "Browse for Source Folder") 6 | action(exportAction, smallIcon: silkIcon('package_go'),toolTipText: "Export",id:'exportAction',enabled:false) 7 | action(configureAction, smallIcon: silkIcon('wrench'),toolTipText: "Configuration") 8 | action(helpAction, smallIcon: silkIcon('help'),toolTipText:"Help") 9 | } -------------------------------------------------------------------------------- /src/main/com/relivethefuture/dkb/LayoutStyle.groovy: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.dkb; 2 | 3 | enum LayoutStyle { 4 | SOURCE("Source"), 5 | RELATIVE("Relative"), 6 | ABSOLUTE("Individual"); 7 | 8 | String name; 9 | 10 | LayoutStyle(String t) { 11 | name = t; 12 | } 13 | 14 | static listNames() { 15 | [SOURCE.name,RELATIVE.name,ABSOLUTE.name] 16 | } 17 | 18 | static list() { 19 | [SOURCE,RELATIVE,ABSOLUTE] 20 | } 21 | 22 | static fromName(String name) { 23 | return list().find { it.name.equalsIgnoreCase(name) } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /griffon-app/lifecycle/Initialize.groovy: -------------------------------------------------------------------------------- 1 | 2 | import java.util.prefs.Preferences 3 | 4 | import static griffon.util.GriffonApplicationUtils.getIsMacOSX 5 | 6 | /* 7 | * This script is executed inside the UI thread, so be sure to call 8 | * long running code in another thread. 9 | * 10 | * You have the following options 11 | * - execOutsideUI { // your code } 12 | * - execFuture { // your code } 13 | * - Thread.start { // your code } 14 | * 15 | * You have the following options to run code again inside the UI thread 16 | * - execInsideUIAsync { // your code } 17 | * - execInsideUISync { // your code } 18 | */ 19 | -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/OneSample_Context.hex: -------------------------------------------------------------------------------- 1 | 00000000013E00020001094E6163696E746F7368000000000000000000000000000000000000CAA4C77D482B000000044A3309446F63756D656E747300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044A34CAA4C8480000000000000000FFFFFFFF000009200000000000000000000000000000000455736572001000080000CAA4B96D0000001100080000CAA4BA3800000001000800044A330000BED7000200204E6163696E746F73683A55736572733A00557365723A00446F63756D656E7473000E001400090044006F00630075006D0065006E00740073000F00140009004E006100630069006E0074006F007300680012001455736572732F557365722F446F63756D656E7473001300012F0000150002000BFFFF0000 -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/SourceContext_A_Wav_Documents.hex: -------------------------------------------------------------------------------- 1 | 00000000013E00020001094E6163696E746F7368000000000000000000000000000000000000CAA4C77D482B000000044A3309446F63756D656E747300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044A34CAA4C8480000000000000000FFFFFFFF000009200000000000000000000000000000000455736572001000080000CAA4B96D0000001100080000CAA4BA3800000001000800044A330000BED7000200204E6163696E746F73683A55736572733A00557365723A00446F63756D656E7473000E001400090044006F00630075006D0065006E00740073000F00140009004E006100630069006E0074006F007300680012001455736572732F557365722F446F63756D656E7473001300012F0000150002000BFFFF0000 -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/OneSample.hex: -------------------------------------------------------------------------------- 1 | 00000000014E00020000094E6163696E746F7368000000000000000000000000000000000000CAA4C77D482B000000044A3405622E776176000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005C570BFC12CD10000000000000000FFFFFFFF0000092000000000000000000000000000000009446F63756D656E747300001000080000CAA4B96D0000001100080000BFC12CD100000001000C00044A3400044A330000BED7000200274E6163696E746F73683A55736572733A00557365723A00446F63756D656E74733A00622E77617600000E000C00050062002E007700610076000F00140009004E006100630069006E0074006F007300680012001A55736572732F557365722F446F63756D656E74732F622E776176001300012F0000150002000BFFFF0000 -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/part2/b.hex: -------------------------------------------------------------------------------- 1 | 00000000014E00020000094E6163696E746F7368000000000000000000000000000000000000CAA4C77D482B000000044A3405622E776176000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005C570BFC12CD10000000000000000FFFFFFFF0000092000000000000000000000000000000009446F63756D656E747300001000080000CAA4B96D0000001100080000BFC12CD100000001000C00044A3400044A330000BED7000200274E6163696E746F73683A55736572733A00557365723A00446F63756D656E74733A00622E77617600000E000C00050062002E007700610076000F00140009004E006100630069006E0074006F007300680012001A55736572732F557365722F446F63756D656E74732F622E776176001300012F0000150002000BFFFF0000 -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/part2/c.hex: -------------------------------------------------------------------------------- 1 | 00000000014E00020000094E6163696E746F7368000000000000000000000000000000000000CAA4C77D482B000000044A3405632E7761760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064D56BFC12CD10000000000000000FFFFFFFF0000092000000000000000000000000000000009446F63756D656E747300001000080000CAA4B96D0000001100080000BFC12CD100000001000C00044A3400044A330000BED7000200274E6163696E746F73683A55736572733A00557365723A00446F63756D656E74733A00632E77617600000E000C00050063002E007700610076000F00140009004E006100630069006E0074006F007300680012001A55736572732F557365722F446F63756D656E74732F632E776176001300012F0000150002000BFFFF0000 -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/FileRef_A_Wav.hex: -------------------------------------------------------------------------------- 1 | 00000000014E00020000094E6163696E746F7368000000000000000000000000000000000000CAA4C77D482B000000044A3405612E776176000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005C98CC0AC3FAB0000000000000000FFFFFFFF0000092000000000000000000000000000000009446F63756D656E747300001000080000CAA4B96D0000001100080000C0AC319B00000001000C00044A3400044A330000BED7000200274E6163696E746F73683A55736572733A00557365723A00446F63756D656E74733A00612E77617600000E000C00050061002E007700610076000F00140009004E006100630069006E0074006F007300680012001A55736572732F557365722F446F63756D656E74732F612E776176001300012F0000150002000BFFFF0000 -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/OneSample_OriginalFileRef.hex: -------------------------------------------------------------------------------- 1 | 00000000014E00020000094E6163696E746F7368000000000000000000000000000000000000CAA4C77D482B000000044A3405622E776176000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005C570BFC12CD10000000000000000FFFFFFFF0000092000000000000000000000000000000009446F63756D656E747300001000080000CAA4B96D0000001100080000BFC12CD100000001000C00044A3400044A330000BED7000200274E6163696E746F73683A55736572733A00557365723A00446F63756D656E74733A00622E77617600000E000C00050062002E007700610076000F00140009004E006100630069006E0074006F007300680012001A55736572732F557365722F446F63756D656E74732F622E776176001300012F0000150002000BFFFF0000 -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/S14_FileRef.hex: -------------------------------------------------------------------------------- 1 | 00000000015600020000094E6163696E746F7368000000000000000000000000000000000000CAA4C77D482B000000044A34075331342E616966000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064BDDCB4741264149464600000000FFFFFFFF0000092000000000000000000000000000000009446F63756D656E747300001000080000CAA4B96D0000001100080000CB47412600000001000C00044A3400044A330000BED7000200294E6163696E746F73683A55736572733A00557365723A00446F63756D656E74733A005331342E61696600000E00100007005300310034002E006100690066000F00140009004E006100630069006E0074006F007300680012001C55736572732F557365722F446F63756D656E74732F5331342E616966001300012F0000150002000BFFFF0000 -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/OneSamplerTestWavFileRef.hex: -------------------------------------------------------------------------------- 1 | 00000000015A00020000094E6163696E746F7368000000000000000000000000000000000000CAA4C77D482B000000044A3408746573742E776176000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005BB93C0AC3FAB0000000000000000FFFFFFFF0000092000000000000000000000000000000009446F63756D656E747300001000080000CAA4B96D0000001100080000C0AC319B00000001000C00044A3400044A330000BED70002002A4E6163696E746F73683A55736572733A00557365723A00446F63756D656E74733A00746573742E776176000E001200080074006500730074002E007700610076000F00140009004E006100630069006E0074006F007300680012001D55736572732F557365722F446F63756D656E74732F746573742E77617600001300012F0000150002000BFFFF0000 -------------------------------------------------------------------------------- /src/main/com/relivethefuture/generic/Instrument.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.generic; 2 | 3 | import com.relivethefuture.kitbuilder.model.FolderOfSamples; 4 | 5 | import java.io.File; 6 | import java.util.List; 7 | 8 | public interface Instrument { 9 | public void setName(String name); 10 | public String getName(); 11 | 12 | public void setZones(List zones); 13 | List getZones(); 14 | 15 | public void setSampleFactory(SampleFactory sampleFactory); 16 | public void setZoneFactory(ZoneFactory zoneFactory); 17 | 18 | public File getSamplesDirectory(); 19 | public File getSourceDirectory(); 20 | 21 | public void setSource(FolderOfSamples fos); 22 | public FolderOfSamples getSource(); 23 | } 24 | -------------------------------------------------------------------------------- /griffon-app/services/drumkitbuilder2/FileScannerService.groovy: -------------------------------------------------------------------------------- 1 | package drumkitbuilder2 2 | 3 | import com.relivethefuture.FileSystemScanner 4 | 5 | class FileScannerService { 6 | 7 | FileSystemScanner scanner 8 | 9 | void serviceInit() { 10 | scanner = new FileSystemScanner() 11 | } 12 | 13 | void serviceDestroy() { 14 | scanner.reset() 15 | } 16 | 17 | def setRoot(File sourceDirectory) { 18 | scanner.reset() 19 | scanner.setRoot(sourceDirectory) 20 | } 21 | 22 | def work() { 23 | return scanner.work(); 24 | } 25 | 26 | def getItems() { 27 | return scanner.items 28 | } 29 | 30 | def getTotalSamples() { 31 | return scanner.totalNumberOfSamples; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /resources/formats/Live/DataBlocks.txt: -------------------------------------------------------------------------------- 1 | File Ref : 2 | 3 | 44003A005C00730061006D0070006C00650073005C004D0044004B005C006400720075006D007300 4 | 5C004B00690063006B0073005C0053006F006C00690064002E007700610076000000 5 | 6 | D.:.\.s.a.m.p.l.e.s.\.M.D.K.\.d.r.u.m.s.\.K.i.c.k.s.\.S.o.l.i.d...w.a.v... 7 | 8 | Source Context File Ref : 9 | 10 | 44003A005C00730061006D0070006C00650073005C004D0044004B005C006400720075006D007300 11 | 5C004B00690063006B0073005C000000 12 | 13 | D.:.\.s.a.m.p.l.e.s.\.M.D.K.\.d.r.u.m.s.\.K.i.c.k.s.\... 14 | 15 | Original File Ref : 16 | 17 | 44003A005C00730061006D0070006C00650073005C004D0044004B005C006400720075006D007300 18 | 5C004B00690063006B0073005C0053006F006C00690064002E007700610076000000 19 | 20 | D.:.\.s.a.m.p.l.e.s.\.M.D.K.\.d.r.u.m.s.\.K.i.c.k.s.\.S.o.l.i.d...w.a.v... -------------------------------------------------------------------------------- /griffon-app/views/drumkitbuilder2/DrumKitBuilder2View.groovy: -------------------------------------------------------------------------------- 1 | package drumkitbuilder2 2 | 3 | build(DrumKitBuilderActions) 4 | 5 | application(title: 'Sample Map Builder', 6 | preferredSize: [1024, 768], 7 | pack: true, 8 | locationByPlatform: true, 9 | iconImage: imageIcon('/icon-48x48.png').image, 10 | iconImages: [imageIcon('/icon-48x48.png').image, 11 | imageIcon('/icon-32x32.png').image, 12 | imageIcon('/icon-16x16.png').image]) { 13 | 14 | widget(build(DrumKitBuilderMenuBar)) 15 | migLayout(layoutConstraints: 'fill') 16 | toolBar(build(DrumKitBuilderToolBar), constraints: 'north') 17 | widget(build(DrumKitBuilderContent), constraints: 'center, grow') 18 | widget(build(DrumKitBuilderStatusBar), constraints: 'south, grow') 19 | 20 | } 21 | -------------------------------------------------------------------------------- /griffon-app/conf/Config.groovy.orig: -------------------------------------------------------------------------------- 1 | import static griffon.util.GriffonApplicationUtils.isMacOSX 2 | 3 | log4j = { 4 | appenders { 5 | console name: 'stdout', layout: pattern(conversionPattern: '%d [%t] %-5p %c - %m%n'),threshold: org.apache.log4j.Level.DEBUG 6 | file name:'file', file:'smb_debug.log', threshold: org.apache.log4j.Level.DEBUG 7 | } 8 | 9 | error 'org.codehaus.griffon' 10 | 11 | info 'griffon.util', 12 | 'griffon.core', 13 | 'griffon.swing', 14 | 'griffon.app' 15 | 16 | debug 'griffon.app.controller', 17 | 'griffon.app.service', 18 | 'com.relivethefuture' 19 | } 20 | 21 | lookandfeel { 22 | if(!isMacOSX) { 23 | lookAndFeel = 'Pagosoft' 24 | theme = 'NativeColor' 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /resources/formats/SampleOne/SampleOne/metainfo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /griffon-app/resources/templates/studio_one/metainfo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /griffon-app/views/drumkitbuilder2/ExportProgressView.groovy: -------------------------------------------------------------------------------- 1 | package drumkitbuilder2 2 | 3 | actions { 4 | action(id: 'cancelAction', 5 | name: 'Cancel', 6 | closure: controller.cancel, 7 | mnemonic: 'C', 8 | shortDescription: 'Cancel' 9 | ) 10 | } 11 | 12 | panel(id: 'content') { 13 | borderLayout() 14 | panel(constraints: CENTER) { 15 | migLayout(layoutConstraints: '',columnConstraints:"",rowConstraints:"") 16 | label(id: 'currentFormat', text: bind { model.currentFormat },constraints: "pushx,wrap,align center") 17 | progressBar(id:'overallProgress',minimum:0,maximum:100,value:bind { model.overallProgress },constraints: "span,pushx,growx,wrap") 18 | button(action:cancelAction,constraints:"align center",text:bind {model.buttonLabel}) 19 | } 20 | } -------------------------------------------------------------------------------- /griffon-app/conf/Config.groovy: -------------------------------------------------------------------------------- 1 | import static griffon.util.GriffonApplicationUtils.isMacOSX 2 | 3 | log4j = { 4 | appenders { 5 | console name: 'stdout', layout: pattern(conversionPattern: '%d [%t] %-5p %c - %m%n'),threshold: org.apache.log4j.Level.DEBUG 6 | file name:'file', file:'smb_debug.log', threshold: org.apache.log4j.Level.DEBUG 7 | } 8 | 9 | error 'org.codehaus.griffon' 10 | 11 | info 'griffon.util', 12 | 'griffon.core', 13 | 'griffon.swing', 14 | 'griffon.app' 15 | 16 | debug 'griffon.app.controller', 17 | 'griffon.app.service', 18 | 'com.relivethefuture' 19 | } 20 | 21 | lookandfeel { 22 | if(!isMacOSX) { 23 | lookAndFeel = 'Pagosoft' 24 | theme = 'NativeColor' 25 | } else { 26 | lookAndFeel = 'system' 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Sample Map Builder 2 | ================== 3 | 4 | Sample Map Builder v2 5 | 6 | New version of Sample Map Builder which was Reaktor only. 7 | 8 | This version also includes Ableton Live, SFZ and Renoise output among others. 9 | 10 | Development Setup 11 | ================= 12 | 13 | The app is built around Griffon 1.5.0 available here [http://griffon.codehaus.org/](http://griffon.codehaus.org/) 14 | 15 | To run the app just use `griffon run-app` from the command line. 16 | 17 | To package the app you can choose one of the standard [griffon packaging](http://griffon.codehaus.org/guide/1.5.0/guide/packaging.html) options or use the [Installer plugin](http://griffon.codehaus.org/Installer+Plugin). 18 | 19 | All of the required jars are now available in lib because the griffon v1 artifact host is due to close down. 20 | 21 | To build on OSX run 22 | 23 | ``` 24 | ant bundleOSX 25 | ``` 26 | 27 | -------------------------------------------------------------------------------- /test/unit/com/relivethefuture/dkb/ResourceUtilsTest.groovy: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.dkb 2 | 3 | import com.relivethefuture.ResourceUtils 4 | import griffon.test.GriffonUnitTestCase 5 | 6 | /** 7 | * Created by martin on 06/06/13 at 09:40 8 | * 9 | */ 10 | class ResourceUtilsTest extends GriffonUnitTestCase { 11 | 12 | void testPathSections() { 13 | File f = new File("/a/b/c") 14 | List fp = ResourceUtils.getPathSections(f) 15 | 16 | assertEquals 3, fp.size() 17 | assertEquals "a", fp.get(0) 18 | assertEquals "b", fp.get(1) 19 | assertEquals "c", fp.get(2) 20 | 21 | File f2 = new File("D:\\a\\b\\c") 22 | List fp2 = ResourceUtils.getPathSections(f) 23 | 24 | assertEquals 3, fp2.size() 25 | assertEquals "a", fp2.get(0) 26 | assertEquals "b", fp2.get(1) 27 | assertEquals "c", fp2.get(2) 28 | 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /test/unit/com/relivethefuture/dkb/BasicSampleTest.groovy: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.dkb 2 | 3 | import com.relivethefuture.generic.BasicSample 4 | import com.relivethefuture.generic.LoopSettings 5 | import griffon.test.GriffonUnitTestCase 6 | 7 | class BasicSampleTest extends GriffonUnitTestCase { 8 | void testCopyConstructor() { 9 | BasicSample s1 = new BasicSample(new File("d:/tmp/Kitbuilder/in/Bassdrums/Bassdrum1.wav")) 10 | BasicSample s2 = new BasicSample(s1) 11 | assertEquals s1.name, s2.name 12 | assertEquals s1.exclude, s2.exclude 13 | assertEquals s1.root, s2.root 14 | assertEquals s1.file.absolutePath, s2.file.absolutePath 15 | assertEquals s1.looping, s2.looping 16 | assertEquals s1.pan, s2.pan 17 | assertEquals s1.volume, s2.volume 18 | assertEquals s1.tune, s2.tune 19 | if(s1.loopSettings) { 20 | assertNotNull s2.loopSettings 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /resources/jarlist.txt: -------------------------------------------------------------------------------- 1 | PgsLookAndFeel-1.1.1.jar 2 | PgsLookAndFeel-jide-1.1.1.jar 3 | SampleMapBuilder.jar 4 | glazedlists_java15-1.9.0.jar 5 | griffon-glazedlists-runtime-2.0.0.jar 6 | griffon-lookandfeel-pgslaf-runtime-1.0.0.jar 7 | griffon-lookandfeel-runtime-1.0.0.jar 8 | griffon-miglayout-runtime-1.0.0.jar 9 | griffon-rt-1.5.0.jar 10 | griffon-silkicons-runtime-1.0.0.jar 11 | griffon-swing-runtime-1.4.0.jar 12 | griffon-tasks-runtime-0.1.jar 13 | groovy-all-2.2.1.jar 14 | jcl-over-slf4j-1.7.5.jar 15 | jul-to-slf4j-1.7.5.jar 16 | log4j-1.2.17.jar 17 | miglayout-core-4.2.jar 18 | miglayout-swing-4.2.jar 19 | silk-1.3.jar 20 | slf4j-api-1.7.5.jar 21 | slf4j-log4j12-1.7.5.jar 22 | swing-worker-1.1.jar 23 | swingx-action-1.6.4.jar 24 | swingx-autocomplete-1.6.4.jar 25 | swingx-beaninfo-1.6.4.jar 26 | swingx-common-1.6.4.jar 27 | swingx-core-1.6.4.jar 28 | swingx-graphics-1.6.4.jar 29 | swingx-painters-1.6.4.jar 30 | swingx-plaf-1.6.4.jar 31 | swingxbuilder-0.3.jar 32 | timingframework-1.0.jar -------------------------------------------------------------------------------- /src/main/com/relivethefuture/dkb/DKBUtils.groovy: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.dkb 2 | 3 | import griffon.core.GriffonApplication 4 | import griffon.util.ApplicationHolder 5 | 6 | import javax.swing.JFileChooser 7 | 8 | import static griffon.util.GriffonNameUtils.isBlank 9 | 10 | final class DKBUtils { 11 | 12 | static File selectDirectory(File location, String name = null) { 13 | GriffonApplication app = ApplicationHolder.application 14 | if (isBlank(name)) name = app.getMessage('application.dialog.Open.title', 'Open') 15 | JFileChooser fc = new JFileChooser(location) 16 | fc.fileSelectionMode = JFileChooser.DIRECTORIES_ONLY 17 | fc.acceptAllFileFilterUsed = true 18 | fc.dialogTitle = name 19 | fc.setMultiSelectionEnabled(false); 20 | int returnVal = fc.showOpenDialog(null); 21 | 22 | if (returnVal == JFileChooser.APPROVE_OPTION) { 23 | return fc.getSelectedFile(); 24 | } 25 | 26 | return null 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/generic/MidiRange.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.generic; 2 | 3 | /** 4 | * Created by martin on 24/04/11 at 21:02 5 | */ 6 | public class MidiRange { 7 | private Integer low; 8 | private Integer high; 9 | 10 | public MidiRange() { 11 | low = 0; 12 | high = 127; 13 | } 14 | 15 | public MidiRange(Integer lowKey, Integer highKey) { 16 | low = lowKey; 17 | high = highKey; 18 | } 19 | 20 | public Integer getLow() { 21 | return low; 22 | } 23 | 24 | public void setLow(Integer low) { 25 | this.low = low; 26 | } 27 | 28 | public Integer getHigh() { 29 | return high; 30 | } 31 | 32 | public void setHigh(Integer high) { 33 | this.high = high; 34 | } 35 | 36 | public void setRange(Integer low,Integer high) { 37 | if(low <= high) { 38 | this.low = low; 39 | this.high = high; 40 | } else { 41 | this.low = high; 42 | this.high = low; 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /griffon-app/models/drumkitbuilder2/PreferencesModel.groovy: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2007-2012 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | */ 15 | 16 | package drumkitbuilder2 17 | 18 | /** 19 | * @author Andres Almiray 20 | */ 21 | class PreferencesModel extends AbstractDialogModel { 22 | protected String getDialogKey() { 'Preferences' } 23 | 24 | protected String getDialogTitle() { 'Preferences' } 25 | 26 | void mvcGroupInit(Map args) { 27 | super.mvcGroupInit(args) 28 | resizable = false 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/generic/Sample.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.generic; 2 | 3 | import javax.sound.sampled.UnsupportedAudioFileException; 4 | import java.io.File; 5 | import java.io.IOException; 6 | 7 | /** 8 | * Created by martin on 25/04/11 at 10:57 9 | */ 10 | public interface Sample { 11 | 12 | String getName(); 13 | long getSize(); 14 | 15 | File getFile(); 16 | void setFile(File file); 17 | 18 | void setLoopSettings(LoopSettings loopSettings); 19 | LoopSettings getLoopSettings(); 20 | 21 | Integer getRoot(); 22 | void setRoot(Integer root); 23 | 24 | Boolean getLooping(); 25 | void setLooping(Boolean b); 26 | 27 | void setTune(Float t); 28 | void setPan(Float p); 29 | void setVolume(Float v); 30 | 31 | Float getTune(); 32 | Float getPan(); 33 | Float getVolume(); 34 | 35 | Integer getDuration() throws UnsupportedAudioFileException, IOException, Exception; 36 | void setDuration(Integer duration); 37 | 38 | Long getCrc() throws IOException; 39 | 40 | boolean getExclude(); 41 | void setExclude(boolean e); 42 | } 43 | -------------------------------------------------------------------------------- /griffon-app/models/drumkitbuilder2/FormatOptionsModel.groovy: -------------------------------------------------------------------------------- 1 | package drumkitbuilder2 2 | 3 | import ca.odell.glazedlists.BasicEventList 4 | import ca.odell.glazedlists.EventList 5 | import com.relivethefuture.dkb.ConfigModel 6 | import com.relivethefuture.dkb.ExportConfigs 7 | import com.relivethefuture.dkb.LayoutStyle 8 | import com.relivethefuture.dkb.OutputLayout 9 | 10 | import javax.swing.SpinnerNumberModel 11 | 12 | class FormatOptionsModel { 13 | @Bindable String title = "Format Options" 14 | @Bindable int width = 800 15 | @Bindable int height = 600 16 | @Bindable boolean resizable = true 17 | @Bindable boolean modal = true 18 | 19 | def configModelMap 20 | 21 | @Bindable boolean reaktorFixedRoot = false 22 | @Bindable String reaktorRootNote = "64" 23 | 24 | final EventList filenameDepthOptions = new BasicEventList() 25 | final EventList outputDepthOptions = new BasicEventList() 26 | final EventList layoutSelectOptions = new BasicEventList() 27 | @Bindable String selectedLayout 28 | @Bindable String selectedFilenameDepth 29 | @Bindable String selectedOutputDepth 30 | } 31 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/SamplerFormat.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats; 2 | 3 | public enum SamplerFormat { 4 | REAKTOR("Reaktor","map","reaktor"), 5 | ABLETON_DRUM_RACK_SAMPLERS("Ableton Drum Rack with Samplers","adg","rackSamplers"), 6 | ABLETON_DRUM_RACK_SIMPLERS("Ableton Drum Rack with Simplers","adg","rackSimplers"), 7 | ABLETON_SAMPLER("Ableton Sampler","adv","samplerZones"), 8 | RENOISE_INSTRUMENT("Renoise Instrument","xrni","renoise"), 9 | SHORTCIRCUIT("Shortcircuit","scm","shortcircuit"), 10 | EXS24("EXS24","","exs"), 11 | FILES("FILES","",""), 12 | SFZ("SFZ","sfz","sfz"); 13 | 14 | private String title; 15 | private String type; 16 | private String extension; 17 | 18 | SamplerFormat(String title, String extension, String type) { 19 | this.type = type; 20 | this.extension = extension; 21 | this.title = title; 22 | } 23 | 24 | public String type() { 25 | return type; 26 | } 27 | public String extension() { 28 | return extension; 29 | } 30 | 31 | public String title() { 32 | return title; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /griffon-app/models/drumkitbuilder2/DrumKitBuilder2Model.groovy: -------------------------------------------------------------------------------- 1 | package drumkitbuilder2 2 | 3 | import ca.odell.glazedlists.BasicEventList 4 | import ca.odell.glazedlists.EventList 5 | import ca.odell.glazedlists.SortedList 6 | import ca.odell.glazedlists.swing.DefaultEventSelectionModel 7 | import ca.odell.glazedlists.swing.EventTableModel 8 | import com.relivethefuture.dkb.SampleTableFormat 9 | import com.relivethefuture.generic.Sample 10 | import com.relivethefuture.kitbuilder.model.FolderOfSamples 11 | 12 | class DrumKitBuilder2Model { 13 | @Bindable String status = '' 14 | 15 | EventList folders = new SortedList(new BasicEventList(), {a, b -> a.name <=> b.name} as Comparator) 16 | DefaultEventSelectionModel selectedFolders = new DefaultEventSelectionModel(folders) 17 | 18 | EventList samples = new SortedList(new BasicEventList(), {a, b -> a.name <=> b.name} as Comparator) 19 | DefaultEventSelectionModel selectedSamples = new DefaultEventSelectionModel(samples) 20 | 21 | SampleTableFormat sampleTableFormat = new SampleTableFormat() 22 | EventTableModel samplesTableModel = new EventTableModel(samples, sampleTableFormat) 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/kitbuilder/output/GenericOutput.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.kitbuilder.output; 2 | 3 | import java.io.File; 4 | 5 | /** 6 | * Created by martin on 15/04/13 at 18:03 7 | */ 8 | public class GenericOutput { 9 | private File outputDir; 10 | private Boolean active = true; 11 | private Integer rootNote; 12 | 13 | private String relativePath; 14 | 15 | public File getOutputDirectory() { 16 | return outputDir; 17 | } 18 | 19 | public void setOutputDirectory(File outputDir) { 20 | this.outputDir = outputDir; 21 | } 22 | 23 | public Boolean getActive() { 24 | return active; 25 | } 26 | 27 | public void setActive(Boolean active) { 28 | this.active = active; 29 | } 30 | 31 | public boolean useFixedRoot() { 32 | return rootNote != null; 33 | } 34 | 35 | public Integer getRoot() { 36 | return rootNote; 37 | } 38 | 39 | public void setRoot(Integer root) { 40 | rootNote = root; 41 | } 42 | 43 | public String getRelativePath() { 44 | return relativePath; 45 | } 46 | 47 | public void setRelativePath(String relativePath) { 48 | this.relativePath = relativePath; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /griffon-app/resources/templates/renoise/sections/SampleTemplate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {name} 4 | {filename} 5 | 2011-04-29 6 | 19:38:38 7 | 1.0 8 | 0.5 9 | {rootkey} 10 | 0 11 | 0 12 | false 13 | false 14 | false 15 | 16 16 | Cut 17 | Cubic 18 | Off 19 | false 20 | 0 21 | {duration} 22 | true 23 | false 24 | 0 25 | {duration} 26 | -1 27 | -1 28 | L+R 29 | 1.0 30 | 31 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/generic/BasicZone.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.generic; 2 | 3 | /** 4 | * Created by martin on 25/04/11 at 10:53 5 | */ 6 | public class BasicZone implements Zone { 7 | 8 | private MidiRange velocityRange; 9 | private MidiRange noteRange; 10 | private Integer baseNote = 60; 11 | protected Sample sample; 12 | 13 | public BasicZone() { 14 | defaults(); 15 | } 16 | 17 | public MidiRange getNoteRange() { 18 | return noteRange; 19 | } 20 | 21 | public MidiRange getVelocityRange() { 22 | return velocityRange; 23 | } 24 | 25 | public void setKeyRange(Integer lowKey, Integer highKey) { 26 | noteRange.setRange(lowKey,highKey); 27 | } 28 | 29 | public void setSample(Sample s) { 30 | sample = s; 31 | } 32 | 33 | public Sample getSample() { 34 | return sample; 35 | } 36 | 37 | void defaults() { 38 | noteRange = new MidiRange(); 39 | velocityRange = new MidiRange(); 40 | velocityRange.setLow(1); 41 | baseNote = 60; 42 | } 43 | 44 | public Integer getBaseNote() { 45 | return baseNote; 46 | } 47 | 48 | public void setBaseNote(Integer baseNote) { 49 | this.baseNote = baseNote; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /griffon-app/models/drumkitbuilder2/AbstractDialogModel.groovy: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2007-2012 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | */ 15 | 16 | package drumkitbuilder2 17 | 18 | /** 19 | * @author Andres Almiray 20 | */ 21 | abstract class AbstractDialogModel { 22 | @Bindable String title 23 | @Bindable int width = 0 24 | @Bindable int height = 0 25 | @Bindable boolean resizable = true 26 | @Bindable boolean modal = true 27 | 28 | protected abstract String getDialogKey() 29 | 30 | protected abstract String getDialogTitle() 31 | 32 | void mvcGroupInit(Map args) { 33 | title = GriffonNameUtils.capitalize(app.getMessage('application.dialog.' + dialogKey + '.title', dialogTitle)) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /griffon-app/services/drumkitbuilder2/ExportService.groovy: -------------------------------------------------------------------------------- 1 | package drumkitbuilder2 2 | 3 | import com.relivethefuture.FileSystemScanner 4 | import com.relivethefuture.ResourceUtils 5 | import com.relivethefuture.dkb.ExportConfigs 6 | import com.relivethefuture.dkb.Exporter 7 | import com.relivethefuture.dkb.LayoutStyle 8 | import com.relivethefuture.dkb.PathUtils 9 | import com.relivethefuture.generic.Instrument 10 | import com.relivethefuture.generic.Sample 11 | import com.relivethefuture.kitbuilder.KitFileNameGenerator 12 | import com.relivethefuture.kitbuilder.builder.MapBuilder 13 | import com.relivethefuture.kitbuilder.model.FolderOfSamples 14 | import com.relivethefuture.kitbuilder.output.OutputConfig 15 | import com.relivethefuture.kitbuilder.writers.InstrumentWriter 16 | import org.apache.commons.io.FileUtils 17 | 18 | import java.nio.channels.FileChannel 19 | 20 | class ExportService { 21 | 22 | ExportConfigs exportConfigs 23 | 24 | Exporter exporter 25 | 26 | void serviceInit() { 27 | exporter = new Exporter() 28 | exportConfigs = new ExportConfigs() 29 | } 30 | 31 | void serviceDestroy() { 32 | } 33 | 34 | def start(FileSystemScanner scanner) { 35 | exporter.start(scanner, exportConfigs) 36 | } 37 | 38 | def work() { 39 | return exporter.doNext() 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /griffon-app/controllers/drumkitbuilder2/AboutController.groovy: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2007-2012 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | */ 15 | 16 | package drumkitbuilder2 17 | 18 | import griffon.transform.Threading 19 | 20 | import javax.swing.* 21 | 22 | class AboutController extends DialogController { 23 | def view 24 | 25 | @Threading(Threading.Policy.INSIDE_UITHREAD_SYNC) 26 | def credits = { 27 | def window = SwingUtilities.windowForComponent(view.content) 28 | withMVCGroup('credits') { m, v, c -> c.show(window) } 29 | } 30 | 31 | @Threading(Threading.Policy.INSIDE_UITHREAD_SYNC) 32 | def license = { 33 | def window = SwingUtilities.windowForComponent(view.content) 34 | withMVCGroup('license') { m, v, c -> c.show(window) } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /griffon-app/models/drumkitbuilder2/AboutModel.groovy: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2007-2012 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | */ 15 | 16 | package drumkitbuilder2 17 | 18 | import ca.odell.glazedlists.BasicEventList 19 | import ca.odell.glazedlists.EventList 20 | import ca.odell.glazedlists.SortedList 21 | 22 | /** 23 | */ 24 | class AboutModel extends AbstractDialogModel { 25 | @Bindable String description 26 | boolean includeCredits = true 27 | boolean includeLicense = true 28 | 29 | 30 | 31 | protected String getDialogKey() { 'About' } 32 | protected String getDialogTitle() { 'About' } 33 | 34 | void mvcGroupInit(Map args) { 35 | super.mvcGroupInit(args) 36 | resizable = false 37 | width = 300 38 | height = 250 39 | description = "SMB Beta" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/javaFlacEncoder/ChannelData.java: -------------------------------------------------------------------------------- 1 | /* 2 | * To change this template, choose Tools | Templates 3 | * and open the template in the editor. 4 | */ 5 | 6 | package javaFlacEncoder; 7 | 8 | /** 9 | * 10 | * @author preston 11 | */ 12 | public class ChannelData { 13 | public enum ChannelName { 14 | LEFT, 15 | RIGHT, 16 | MID, 17 | SIDE, 18 | INDEPENDENT 19 | } 20 | private int[] samples = null; 21 | private int count; 22 | private int sampleSize; 23 | private ChannelName name; 24 | public ChannelData(int[] samples, int count, int sampleSize, ChannelName n) { 25 | this.count = count; 26 | this.samples = samples; 27 | this.sampleSize = sampleSize; 28 | this.name = n; 29 | } 30 | public int[] getSamples() { return samples; } 31 | public int getCount() { return count; } 32 | public int getSampleSize() { return sampleSize; } 33 | public ChannelName getChannelName() { return name; } 34 | public int setData(int[] newSamples, int count, int sampleSize, ChannelName n) { 35 | samples = newSamples; 36 | this.sampleSize = sampleSize; 37 | this.name = n; 38 | return setCount(count); 39 | } 40 | public int setCount(int count) { 41 | this.count = (count <= samples.length) ? count:samples.length; 42 | return this.count; 43 | } 44 | public void setChannelName(ChannelName cn) { 45 | this.name = cn; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /griffon-app/conf/Application.groovy: -------------------------------------------------------------------------------- 1 | application { 2 | title = 'Sample Map Builder' 3 | startupGroups = ['drumKitBuilder2'] 4 | 5 | // Should Griffon exit when no Griffon created frames are showing? 6 | autoShutdown = true 7 | 8 | // If you want some non-standard application class, apply it here 9 | //frameClass = 'javax.swing.JFrame' 10 | } 11 | mvcGroups { 12 | // MVC Group for "exportProgress" 13 | 'exportProgress' { 14 | model = 'drumkitbuilder2.ExportProgressModel' 15 | view = 'drumkitbuilder2.ExportProgressView' 16 | controller = 'drumkitbuilder2.ExportProgressController' 17 | } 18 | 19 | // MVC Group for "formatOptions" 20 | 'formatOptions' { 21 | model = 'drumkitbuilder2.FormatOptionsModel' 22 | view = 'drumkitbuilder2.FormatOptionsView' 23 | controller = 'drumkitbuilder2.FormatOptionsController' 24 | } 25 | 26 | // MVC Group for "drumKitBuilder2" 27 | 'drumKitBuilder2' { 28 | model = 'drumkitbuilder2.DrumKitBuilder2Model' 29 | view = 'drumkitbuilder2.DrumKitBuilder2View' 30 | controller = 'drumkitbuilder2.DrumKitBuilder2Controller' 31 | } 32 | 33 | // MVC Group for "about" 34 | 'about' { 35 | model = 'drumkitbuilder2.AboutModel' 36 | view = 'drumkitbuilder2.AboutView' 37 | controller = 'drumkitbuilder2.AboutController' 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/kitbuilder/writers/BasicInstrumentWriter.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.kitbuilder.writers; 2 | 3 | import net.sf.jtpl.Template; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | 7 | import java.io.File; 8 | import java.io.IOException; 9 | import java.io.InputStream; 10 | import java.io.InputStreamReader; 11 | import java.util.ArrayList; 12 | 13 | /** 14 | * Created by martin on 20/01/12 at 17:01 15 | */ 16 | public abstract class BasicInstrumentWriter implements InstrumentWriter { 17 | 18 | private final Logger logger = LoggerFactory.getLogger(BasicInstrumentWriter.class); 19 | 20 | protected ClassLoader classLoader; 21 | 22 | public BasicInstrumentWriter() { 23 | classLoader = Thread.currentThread().getContextClassLoader(); 24 | } 25 | 26 | protected String[] getFilenameAndExtension(File f) { 27 | String[] parts = new String[2]; 28 | 29 | int dotPos = f.getName().lastIndexOf("."); 30 | parts[0] = f.getName().substring(0, dotPos); 31 | parts[1] = f.getName().substring(dotPos + 1); 32 | return parts; 33 | } 34 | 35 | protected Template getTemplate(String name) throws IOException { 36 | logger.debug("Get Template " + name); 37 | InputStream inputStream = classLoader.getResourceAsStream("templates/" + name); 38 | InputStreamReader reader = new InputStreamReader(inputStream); 39 | return new Template(reader); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /griffon-app/views/drumkitbuilder2/AboutView.groovy: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2007-2012 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | */ 15 | 16 | /** 17 | * @author Andres Almiray 18 | */ 19 | 20 | package drumkitbuilder2 21 | 22 | import java.awt.Font 23 | 24 | rowConstraints = "center, wrap".toString() 25 | 26 | panel(id: 'content') { 27 | migLayout layoutConstraints: 'fill' 28 | label(icon: imageIcon('/icon-128x128.png'), constraints: "center, wrap".toString()) 29 | label(GriffonNameUtils.capitalize(app.getMessage('application.title', app.config.application.title)) + 30 | ' ' + Metadata.current.getApplicationVersion(), 31 | font: current.font.deriveFont(Font.BOLD), 32 | constraints: rowConstraints) 33 | label(text: bind { model.description }, constraints: rowConstraints) 34 | 35 | keyStrokeAction(component: current, 36 | keyStroke: 'ESCAPE', 37 | condition: 'in focused window', 38 | action: hideAction) 39 | } 40 | -------------------------------------------------------------------------------- /resources/formats/Reaktor/ReaktorMap.bt: -------------------------------------------------------------------------------- 1 | //-------------------------------------- 2 | //--- 010 Editor v3.1 Binary Template 3 | // 4 | // File: ReaktorMap.bt 5 | //-------------------------------------- 6 | 7 | typedef struct { 8 | byte header[11]; 9 | string url; 10 | 11 | } URL_STYLE_FILENAME; 12 | 13 | typedef struct { 14 | uint length; 15 | wchar_t name[length]; 16 | } UTF_8_FILENAME; 17 | 18 | typedef struct { 19 | URL_STYLE_FILENAME url; 20 | UTF_8_FILENAME utfName; 21 | } PATH; 22 | 23 | typedef struct { 24 | uint zeros; 25 | uint h7702; //77 02 00 00 26 | char NIMapFile[9]; 27 | PATH mapFilePath; 28 | char mapp[4]; 29 | uint h0c; // 0c 00 00 00 30 | uint one; // 01 00 00 00 31 | uint one; // 01 00 00 00 32 | uint zeros; 33 | uint zeros; 34 | uint numSamples; // 03 00 00 00 35 | 36 | } SAMPLEMAPHEADER; 37 | 38 | typedef struct { 39 | PATH samplePath; 40 | uint zeros; 41 | char entr[4]; 42 | uint h54; 43 | uint h2; 44 | uint lowNote; 45 | uint highNote; 46 | uint lowVel; 47 | uint highVel; 48 | uint rootNote; 49 | uint zeros; 50 | float tune; 51 | float volume; 52 | float pan; 53 | uint FFzero[3]; 54 | uint isLooped; 55 | uint zeros; 56 | uint one; 57 | uint loopStart; 58 | uint loopEnd; 59 | uint zeros; 60 | uint fiftyfive; 61 | uint stuff; 62 | } SAMPLE; 63 | 64 | SAMPLEMAPHEADER smh; 65 | SAMPLE samples[smh.numSamples]; 66 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/dkb/SampleComparator.groovy: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.dkb 2 | 3 | import ca.odell.glazedlists.impl.sort.BooleanComparator 4 | import ca.odell.glazedlists.impl.sort.ComparableComparator 5 | import ca.odell.glazedlists.impl.sort.ReverseComparator 6 | 7 | public enum SampleComparator { 8 | 9 | SIZE("size",new ComparableComparator(), { a,b -> a.size <=> b.size } as Comparator), 10 | NAME("name",new ComparableComparator(), { a,b -> a.name <=> b.name} as Comparator), 11 | EXCLUDED("excluded",new BooleanComparator(), { a,b -> a.excluded <=> b.excluded} as Comparator), 12 | NOTE("note",new RootNoteComparator(), new RootNoteComparator()) 13 | 14 | private String id 15 | def Comparator tableComparator 16 | def Comparator sampleComparator 17 | 18 | SampleComparator(String id, Comparator tableComp, Comparator sampleComp) { 19 | this.id = id 20 | this.tableComparator = tableComp 21 | this.sampleComparator = sampleComp 22 | } 23 | 24 | static list() { 25 | return [SIZE,NAME,EXCLUDED,NOTE] 26 | } 27 | 28 | static byTableColumn(Integer column, Boolean reverse) { 29 | Comparator c = NAME.sampleComparator 30 | switch (column) { 31 | case 0: c = NOTE.sampleComparator; break; 32 | case 1: c = NAME.sampleComparator; break; 33 | case 2: c = SIZE.sampleComparator; break; 34 | case 3: c = EXCLUDED.sampleComparator; break; 35 | } 36 | 37 | if(reverse) { 38 | return new ReverseComparator(c) 39 | } else { 40 | return c 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /src/main/com/relivethefuture/generic/LoopSettings.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.generic; 2 | 3 | /** 4 | * Created by martin on 24/04/11 at 21:06 5 | */ 6 | public class LoopSettings implements Cloneable { 7 | private Boolean looped = false; 8 | private Integer loopStart; 9 | private Integer loopEnd; 10 | 11 | public LoopSettings() { 12 | loopStart = 0; 13 | loopEnd = 0; 14 | } 15 | 16 | public LoopSettings(LoopSettings source) { 17 | looped = source.looped; 18 | loopStart = source.loopStart; 19 | loopEnd = source.loopEnd; 20 | } 21 | 22 | public void setLoopPoints(Integer start,Integer end) { 23 | if(start <= end) { 24 | loopStart = start; 25 | loopEnd = end; 26 | } else { 27 | loopStart = end; 28 | loopEnd = start; 29 | } 30 | } 31 | 32 | public Integer getLoopStart() { 33 | return loopStart; 34 | } 35 | 36 | public Integer getLoopEnd() { 37 | return loopEnd; 38 | } 39 | 40 | public void setLooped(Boolean l){ 41 | looped = l; 42 | } 43 | 44 | public Boolean isLooped() { 45 | return looped; 46 | } 47 | 48 | public void setLoopStart(Integer loopStart) { 49 | this.loopStart = loopStart; 50 | } 51 | 52 | public void setLoopEnd(int loopEnd) { 53 | this.loopEnd = loopEnd; 54 | } 55 | 56 | public LoopSettings clone() { 57 | LoopSettings l = new LoopSettings(); 58 | l.setLooped(looped); 59 | l.setLoopPoints(loopStart,loopEnd); 60 | return l; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/dkb/OutputLayout.groovy: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.dkb 2 | 3 | class OutputLayout { 4 | 5 | private LayoutStyle layoutStyle 6 | 7 | public static Integer ALL_DIRS = 10 8 | 9 | // How many levels of directory structure to replicate in the output 10 | // Minimum 0 11 | // Maximum ALL 12 | Integer outputStructureDepth = 0 13 | // How many levels of directory structure to use in the name of each map file 14 | // Minimum 1 15 | // Maximum ALL 16 | Integer filenameDepth = 1 17 | 18 | public OutputLayout() { 19 | layoutStyle = LayoutStyle.ABSOLUTE; 20 | } 21 | 22 | Integer getOutputStructureDepth() { 23 | return outputStructureDepth 24 | } 25 | 26 | void setOutputStructureDepth(Integer outputStructureDepth) { 27 | 28 | if(outputStructureDepth < 0) { 29 | outputStructureDepth = 0 30 | } 31 | if(outputStructureDepth > ALL_DIRS) { 32 | outputStructureDepth = ALL_DIRS 33 | } 34 | 35 | this.outputStructureDepth = outputStructureDepth 36 | } 37 | 38 | Integer getFilenameDepth() { 39 | return filenameDepth 40 | } 41 | 42 | void setFilenameDepth(Integer filenameDepth) { 43 | if(filenameDepth < 1) { 44 | filenameDepth = 1 45 | } else if(filenameDepth > ALL_DIRS) { 46 | filenameDepth = ALL_DIRS 47 | } 48 | 49 | this.filenameDepth = filenameDepth 50 | } 51 | 52 | public void setLayoutStyle(LayoutStyle style) { 53 | layoutStyle = style; 54 | } 55 | 56 | public LayoutStyle getLayoutStyle() { 57 | return layoutStyle; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /test/unit/com/relivethefuture/dkb/FilenameGeneratorTest.groovy: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.dkb 2 | 3 | import com.relivethefuture.formats.SamplerFormat 4 | import com.relivethefuture.kitbuilder.KitFileNameGenerator 5 | import com.relivethefuture.kitbuilder.model.FolderOfSamples 6 | import com.relivethefuture.kitbuilder.output.OutputConfig 7 | import griffon.test.GriffonUnitTestCase 8 | 9 | /** 10 | * Created by martin on 06/06/13 at 09:25 11 | * 12 | */ 13 | class FilenameGeneratorTest extends GriffonUnitTestCase { 14 | 15 | void testFilenameGenerator() { 16 | KitFileNameGenerator kitFileNameGenerator = new KitFileNameGenerator() 17 | OutputConfig testConfig = new OutputConfig() 18 | testConfig.format = SamplerFormat.SFZ 19 | OutputLayout outputLayout = new OutputLayout() 20 | 21 | kitFileNameGenerator.config = testConfig 22 | kitFileNameGenerator.layout = outputLayout 23 | 24 | FolderOfSamples fos = new FolderOfSamples(new File("/a/b/c"),null) 25 | String filename 26 | 27 | outputLayout.filenameDepth = 1 28 | filename = kitFileNameGenerator.generateFileName(fos,"") 29 | assertEquals("c.sfz",filename) 30 | 31 | outputLayout.filenameDepth = 2 32 | filename = kitFileNameGenerator.generateFileName(fos,"") 33 | assertEquals("b_c.sfz",filename) 34 | 35 | outputLayout.filenameDepth = 3 36 | filename = kitFileNameGenerator.generateFileName(fos,"") 37 | assertEquals("a_b_c.sfz",filename) 38 | 39 | outputLayout.filenameDepth = 10 40 | filename = kitFileNameGenerator.generateFileName(fos,"") 41 | assertEquals("a_b_c.sfz",filename) 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /resources/formats/Live/OSX Examples/FileRefData_Investigation.txt: -------------------------------------------------------------------------------- 1 | File Ref Stuff 2 2 | 3 | a.wav 6760 bytes 4 | 5 | 07/06/2006 08:32 6 | 7 | 00 00 00 00 01 4E 00 02 00 00 8 | 9 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 | 00 00 00 00 00 00 00 00 00 00 00 05 C9 8C C0 AC 13 | 3F AB 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 14 | 09 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 15 | 00 16 | 17 | b.wav 208 bytes 18 | 19 | 11/12/2005 01:09 20 | 21 | 00 00 00 00 01 4E 00 02 00 00 22 | 23 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 25 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 26 | 00 00 00 00 00 00 00 00 05 BB 93 C0 AC 3F AB 00 27 | 00 00 00 00 00 00 00 FF FF FF FF 00 00 09 20 00 28 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 29 | 30 | 31 | test.wav 6760 32 | 33 | 07/06/2006 08:32 34 | 35 | 00 00 00 00 01 5A 00 02 00 00 36 | 37 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 38 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 39 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 | 00 00 00 00 00 00 00 00 00 00 00 05 C9 8C C0 AC 41 | 3F AB 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 42 | 09 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 43 | 00 44 | 45 | S14.aif 2453 46 | 47 | 26/01/2012 17:43 48 | 49 | 00 00 00 00 01 56 00 02 00 00 50 | 51 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 52 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 53 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 | 00 00 00 00 00 00 00 00 00 06 4B DD CB 47 41 26 55 | 41 49 46 46 00 00 00 00 FF FF FF FF 00 00 09 20 56 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 57 | -------------------------------------------------------------------------------- /resources/keys/privkey.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEowIBAAKCAQEAxoI3Xegoa3EBHheeauHHpoQ2d2zIo9EgLqVzkBFJma3t+zmT 3 | i/RHPgCYBAp6IYl+/iGd12m1GF1EqL3DiaG7b8QEQT3sm8eCerlpKuMROpS9UJIw 4 | UAD6MUsEgcCnZJ/EnVMKWkIxD2nBPnlhgYs4DnvZlnZ0aO1TzyW6XmnWCCqYdu/0 5 | 8PhVsBdt/rI3PzR5dEh9ev/3UGnjmsawUf882hQ8OeQqKTLqRGtOzat0YuN08Hsv 6 | Ia1SpF5Dysb+BhS2id0H4gxxdFI6Y4VwCecKb4INB3rjfq4SgDL2nYF0K0jq+GgS 7 | xnFtcPIBvvgh2TlVuDiUwh2f+1/xSLMPG/CsjQIDAQABAoIBAQC3WUayYeATfMi/ 8 | dqlHp0q0rqFwJPYc+Od0rjTS+GS2oUOSK1fwiKvUxM+jy9mKaGj3aS1U7bnqyxrD 9 | kKKu2Mc7MB2N9Rg5ukj1+ZL9ncUoCoHhjWU6P+zW4qdDASKbekYr2atSOpj913w5 10 | q/s3n9Mi7ZnHs5lJ4Qrr5bkBw1eBKdVm2gXVtrj8ob9ww1PAVe7PhI21M+/5V8hj 11 | fvBpZAPNH1Xp0aECRnhfdqXYQjw63/RkjmG+ypyLr65vRClosDtapmcx6oIBXHhp 12 | wmPbmunZKzdXuOwWJrknJYT9CRDYXfTHq5DXcFSzQ2oX8PKL9n2JLauFNfSXmnps 13 | 4Pso3gCBAoGBAPBb4XUljGyPkF1oWnUScHA/UgoCQuSFBOFMISpqVNdtJwBNNcOh 14 | nnM8ynBRyNcFduY0Yy05lhoWAk3xu00/6/Uu2bv5sCtpZBwhA733mVwbCl65ebhs 15 | sa+HD4XYnrLzHijbg7yTkvsDlx/XmPFRoyAF3yxrDmuBQvdV3lzn5RApAoGBANNt 16 | J9q5DDOdKHdpwXOh1sQuRDHlKt/jBzc1bTmKrECCLXzYiRIDqnqxSjMOFClc1MjG 17 | EBj+Lq/pEMG7ZYyNR0XVr2YgjOjMbfMyitc2SledX7UxvFXJ7Qd63HDPHJW8zH5j 18 | d4J0+W2xNRFkQTg5DiAuGRq21dmPaks8YxVlFPXFAoGACQD4HiJM81ghaU5abR5G 19 | tf25PgS9qr/M4f+vEl6vVO6S0nER/YUVYW26i6CUrHFY9eCqgmww0kNWzMKsaIVn 20 | emTJ5T/COK4XAPK/qCMZTJj6t3etNppjwZaGn1XxA/UVgSRP+AVzMRH+XEQAR7Hu 21 | MWnm5UwRWzeZYZiG3uYU75kCgYAJ6RP1LLdls/gxoMNwqCVpDMIllJht5jZwYBC+ 22 | ocFxRKjdMUk7jvBuz+Cqg/5t8ewHfUFD6qZFmKcwbZhU/kpY+6s9Hkl8oBiHTdc0 23 | P1c8xCO4Wpx5aP2zXA75OrwcSL1NL1xqwRDwE15pckmcWRBQcdi7Z9aeXBqfbDU4 24 | y4QwAQKBgESuIwl9G967wiugRZvQYc47Xu0oDeAEbYwS9btqVmmVRkuN04LyIVet 25 | 7PBMal2uL56nmQrf/n3OuuIf1khh4Cyj5lbDyfccj0KsW+tHL99H6FFpjQ6Xkhzq 26 | XaF3/kHq/eRFwSIL7nagrqK8+ShSCvtlzNxW9b0NuMiJINKvcGB2 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /griffon-app/resources/templates/shortcircuit/ZoneTemplate.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /griffon-app/conf/webstart/applet.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 27 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /test/unit/com/relivethefuture/dkb/RelativePathTests.groovy: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.dkb 2 | 3 | import com.relivethefuture.ResourceUtils 4 | import griffon.test.GriffonUnitTestCase 5 | 6 | /** 7 | * Created by martin on 05/06/13 at 11:49 8 | * 9 | */ 10 | class RelativePathTests extends GriffonUnitTestCase { 11 | 12 | void testSFZ() { 13 | File src = new File("D:\\tmp\\KitBuilder\\out\\absolute\\sfz\\in_Bassdrums.sfz"); 14 | File dest = new File("D:\\tmp\\KitBuilder\\out\\absolute\\samples\\Bassdrums\\Bassdrum1.wav") 15 | String relative = ResourceUtils.getRelativePath(src, dest) 16 | assertEquals("..\\samples\\Bassdrums\\Bassdrum1.wav",relative) 17 | } 18 | 19 | void testRelativePaths() { 20 | File sampleFile = new File("D:\\tmp\\kitbuilder\\in\\samples\\sample.wav"); 21 | File outputDir = new File("D:\\tmp\\kitbuilder\\out"); 22 | 23 | String relative = ResourceUtils.getRelativePath(outputDir,sampleFile) 24 | assertEquals("..\\in\\samples\\sample.wav",relative) 25 | 26 | ArrayList r1 = ResourceUtils.getRelativePathSections(outputDir,sampleFile); 27 | 28 | assertEquals(4, r1.size()) 29 | assertEquals("..",r1.get(0)) 30 | assertEquals("in",r1.get(1)) 31 | assertEquals("samples",r1.get(2)) 32 | assertEquals("sample.wav",r1.get(3)) 33 | 34 | File a = new File("/a.wav"); 35 | File b = new File("/b"); 36 | ArrayList a2b = ResourceUtils.getRelativePathSections(a,b); 37 | assertEquals(1,a2b.size()); 38 | assertEquals("b",a2b.get(0)) 39 | 40 | a = new File("/a/a.wav"); 41 | b = new File("/b"); 42 | ArrayList aa2b = ResourceUtils.getRelativePathSections(a,b); 43 | assertEquals(2,aa2b.size()); 44 | assertEquals("..",aa2b.get(0)) 45 | assertEquals("b",aa2b.get(1)) 46 | 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/net/sf/jtpl/TemplateFactory.java: -------------------------------------------------------------------------------- 1 | package net.sf.jtpl; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | import java.io.InputStreamReader; 6 | import java.io.Reader; 7 | 8 | /** 9 | * Templates may be loaded any way you want using the different constructor, 10 | * but this helper supports the practice of keeping them in the same package 11 | * as the class that loads them. 12 | *

13 | * When bundling templates inside jars the files should really be in a folder 14 | * matching the namespace of the component, so they don't collide with files 15 | * of the same name from other jars. 16 | */ 17 | public abstract class TemplateFactory { 18 | 19 | /** 20 | * Loads template for a class assuming that it is placed in the corresponding folder 21 | * in src/main/resources/ (maven project) or in the same package in a jar. 22 | * @param filename The filename of the template 23 | * @param samePackage The class that loads the template, providing namespace and class loader 24 | * @return The template 25 | * @throws RuntimeException if loading fails, considered unrecoverable, wrapping IOException 26 | */ 27 | public static Template getTemplate(String filename, Class samePackage) { 28 | String parent = samePackage.getPackage().getName().replace('.', '/'); 29 | String path = parent + '/' + filename; 30 | InputStream htmlin = samePackage.getClassLoader().getResourceAsStream(path); 31 | if (htmlin == null) { 32 | throw new RuntimeException("Failed to load template " + path); 33 | } 34 | Reader htmlr = new InputStreamReader(htmlin); 35 | // TODO should we buffer content here or leave it to Template to take adequate care of the reader? 36 | try { 37 | return new Template(htmlr); 38 | } catch (IOException e) { 39 | // Really not recoverable 40 | throw new RuntimeException("Unable to read classpath template " + path, e); 41 | } 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /resources/formats/Live/DataBlockUnknowns.txt: -------------------------------------------------------------------------------- 1 | Live Data Blocks 2 | 3 | FileRef : 00 00 00 00 01 4E 00 02 00 00 4 | Source Context : 00 00 00 00 01 3E 00 02 00 01 5 | 6 | 7 | Stuff 1 : 8 | 9 | Source Context : 10 | 11 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 | 00 00 CA A4 C7 7D 48 2B 00 00 00 04 4A 33 13 | 14 | File Ref : 15 | 16 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 17 | 00 00 CA A4 C7 7D 48 2B 00 00 00 04 4A 34 18 | 19 | Stuff 2 : 20 | 21 | Source Context : 22 | 23 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 25 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 26 | 00 00 00 00 00 00 00 04 4A 34 CA A4 C8 48 00 00 27 | 00 00 00 00 00 00 FF FF FF FF 00 00 09 20 00 00 28 | 00 00 00 00 00 00 00 00 00 00 00 00 00 29 | 30 | File Ref : 31 | 32 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 33 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 34 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 35 | 00 00 00 00 00 00 00 00 00 00 00 05 C5 70 BF C1 36 | 2C D1 00 00 00 00 00 00 00 00 FF FF FF FF 00 00 37 | 09 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 38 | 00 39 | 40 | File Ref : 41 | 42 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 43 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 44 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 45 | 00 00 00 00 00 00 00 00 05 BB 93 C0 AC 3F AB 00 46 | 00 00 00 00 00 00 00 FF FF FF FF 00 00 09 20 00 47 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 48 | 49 | Stuff 3 : 50 | 51 | Source Context : 52 | 53 | 00 10 00 08 00 00 CA A4 B9 6D 00 00 00 11 00 08 54 | 00 00 CA A4 BA 38 00 00 00 01 00 08 00 04 4A 33 55 | 00 00 BE D7 00 02 00 56 | 57 | File Ref : 58 | 59 | 00 00 10 00 08 00 00 CA A4 B9 6D 00 00 00 11 00 60 | 08 00 00 BF C1 2C D1 00 00 00 01 00 0C 00 04 4A 61 | 34 00 04 4A 33 00 00 BE D7 00 02 00 62 | 63 | 64 | Stuff 4 : 65 | 66 | Source Context : 67 | 68 | 00 0E 00 14 00 69 | 70 | File Ref : 71 | 72 | 00 00 0E 00 0C 00 73 | 74 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/dkb/SampleTableFormat.groovy: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.dkb 2 | 3 | import ca.odell.glazedlists.GlazedLists 4 | import ca.odell.glazedlists.gui.AdvancedTableFormat 5 | import ca.odell.glazedlists.gui.WritableTableFormat 6 | import com.relivethefuture.generic.Sample 7 | 8 | class SampleTableFormat implements AdvancedTableFormat,WritableTableFormat { 9 | 10 | def columnNames = ["Note","Name", "Size (k)","Exclude"] 11 | def classes = [Integer.class, String.class,Integer.class,Boolean.class] 12 | 13 | Class getColumnClass(int index) { 14 | return classes[index] 15 | } 16 | 17 | Comparator getColumnComparator(int index) { 18 | if(index == 3) { 19 | return SampleComparator.EXCLUDED.tableComparator 20 | } else if(index == 2) { 21 | return SampleComparator.SIZE.tableComparator 22 | } else if(index == 1) { 23 | return SampleComparator.NAME.tableComparator 24 | } else { 25 | return SampleComparator.NOTE.tableComparator 26 | } 27 | } 28 | 29 | boolean isEditable(Sample sample, int index) { 30 | return (index == 3) 31 | } 32 | 33 | Sample setColumnValue(Sample sample, Object newValue, int index) { 34 | if(index == 3) { 35 | sample.exclude = newValue 36 | } 37 | return sample 38 | } 39 | 40 | int getColumnCount() { 41 | return columnNames.size() 42 | } 43 | 44 | String getColumnName(int index) { 45 | return columnNames[index] 46 | } 47 | 48 | Object getColumnValue(Sample sample, int index) { 49 | if(index == 3) { 50 | return sample.exclude 51 | } else if(index == 2) { 52 | return Math.floor(sample.size / 1024) as Integer 53 | } else if(index == 1) { 54 | return sample.name 55 | } else { 56 | return sample.root 57 | } 58 | 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /DrumKitBuilder2.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /src/main/javaFlacEncoder/FLACStreamIdentifier.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Preston Lacey http://javaflacencoder.sourceforge.net/ 3 | * All Rights Reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | 20 | package javaFlacEncoder; 21 | 22 | /** 23 | * Provides the stream identifier used at beginning of flac streams. 24 | * @author Preston Lacey 25 | */ 26 | public class FLACStreamIdentifier { 27 | static final byte streamMarkerByte1 = 0x66; 28 | static final byte streamMarkerByte2 = 0x4c; 29 | static final byte streamMarkerByte3 = 0x61; 30 | static final byte streamMarkerByte4 = 0x43; 31 | static final byte[] marker = { streamMarkerByte1, 32 | streamMarkerByte2, 33 | streamMarkerByte3, 34 | streamMarkerByte4, 35 | }; 36 | 37 | /** 38 | * Get an EncodedElement containing the marker(which is itself in a byte 39 | * array). 40 | * @return EncodedElement containing the marker. 41 | */ 42 | public static EncodedElement getIdentifier() { 43 | EncodedElement ele = new EncodedElement(); 44 | ele.setData(marker.clone()); 45 | ele.setUsableBits(32); 46 | return ele; 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /griffon-app/views/drumkitbuilder2/DrumKitBuilderMenuBar.groovy: -------------------------------------------------------------------------------- 1 | package drumkitbuilder2 2 | 3 | import javax.swing.event.PopupMenuListener 4 | 5 | import static griffon.util.GriffonApplicationUtils.getIsMacOSX 6 | 7 | menuBar = menuBar { 8 | menu(text: app.getMessage('application.menu.File.name', ' File'), 9 | mnemonic: app.getMessage('application.menu.File.mnemonic', 'F')) { 10 | menuItem(browseAction) 11 | menuItem(configureAction) 12 | menuItem(exportAction) 13 | menu(id: 'openRecentMenu', enabled: false, 14 | text: app.getMessage('application.menu.OpenRecent.name', ' Open Recent...'), 15 | mnemonic: app.getMessage('application.menu.OpenRecent.mnemonic', 'E')) 16 | separator() 17 | if (!isMacOSX) { 18 | separator() 19 | menuItem(quitAction) 20 | } 21 | } 22 | 23 | if (!isMacOSX) glue() 24 | menu(text: app.getMessage('application.menu.Help.name', 'Help'), 25 | mnemonic: app.getMessage('application.menu.Help.mnemonic', 'H')) { 26 | if (!isMacOSX) { 27 | menuItem(aboutAction) 28 | } 29 | menuItem(helpAction) 30 | } 31 | } 32 | 33 | openRecentMenu.popupMenu.addPopupMenuListener([ 34 | popupMenuWillBecomeVisible: { 35 | println openRecentMenu 36 | openRecentMenu.removeAll() 37 | model.recentFolders.eachWithIndex { file, int i -> 38 | openRecentMenu.add(action( 39 | name: "${i + 1}. ${file.name}".toString(), 40 | mnemonic: 1 + i, 41 | closure: { controller.scan(file) } 42 | )) 43 | } 44 | if (model.recentScripts.size()) { 45 | openRecentMenu.add(separator()) 46 | openRecentMenu.add(clearRecentFoldersAction) 47 | } 48 | }, 49 | popupMenuWillBecomeInvisible: {/*empty*/}, 50 | popupMenuCanceled: {/*empty*/} 51 | ] as PopupMenuListener) 52 | 53 | return menuBar -------------------------------------------------------------------------------- /src/main/com/relivethefuture/kitbuilder/output/OutputConfig.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.kitbuilder.output; 2 | 3 | import com.relivethefuture.formats.SamplerFormat; 4 | import com.relivethefuture.generic.*; 5 | import com.relivethefuture.generic.InstrumentFactory; 6 | import com.relivethefuture.kitbuilder.writers.InstrumentWriter; 7 | 8 | /** 9 | */ 10 | public class OutputConfig extends GenericOutput { 11 | 12 | private SamplerFormat format; 13 | private InstrumentWriter writer; 14 | private InstrumentFactory instrumentFactory; 15 | 16 | private SampleFactory sampleFactory; 17 | private ZoneFactory zoneFactory; 18 | 19 | public OutputConfig() { 20 | instrumentFactory = new BasicInstrumentFactory(); 21 | sampleFactory = new BasicSampleFactory(); 22 | zoneFactory = new BasicZoneFactory(); 23 | } 24 | 25 | public InstrumentWriter getWriter() { 26 | return writer; 27 | } 28 | 29 | public void setWriter(InstrumentWriter writer) { 30 | this.writer = writer; 31 | } 32 | 33 | public SamplerFormat getFormat() { 34 | return format; 35 | } 36 | 37 | public void setFormat(SamplerFormat format) { 38 | this.format = format; 39 | if(getRelativePath() == null) { 40 | setRelativePath(format.type()); 41 | } 42 | } 43 | 44 | public InstrumentFactory getInstrumentFactory() { 45 | return instrumentFactory; 46 | } 47 | 48 | public void setInstrumentFactory(InstrumentFactory instrumentFactory) { 49 | this.instrumentFactory = instrumentFactory; 50 | } 51 | 52 | public SampleFactory getSampleFactory() { 53 | return sampleFactory; 54 | } 55 | 56 | protected void setSampleFactory(SampleFactory sampleFactory) { 57 | this.sampleFactory = sampleFactory; 58 | } 59 | 60 | public ZoneFactory getZoneFactory() { 61 | return zoneFactory; 62 | } 63 | 64 | protected void setZoneFactory(ZoneFactory zoneFactory) { 65 | this.zoneFactory = zoneFactory; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /griffon-app/controllers/drumkitbuilder2/DialogController.groovy: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2007-2012 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | */ 15 | 16 | package drumkitbuilder2 17 | 18 | import griffon.transform.Threading 19 | 20 | import java.awt.* 21 | 22 | /** 23 | * @author Andres Almiray 24 | */ 25 | class DialogController { 26 | def model 27 | def view 28 | def builder 29 | 30 | protected dialog 31 | 32 | @Threading(Threading.Policy.INSIDE_UITHREAD_SYNC) 33 | def show = { Window window = null -> 34 | window = window ?: Window.windows.find {it.focused} 35 | if (!dialog || dialog.owner != window) { 36 | dialog = builder.dialog( 37 | owner: window, 38 | title: model.title, 39 | resizable: model.resizable, 40 | modal: model.modal) { 41 | container(view.content) 42 | } 43 | if (model.width > 0 && model.height > 0) { 44 | dialog.preferredSize = [model.width, model.height] 45 | } 46 | dialog.pack() 47 | } 48 | int x = window.x + (window.width - dialog.width) / 2 49 | int y = window.y + (window.height - dialog.height) / 2 50 | dialog.setLocation(x, y) 51 | dialog.visible = true 52 | } 53 | 54 | @Threading(Threading.Policy.INSIDE_UITHREAD_SYNC) 55 | def hide = { evt = null -> 56 | log.debug("Disposing of dialog") 57 | dialog?.visible = false 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /DrumKitBuilder2-griffonPlugins.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /griffon-app/resources/templates/ableton/sections/MultiSamplePart.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | {relativePaths} 53 | 54 | 55 | 56 | {fileRefData} 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /resources/packaging/SampleMapBuilder.exe4j: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /test/unit/com/relivethefuture/dkb/PathUtilsTest.groovy: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.dkb 2 | 3 | import com.relivethefuture.FilenameUtils 4 | import org.junit.Before 5 | import org.slf4j.Logger 6 | import org.slf4j.LoggerFactory 7 | 8 | import static org.junit.Assert.assertEquals 9 | 10 | /** 11 | * Created by martin on 20/04/13 at 16:54 12 | * 13 | */ 14 | class PathUtilsTest { 15 | 16 | private final Logger logger = LoggerFactory.getLogger(PathUtilsTest.class); 17 | 18 | @Before 19 | public void setUp() throws Exception { 20 | 21 | 22 | } 23 | 24 | void testAddStructure() { 25 | File dest = new File("D:/a") 26 | File source = new File("D:/b/c/d/e/f") 27 | 28 | File a1 = PathUtils.addDirectoryStructure(dest, source, 1) 29 | assertEquals("D:\\a\\f",a1.getAbsolutePath()) 30 | File a2 = PathUtils.addDirectoryStructure(dest, source, 2) 31 | assertEquals("D:\\a\\e\\f",a2.getAbsolutePath()) 32 | File a3 = PathUtils.addDirectoryStructure(dest, source, 3) 33 | assertEquals("D:\\a\\d\\e\\f",a3.getAbsolutePath()) 34 | File all = PathUtils.addDirectoryStructure(dest, source, 10) 35 | assertEquals("D:\\a\\b\\c\\d\\e\\f",all.getAbsolutePath()) 36 | } 37 | 38 | void testAbsoluteOutput() { 39 | File outputDirectory = new File("D:/tmp") 40 | File sourceDirectory = new File("D:/audio/samples") 41 | String relativePath = null 42 | OutputLayout layout = new OutputLayout() 43 | 44 | layout.layoutStyle = LayoutStyle.ABSOLUTE 45 | layout.outputStructureDepth = 0 46 | File out = PathUtils.getOutputDirectoryForLayout(outputDirectory, sourceDirectory, layout, relativePath) 47 | assertEquals out, outputDirectory 48 | } 49 | 50 | void testRelativeOutput() { 51 | File outputDirectory = new File("D:/tmp") 52 | File sourceDirectory = new File("D:/audio/samples") 53 | String relativePath = "relative" 54 | OutputLayout layout = new OutputLayout() 55 | 56 | layout.layoutStyle = LayoutStyle.RELATIVE 57 | layout.outputStructureDepth = 0 58 | File out = PathUtils.getOutputDirectoryForLayout(outputDirectory, sourceDirectory, layout, relativePath) 59 | assertEquals out, new File(outputDirectory, relativePath) 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/main/javaFlacEncoder/ArrayRecycler.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Preston Lacey http://javaflacencoder.sourceforge.net/ 3 | * All Rights Reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | 20 | package javaFlacEncoder; 21 | 22 | import java.util.concurrent.LinkedBlockingQueue; 23 | 24 | /** 25 | * The purpose of this class is to provide a source for reusable int arrays. 26 | * When using large numbers of arrays in succession, it is inefficient to 27 | * constantly go in an allocate/free loop. This way, we may pass a single, 28 | * thread-safe recycler to all objects. No matter where the arrays end their 29 | * life, we can then add it to the same resource store. 30 | * 31 | * @author Preston Lacey 32 | */ 33 | public class ArrayRecycler { 34 | LinkedBlockingQueue usedIntArrays = null; 35 | ArrayRecycler() { 36 | usedIntArrays = new LinkedBlockingQueue(); 37 | } 38 | public void add(int[] array) { 39 | usedIntArrays.add(array); 40 | } 41 | 42 | /** 43 | * 44 | * @param size 45 | * @return 46 | */ 47 | public int[] getArray(int size) { 48 | int[] result = usedIntArrays.poll(); 49 | if(result == null) { 50 | result = new int[size]; 51 | //System.err.println("Created new int array from null"); 52 | } 53 | else if(result.length < size) { 54 | usedIntArrays.offer(result); 55 | result = new int[size]; 56 | //System.err.println("created new int array from bad size"); 57 | } 58 | return result; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/kitbuilder/KitFileNameGenerator.groovy: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.kitbuilder; 2 | 3 | import com.relivethefuture.ResourceUtils; 4 | import com.relivethefuture.dkb.OutputLayout; 5 | import com.relivethefuture.formats.SamplerFormat; 6 | import com.relivethefuture.kitbuilder.model.FolderOfSamples; 7 | import com.relivethefuture.kitbuilder.output.OutputConfig; 8 | import org.slf4j.Logger; 9 | import org.slf4j.LoggerFactory; 10 | 11 | public class KitFileNameGenerator { 12 | private final Logger logger = LoggerFactory.getLogger(KitFileNameGenerator.class); 13 | 14 | private OutputLayout layout; 15 | private OutputConfig config; 16 | 17 | public String generateFileName(FolderOfSamples fos, String extra) { 18 | 19 | String mapFileName = ""; 20 | if(extra == null) { 21 | extra = ""; 22 | } 23 | 24 | SamplerFormat format = config.getFormat(); 25 | 26 | logger.debug("Generate filename for " + fos.getSourceDirectory().getName() + " : " + config.getFormat() + " : " + extra); 27 | if(fos.getName() != null) { 28 | List pathSections = ResourceUtils.getPathSections(fos.getSourceDirectory()); 29 | // If there are more sections in the path than required just remove them 30 | logger.debug("PS " + pathSections.size() + " : " + layout.getFilenameDepth()); 31 | if(pathSections.size() > layout.getFilenameDepth()) { 32 | int spare = pathSections.size() - layout.getFilenameDepth(); 33 | for(int i=0;i columnNames[index] }, 26 | getColumnValue: { object, index -> 27 | switch(index) { 28 | case 0: return object.name;break; 29 | case 1: return object.samples.size();break; 30 | case 2: return object.sourceDirectory.absolutePath; break; 31 | default : return "" 32 | } 33 | }] as TableFormat) 34 | } 35 | 36 | splitPane(id: 'mainContent', resizeWeight: 0.45f, border: emptyBorder(0),orientation: JSplitPane.HORIZONTAL_SPLIT) { 37 | jxtitledPanel(title: "Folders", border: emptyBorder(0), 38 | constraints: context.CENTER) { 39 | scrollPane(border:matteBorder(color: Color.BLACK,top:0,left:0,bottom:0,right:1)) { 40 | table(id: "foldersTable", model: createFoldersTableModel(),selectionModel:model.selectedFolders, autoCreateRowSorter:false) 41 | def tableSorter = new TableComparatorChooser(foldersTable, model.folders, AbstractTableComparatorChooser.SINGLE_COLUMN) 42 | 43 | } 44 | } 45 | jxtitledPanel(title: "Kit", border:emptyBorder(0), 46 | constraints: context.CENTER) { 47 | scrollPane(border:matteBorder(color: Color.BLACK,top:0,left:1,bottom:0,right:0)) { 48 | table(id: "samplesTable", model: model.samplesTableModel, selectionModel:model.selectedSamples, autoCreateRowSorter:false, dragEnabled:true,dropMode:DropMode.INSERT_ROWS) 49 | } 50 | keyStrokeAction(component: samplesTable, 51 | keyStroke: 'SPACE', 52 | action: toggleSampleEnabled) 53 | } 54 | } 55 | mainContent 56 | -------------------------------------------------------------------------------- /griffonw.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Griffon startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRIFFON_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\wrapper\griffon-wrapper.jar 73 | 74 | @rem Execute Griffon 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRIFFON_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GriffonWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRIFFON_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRIFFON_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /resources/formats/Live/OSX Data Blocks/Plan.txt: -------------------------------------------------------------------------------- 1 | 4 Null Bytes 2 | 3 | 2 Bytes Data length (including previous 4 bytes) 4 | 5 | 4 Bytes : 00 02 00 00 6 | 7 | 1 Byte length V , Maximum value of 27. 8 | V bytes : Volume Name (e.g. Macintosh) 9 | 27 - V bytes of null padding 10 | Same in all files : ca a4 c7 7d 48 2b 00 00 00 11 | 12 | 3 Bytes of something, always different 13 | 14 | 1 Byte length of audiofile name 15 | 16 | audiofile name (e.g. test.wav) 17 | 18 | all Null to byte 0x73 19 | 20 | 7 Bytes, all different : e.g. 21 | 05 BB 93 C0 AC 3F AB 22 | 04 FF D9 C0 38 E3 A1 23 | 05 bb 94 bf c1 2c d1 24 | 05 1c 39 c0 ac 3f ab 25 | 26 | 8 null bytes 27 | 28 | 4 bytes of FF 29 | 30 | Same in all files : 00 00 09 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31 | 32 | 1 Byte length of parent directory name 33 | 34 | parent directory name 35 | 36 | Same in all files : 00 00 10 00 08 00 00 ca a4 b9 6d 00 00 00 11 00 08 00 00 37 | 38 | 4 bytes of stuff. 39 | 4 bytes (00 00 00 01). 40 | 41 | 2 bytes length : X 42 | X bytes 43 | 44 | 00 02 45 | 46 | 2 bytes length Y , string of old style path 47 | Y Bytes e.g Macintosh:Users:.User:.Documents:.test.wav 48 | 49 | 6 bytes : 00 00 0E 00 0C 00 50 | 2 bytes length Z 51 | Z bytes of UTF-16 sample name, e.g. ...B.i.p.o.l.a.r. .G.l.i.t.c.h.1...w.a.v 52 | 53 | Same in all files : 00 0f 00 14 00 09 00 4d 00 61 00 63 00 69 00 6e 00 74 00 6f 00 73 00 68 00 12 00 54 | 55 | 1 byte length A 56 | A bytes : Absolute path to sample file : Users/User/Documents/audio/Konkrete/Bi-Polar Kit/Bi-Polar Kit Samples/Bipolar Glitch1.wav 57 | 58 | Same in all files : 00 00 13 00 01 2F 00 00 15 00 02 00 0B FF FF 00 00 59 | 60 | ------------------------------- 61 | 62 | struct String 63 | { 64 | uint8 Length; 65 | char Str[Length]; 66 | }; 67 | 68 | struct VolumeString 69 | { 70 | uint8 Length; 71 | char Str[Length]; 72 | uint8 nulls[27-Length]; 73 | }; 74 | 75 | struct SampleFilename 76 | { 77 | uint8 Length; 78 | char Str[Length]; 79 | uint8 padding[64-Length]; 80 | }; 81 | 82 | struct StringX 83 | { 84 | uint16 Length; 85 | char Str[Length]; 86 | }; 87 | 88 | struct utf16String 89 | { 90 | uint8 Length; 91 | uint8 null; 92 | uint16 chars[Length]; 93 | }; 94 | 95 | struct Main 96 | { 97 | uint32 Null; 98 | uint16 Size; 99 | uint32 AlmostNull; 100 | VolumeString volume; 101 | uint8 DiffA[12]; 102 | SampleFilename sampleFile; 103 | uint8 MoreStuff[38]; 104 | String parentDirectory; 105 | uint8 Stuff3[27]; 106 | StringX a; 107 | uint16 zeroTwo; 108 | StringX b; 109 | uint32 oooooeoo; 110 | uint16 ocoo; 111 | utf16String utf16Sample; 112 | uint8 Stuff4[26]; 113 | String absolutePath; 114 | uint8 Stuff5[17]; 115 | }; 116 | 117 | -------------------------------------------------------------------------------- /griffon-app/controllers/drumkitbuilder2/ExportProgressController.groovy: -------------------------------------------------------------------------------- 1 | package drumkitbuilder2 2 | 3 | import griffon.transform.Threading 4 | 5 | import java.awt.Window 6 | 7 | class ExportProgressController { 8 | def model 9 | def view 10 | def builder 11 | protected dialog 12 | 13 | def fileScannerService 14 | def exportService 15 | 16 | Boolean cancelExport = false 17 | 18 | @Threading(Threading.Policy.INSIDE_UITHREAD_SYNC) 19 | void show(Window window) { 20 | window = window ?: Window.windows.find{it.focused} 21 | if(!dialog || dialog.owner != window) { 22 | if(dialog) app.windowManager.hide(dialog) 23 | log.debug("Creating export progress dialog") 24 | dialog = builder.dialog( 25 | owner: window, 26 | title: "Exporting...", 27 | resizable: false, 28 | modal: true) { 29 | container(view.content) 30 | } 31 | dialog.preferredSize = [600, 130] 32 | dialog.pack() 33 | } 34 | int x = window.x + (window.width - dialog.width) / 2 35 | int y = window.y + (window.height - dialog.height) / 2 36 | dialog.setLocation(x, y) 37 | log.debug("Trigger export") 38 | cancelExport = false 39 | doExport() 40 | 41 | app.windowManager.show(dialog) 42 | 43 | } 44 | 45 | void mvcGroupInit(Map args) { 46 | log.debug("Export MVC Init") 47 | } 48 | 49 | @Threading(Threading.Policy.INSIDE_UITHREAD_ASYNC) 50 | def cancel = { evt = null -> 51 | log.debug("Cancel") 52 | cancelExport = true 53 | app.windowManager.hide(dialog) 54 | } 55 | 56 | @Threading(Threading.Policy.INSIDE_UITHREAD_ASYNC) 57 | def doExport = { 58 | log.debug("Do Export") 59 | jxwithWorker(start: true) { 60 | onInit { 61 | exportService.start(fileScannerService.scanner) 62 | model.buttonLabel = "Cancel" 63 | } 64 | work { 65 | Float progress = 0f 66 | def status 67 | while((progress < 100) || cancelExport) { 68 | status = exportService.work() 69 | publish(status) 70 | progress = status[1] 71 | } 72 | } 73 | onUpdate { status -> 74 | model.currentFormat = status[0][0] 75 | model.overallProgress = Math.floor(status[0][1]) 76 | } 77 | onDone { 78 | edt { 79 | model.currentFormat = "Complete" 80 | model.overallProgress = 100 81 | model.buttonLabel = "Close" 82 | log.debug("Export Done") 83 | } 84 | } 85 | } 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/dkb/PathUtils.groovy: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.dkb 2 | 3 | import org.slf4j.Logger 4 | import org.slf4j.LoggerFactory 5 | 6 | import java.util.regex.Pattern 7 | 8 | class PathUtils { 9 | 10 | private static final Logger logger = LoggerFactory.getLogger(PathUtils.class); 11 | 12 | public static File getOutputDirectoryForLayout(File outputDirectory, File sourceDirectory, OutputLayout layout, String relativePath = null) { 13 | logger.debug("Get Output For Layout " + layout.getLayoutStyle().name) 14 | if(layout.getLayoutStyle() == LayoutStyle.ABSOLUTE) { 15 | // Using outputDir as base add on the number of directories from layout.outputStructureDepth 16 | return addDirectoryStructure(outputDirectory, sourceDirectory, layout.getOutputStructureDepth()); 17 | } else if(layout.getLayoutStyle() == LayoutStyle.RELATIVE) { 18 | if(relativePath == null) { 19 | throw new Exception("Relative Path is null but layout is Relative") 20 | } 21 | // Using outputDir as base 22 | // 1. add on relativePath 23 | File extra = new File(outputDirectory, relativePath); 24 | // 2. add on the number of directories from layout.outputStructureDepth 25 | return addDirectoryStructure(extra, sourceDirectory, layout.getOutputStructureDepth()); 26 | } else if(layout.getLayoutStyle() == LayoutStyle.SOURCE) { 27 | // Use instrument source directory as base 28 | return sourceDirectory; 29 | } 30 | return outputDirectory; 31 | } 32 | 33 | public static File addDirectoryStructure(File dest, File sourceDirectory, Integer depth) { 34 | if(depth == 0) { 35 | return dest 36 | } 37 | 38 | logger.debug("Add dir structure : " + dest.getAbsolutePath() + " : " + sourceDirectory.getAbsolutePath() + " : " + depth) 39 | 40 | String sourcePath = sourceDirectory.getAbsolutePath() 41 | Boolean isUnix = sourcePath.charAt(0) == '/' 42 | String p = Pattern.quote(isUnix ? "/" : "\\") 43 | String[] sourceParts = sourcePath.split(p) 44 | 45 | List slist = sourceParts.toList() 46 | if(!isUnix) { 47 | slist.remove(0) 48 | } 49 | 50 | Integer lastElement = slist.size() 51 | 52 | String extraParts = ""; 53 | if(lastElement >= depth) { 54 | int start = lastElement - depth; 55 | for(int i=0;i, Comparable { 17 | 18 | private final Logger log = LoggerFactory.getLogger(FolderOfSamples.class); 19 | 20 | // Lists of sample file lists, each sublist contains a maximum of 127 sampleLists. 21 | public ArrayList samples; 22 | // Directory where the actual samples are 23 | private File directory; 24 | 25 | // Where the original samples are 26 | private File sourceDirectory; 27 | private String name; 28 | 29 | private Comparator comparator; 30 | 31 | public FolderOfSamples(File directory, ArrayList audioFiles) { 32 | this.sourceDirectory = directory; 33 | this.samples = audioFiles; 34 | name = directory.getName(); 35 | } 36 | 37 | public File getSourceDirectory() { 38 | return sourceDirectory; 39 | } 40 | 41 | public void setSourceDirectory(File sourceDirectory) { 42 | this.sourceDirectory = sourceDirectory; 43 | } 44 | 45 | public void setDirectory(File dir) { 46 | directory = dir; 47 | } 48 | 49 | public File getDirectory() { 50 | return directory; 51 | } 52 | 53 | public String getName() { 54 | return name; 55 | } 56 | 57 | public void setName(String n) { 58 | this.name = n; 59 | } 60 | 61 | public int compare(FolderOfSamples folderOfSamples, FolderOfSamples folderOfSamples2) { 62 | return folderOfSamples.samples.size() - folderOfSamples2.samples.size(); 63 | } 64 | 65 | public int compareTo(FolderOfSamples folderOfSamples) { 66 | return samples.size() - folderOfSamples.samples.size(); 67 | } 68 | 69 | public FolderOfSamples (FolderOfSamples source) { 70 | samples = new ArrayList(); 71 | Sample newSample = null; 72 | for(Sample s : source.samples) { 73 | newSample = new BasicSample(s); 74 | samples.add(newSample); 75 | } 76 | 77 | log.debug("Copied samples to FOS"); 78 | directory = source.getDirectory(); 79 | log.debug("Set directory to " + directory); 80 | name = source.name; 81 | } 82 | 83 | public Comparator getSampleComparator() { 84 | return comparator; 85 | } 86 | 87 | public void setSampleComparator(Comparator sorter) { 88 | this.comparator = sorter; 89 | } 90 | 91 | } 92 | -------------------------------------------------------------------------------- /notes/ideas.txt: -------------------------------------------------------------------------------- 1 | 1. Drag and drop 2 | 3 | Allow drag and drop of directories from explorer into main window and use that as root 4 | 5 | 2. Better Finder dialog (mac) and browser that shows sidebar etc. or at least accepts key commands (mac) for switching quickly. 6 | 7 | Investigate mac dialog options 8 | 9 | 3. Ability to bookmark favorite locations. 10 | 11 | Think about bookmark system 12 | 13 | 4. The instructions should make a clear note NOT to select inside a folder, but to select the folder itself because it won't work if you go into the folder and choose select. Otherwise, remove the option to hit 'select' when you haven't actually selected a folder. 14 | 15 | Look at this as part of 2 as its a mac bug 16 | 17 | 5. Drag to reorder isn't obvious. Get mouse to show a 'finger/hand' symbol on hover. 18 | 19 | Started but hand cursor disappears after something happens 20 | 21 | 6. Dynamically update the path display in the table to show how export would work 22 | 23 | Options to create file depth/folder depth aren't exactly obvious. 24 | Maybe this setting should be on the same page as the map builder and there should be a column that shows you the resulting path 25 | and how it looks and is named (like you showed in your documentation, but dynamically with the actual results). 26 | 27 | 7. Directory selection in left table 28 | 29 | Option to select or shift select Folders on left to be included in the export. 30 | 31 | Add 'export selected' and 'export all' options 32 | 33 | 8. Reaktor embed samples 34 | 35 | Option to embed samples into the map is really missing/wanted feature by users. 36 | 37 | 9. Create new icons for toolbar 38 | 39 | Rescan icon isn't clear. Other icons aren't great either. 40 | 41 | 10. Add note number column to right table 42 | 43 | Kit ordering should show numbers in the first Column (Note Number, Name, Size, Exclude for example). 44 | 45 | 11. Change 'Layout' to Output Locations: Base+Relative Path, Original Source, Individual or something more obvious.. 46 | 47 | 12. Choose settings before export. 48 | 49 | I'd prefer to choose settings for output when I hit export. So, hit EXPORT and get a dialog for output settings. Choose one and hit 'don't remind me again' if you don't want to be bothered by it anymore. 50 | 51 | 13. Export window should close automatically on complete. 52 | 53 | 14. Close button on export config window. 54 | 55 | Clicking cancel/ok for changing paths is good, but not if you can accidentally close the window by hitting the window close button. The close window button is closer to the LAYOUT setting, so I just changed layout and hit close a couple times wondering why my settings didn't stick. Then I looked below and saw the dialog for 'cancel/ok'. When you close that window, it should prompt you to choose cancel or ok or something like that as it isn't clear now. 56 | Change OK to 'apply'. Maybe that helps too. 57 | 58 | Either remove, make it do OK or show an OK / Cancel dialog -------------------------------------------------------------------------------- /src/main/com/relivethefuture/audio/AudioFilePlayer.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.audio; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | 6 | import javax.sound.sampled.*; 7 | import java.io.File; 8 | import java.io.IOException; 9 | import java.util.ArrayList; 10 | import java.util.List; 11 | 12 | /** 13 | * Created by martin on 11/01/12 at 11:46 14 | */ 15 | public class AudioFilePlayer { 16 | 17 | private final Logger logger = LoggerFactory.getLogger(AudioFilePlayer.class); 18 | 19 | private Clip currentClip; 20 | 21 | private List clips; 22 | 23 | private int currentClipIndex = 0; 24 | 25 | public AudioFilePlayer() { 26 | clips = new ArrayList(8); 27 | try { 28 | for (int i = 0; i < 8; i++) { 29 | Clip clip = AudioSystem.getClip(); 30 | clips.add(clip); 31 | } 32 | } catch (LineUnavailableException e) { 33 | logger.error("Cant create audio clip",e); 34 | } 35 | 36 | updateCurrentClip(); 37 | 38 | } 39 | 40 | private void updateCurrentClip() { 41 | currentClip = clips.get(currentClipIndex++); 42 | if(currentClipIndex == 8) { 43 | currentClipIndex = 0; 44 | } 45 | } 46 | 47 | public void play(File file) { 48 | try { 49 | currentClip.close(); 50 | AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(file); 51 | AudioFormat sourceFormat = audioInputStream.getFormat(); 52 | DataLine.Info info = new DataLine.Info(SourceDataLine.class, 53 | sourceFormat, AudioSystem.NOT_SPECIFIED); 54 | boolean bIsSupportedDirectly = AudioSystem.isLineSupported(info); 55 | if (!bIsSupportedDirectly) { 56 | AudioFormat targetFormat = new AudioFormat( 57 | AudioFormat.Encoding.PCM_SIGNED, 58 | sourceFormat.getSampleRate(), 59 | 16, 60 | sourceFormat.getChannels(), 61 | sourceFormat.getChannels() * 2, 62 | sourceFormat.getSampleRate(), 63 | true); 64 | audioInputStream = AudioSystem.getAudioInputStream(targetFormat, audioInputStream); 65 | } 66 | 67 | currentClip.open(audioInputStream); 68 | currentClip.setFramePosition(0); 69 | currentClip.start(); 70 | updateCurrentClip(); 71 | } catch (LineUnavailableException e) { 72 | logger.error("Line Unavailable",e); 73 | } catch (UnsupportedAudioFileException e) { 74 | logger.error("Unsupported Audio File", e); 75 | } catch (IOException e) { 76 | logger.error("IO Exception",e); 77 | } catch (IllegalStateException e) { 78 | logger.error("Illegal State",e); 79 | } 80 | 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/main/javaFlacEncoder/CRC16.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Preston Lacey http://javaflacencoder.sourceforge.net/ 3 | * All Rights Reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | 20 | package javaFlacEncoder; 21 | 22 | /** 23 | * Class to calculate a CRC16 checksum. 24 | * @author Preston Lacey 25 | */ 26 | public class CRC16 { 27 | /** For Debugging: Higher level equals more debug statements */ 28 | public static int DEBUG_LEV = 0; 29 | 30 | /** CRC Divisor: 0x8005(implicit 1 at MSB for 0x18005) */ 31 | static final int divisorCRC16 = 0x8005; 32 | 33 | /** working checksum stored between calls to update(..) */ 34 | protected int workingCRC; 35 | 36 | private static final short xorTable[] = generateTable(); 37 | /** 38 | * Constructor. Creates a CRC16 object that is ready to be used. Next step 39 | * would be to call update(...) with appropriate data. 40 | */ 41 | public CRC16() { 42 | reset(); 43 | } 44 | 45 | /** 46 | * Resets stored data, preparing object for a new checksum. 47 | */ 48 | public void reset() { 49 | workingCRC = 0; 50 | } 51 | 52 | public short checksum() { 53 | return (short)(workingCRC & 0xFFFF); 54 | } 55 | 56 | public int update(byte input) { 57 | workingCRC = (workingCRC << 8)^xorTable[((workingCRC >>> 8)^input) & 0xFF]; 58 | return workingCRC; 59 | } 60 | 61 | public int update(byte[] input, int start, int stop) { 62 | for(int i = start; i < stop; i++) { 63 | byte b = input[i]; 64 | workingCRC = (workingCRC << 8) ^ xorTable[((workingCRC >>> 8)^b) & 0xFF]; 65 | } 66 | return workingCRC; 67 | } 68 | 69 | private static short[] generateTable() { 70 | short[] table = new short[256]; 71 | for(int i = 0; i < table.length; i++) { 72 | int polynomial = divisorCRC16; 73 | int xorVal = i << 8; 74 | int topmask = 1 << 16; 75 | for(int x = 0; x < 8; x++ ) { 76 | xorVal = xorVal << 1; 77 | if( (xorVal & topmask) > 0) xorVal = (xorVal) ^ polynomial; 78 | } 79 | table[i] = (short)(xorVal & 0xFFFF); 80 | } 81 | return table; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /griffon-app/conf/webstart/application.jnlp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | @griffon.application.title@ 10 | @griffon.application.vendor@ 11 | 12 | 13 | @griffon.application.description.complete@ 14 | @griffon.application.description.oneline@ 15 | @griffon.application.description.minimal@ 16 | @griffon.application.description.tooltip@ 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | @jnlpJars@ 45 | 46 | @jnlpExtensions@ 47 | @jnlpProperties@ 48 | 49 | @jnlpResources@ 50 | 51 | 52 | 53 | 54 | @applet.tag.params@ 55 | 56 | 57 | -------------------------------------------------------------------------------- /src/main/javaFlacEncoder/BlockEncodeRequest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Preston Lacey http://javaflacencoder.sourceforge.net/ 3 | * All Rights Reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | 20 | package javaFlacEncoder; 21 | /** 22 | * BlockEncodeRequests are used to store a full block and necessary information 23 | * to encode such block. It is assumed member variables will be accessed 24 | * directly(for speed considerations). This Class simply gathers all values 25 | * into a single object, but handles no encoding logic itself. 26 | * @author Preston Lacey 27 | */ 28 | public class BlockEncodeRequest { 29 | /* Sample data, may be interleaved if multiple channels exist.*/ 30 | volatile int[] samples; 31 | /* Number of valid samples in this request */ 32 | volatile int count; 33 | /* Index of samples[] where the first valid sample exists */ 34 | volatile int start; 35 | /* Number of indices to skip between valid samples */ 36 | volatile int skip; 37 | /* Frame-number this block is assigned */ 38 | volatile long frameNumber; 39 | /* Location to store results to. For safety, use an empty element*/ 40 | volatile EncodedElement result; 41 | /* Stores whether the result should be valid */ 42 | volatile boolean valid; 43 | /* Number of elements actually encoded. */ 44 | volatile int encodedSamples; 45 | 46 | /** 47 | * Set all values, preparing this object to be sent to an encoder. Member 48 | * variable "valid" is set to false by this call. 49 | * 50 | * @param samples Sample data, interleaved if multiple channels are used 51 | * @param count Number of valid samples 52 | * @param start Index of first valid sample 53 | * @param skip Number of samples to skip between samples(this should be 54 | * equal to number-of-channels minus 1. 55 | * @param frameNumber Framenumber assigned to this block. 56 | * @param result Location to store result of encode. 57 | */ 58 | synchronized public void setAll(int[] samples, int count, int start, int skip, 59 | long frameNumber, EncodedElement result) { 60 | this.samples = samples; 61 | this.count = count; 62 | this.start = start; 63 | this.skip = skip; 64 | this.frameNumber = frameNumber; 65 | this.result = result; 66 | valid = false; 67 | this.encodedSamples = 0; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /griffon-app/conf/webstart/applet.jnlp: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | @griffon.application.title@ 10 | @griffon.application.vendor@ 11 | 12 | 13 | @griffon.application.description.complete@ 14 | @griffon.application.description.oneline@ 15 | @griffon.application.description.minimal@ 16 | @griffon.application.description.tooltip@ 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | @jnlpJars@ 45 | 46 | @jnlpExtensions@ 47 | @jnlpProperties@ 48 | 49 | @jnlpResources@ 50 | 56 | 57 | 58 | 59 | @applet.tag.params@ 60 | 61 | 62 | -------------------------------------------------------------------------------- /resources/packaging/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleName 6 | Sample Map Builder 7 | CFBundleIdentifier 8 | com.relivethefuture.SampleMapBuilder 9 | CFBundleVersion 10 | 100.0 11 | CFBundleAllowMixedLocalizations 12 | true 13 | CFBundleExecutable 14 | JavaApplicationStub 15 | CFBundleDevelopmentRegion 16 | English 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 0.4 21 | CFBundleSignature 22 | ???? 23 | CFBundleGetInfoString 24 | Sample Map Builder 25 | CFBundleInfoDictionaryVersion 26 | 6.0 27 | CFBundleIconFile 28 | icon-256x256.icns 29 | Java 30 | 31 | WorkingDirectory 32 | $APP_PACKAGE/Contents/Resources/Java 33 | MainClass 34 | griffon.swing.SwingApplication 35 | JVMVersion 36 | 1.6+ 37 | ClassPath 38 | 39 | $JAVAROOT/SampleMapBuilder.jar 40 | $JAVAROOT/glazedlists_java15-1.9.0.jar 41 | $JAVAROOT/griffon-glazedlists-runtime-2.0.0.jar 42 | $JAVAROOT/griffon-lookandfeel-pgslaf-runtime-1.0.0.jar 43 | $JAVAROOT/griffon-lookandfeel-runtime-1.0.0.jar 44 | $JAVAROOT/griffon-miglayout-runtime-1.0.0.jar 45 | $JAVAROOT/griffon-rt-1.3.0.jar 46 | $JAVAROOT/griffon-silkicons-runtime-1.0.0.jar 47 | $JAVAROOT/griffon-swing-runtime-1.3.0.jar 48 | $JAVAROOT/griffon-tasks-runtime-0.1.jar 49 | $JAVAROOT/groovy-all-2.1.3.jar 50 | $JAVAROOT/jcl-over-slf4j-1.7.3.jar 51 | $JAVAROOT/jul-to-slf4j-1.7.3.jar 52 | $JAVAROOT/log4j-1.2.17.jar 53 | $JAVAROOT/miglayout-core-4.2.jar 54 | $JAVAROOT/miglayout-swing-4.2.jar 55 | $JAVAROOT/PgsLookAndFeel-1.1.1.jar 56 | $JAVAROOT/PgsLookAndFeel-jide-1.1.1.jar 57 | $JAVAROOT/silk-1.3.jar 58 | $JAVAROOT/slf4j-api-1.7.3.jar 59 | $JAVAROOT/slf4j-log4j12-1.7.3.jar 60 | $JAVAROOT/swing-worker-1.1.jar 61 | $JAVAROOT/swingx-action-1.6.4.jar 62 | $JAVAROOT/swingx-autocomplete-1.6.4.jar 63 | $JAVAROOT/swingx-beaninfo-1.6.4.jar 64 | $JAVAROOT/swingx-common-1.6.4.jar 65 | $JAVAROOT/swingx-core-1.6.4.jar 66 | $JAVAROOT/swingx-graphics-1.6.4.jar 67 | $JAVAROOT/swingx-painters-1.6.4.jar 68 | $JAVAROOT/swingx-plaf-1.6.4.jar 69 | $JAVAROOT/swingxbuilder-0.3.jar 70 | $JAVAROOT/timingframework-1.0.jar 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/generic/BasicInstrument.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.generic; 2 | 3 | import com.relivethefuture.kitbuilder.model.FolderOfSamples; 4 | import org.slf4j.Logger; 5 | import org.slf4j.LoggerFactory; 6 | 7 | import java.io.File; 8 | import java.util.ArrayList; 9 | import java.util.List; 10 | 11 | /** 12 | * Created by martin on 08/01/12 at 15:02 13 | */ 14 | public class BasicInstrument implements Instrument { 15 | 16 | private static Logger logger = LoggerFactory.getLogger(BasicInstrument.class); 17 | 18 | protected List zones; 19 | private String name; 20 | private Integer fixedRoot; 21 | private Boolean looping; 22 | 23 | private ZoneFactory zoneFactory; 24 | private SampleFactory sampleFactory; 25 | private FolderOfSamples sourceFolderOfSamples; 26 | 27 | public BasicInstrument(String name) { 28 | this.name = name; 29 | zones = new ArrayList(); 30 | looping = false; 31 | } 32 | 33 | void addZone(Zone zone) { 34 | zones.add(zone); 35 | } 36 | 37 | public void setZones(List zones) { 38 | this.zones = zones; 39 | } 40 | 41 | public List getZones() { 42 | return zones; 43 | } 44 | 45 | public void setName(String name) { 46 | this.name = name; 47 | } 48 | 49 | public String getName() { 50 | return name; 51 | } 52 | 53 | public void setSamples(List samples) { 54 | int lowkey = 0; 55 | 56 | for (Sample sample : samples) { 57 | Zone zone = zoneFactory.createZone(); 58 | zone.setSample(sample); 59 | zone.setKeyRange(lowkey, lowkey); 60 | 61 | if (fixedRoot != null) { 62 | sample.setRoot(fixedRoot); 63 | } else { 64 | sample.setRoot(lowkey); 65 | } 66 | 67 | lowkey++; 68 | 69 | addZone(zone); 70 | } 71 | } 72 | 73 | public void setFixedRoot(Integer root) { 74 | fixedRoot = root; 75 | } 76 | 77 | public void loopAll(Boolean loop) { 78 | looping = loop; 79 | } 80 | 81 | 82 | public ZoneFactory getZoneFactory() { 83 | return zoneFactory; 84 | } 85 | 86 | public void setZoneFactory(ZoneFactory zoneFactory) { 87 | this.zoneFactory = zoneFactory; 88 | } 89 | 90 | @Override 91 | public File getSamplesDirectory() { 92 | return sourceFolderOfSamples.getDirectory(); 93 | } 94 | 95 | public File getSourceDirectory() { 96 | return sourceFolderOfSamples.getSourceDirectory(); 97 | } 98 | 99 | @Override 100 | public void setSource(FolderOfSamples fos) { 101 | sourceFolderOfSamples = fos; 102 | } 103 | 104 | @Override 105 | public FolderOfSamples getSource() { 106 | return sourceFolderOfSamples; 107 | } 108 | 109 | public SampleFactory getSampleFactory() { 110 | return sampleFactory; 111 | } 112 | 113 | public void setSampleFactory(SampleFactory sampleFactory) { 114 | this.sampleFactory = sampleFactory; 115 | } 116 | 117 | public Boolean getLooping() { 118 | return looping; 119 | } 120 | 121 | public void setLooping(Boolean looping) { 122 | this.looping = looping; 123 | } 124 | 125 | } 126 | -------------------------------------------------------------------------------- /src/main/com/relivethefuture/formats/sfz/SFZWriter.java: -------------------------------------------------------------------------------- 1 | package com.relivethefuture.formats.sfz; 2 | 3 | import com.relivethefuture.ResourceUtils; 4 | import com.relivethefuture.generic.Instrument; 5 | import com.relivethefuture.generic.MidiRange; 6 | import com.relivethefuture.generic.Zone; 7 | import com.relivethefuture.kitbuilder.writers.BasicInstrumentWriter; 8 | import com.relivethefuture.kitbuilder.output.OutputConfig; 9 | import org.slf4j.Logger; 10 | import org.slf4j.LoggerFactory; 11 | 12 | import java.io.File; 13 | import java.io.FileWriter; 14 | import java.io.IOException; 15 | import java.io.PrintWriter; 16 | 17 | public class SFZWriter extends BasicInstrumentWriter { 18 | 19 | private final Logger logger = LoggerFactory.getLogger(SFZWriter.class); 20 | 21 | private OutputConfig outputConfig; 22 | 23 | private File instrumentFile; 24 | 25 | public SFZWriter(OutputConfig sfzConfig) { 26 | super(); 27 | outputConfig = sfzConfig; 28 | } 29 | 30 | /** 31 | * 32 | * Alchemy Format : 33 | * 34 | * 35 | 36 | lokey=36 37 | hikey=36 38 | pitch_keycenter=36 39 | ampeg_decay=0.5 40 | ampeg_release=0.3 41 | 42 | sample=Ambient-Kick1.wav 43 | lovel=1 44 | hivel=127 45 | 46 | * 47 | * @param instrument 48 | * @param outputDirectory 49 | */ 50 | public void write(Instrument instrument, File outputDirectory) { 51 | 52 | FileWriter outFile = null; 53 | PrintWriter printWriter = null; 54 | instrumentFile = new File(outputDirectory,instrument.getName()); 55 | 56 | try { 57 | outFile = new FileWriter(instrumentFile); 58 | printWriter = new PrintWriter(outFile); 59 | for (Zone zone : instrument.getZones()) { 60 | writeZone(printWriter, zone); 61 | } 62 | 63 | } catch (IOException e1) { 64 | logger.error("IO Exception",e1); 65 | } finally { 66 | if (printWriter != null) { 67 | printWriter.close(); 68 | } 69 | } 70 | 71 | } 72 | 73 | private void writeZone(PrintWriter printWriter, Zone zone) { 74 | printWriter.println(""); 75 | MidiRange noteRange = zone.getNoteRange(); 76 | printWriter.println("lokey=" + noteRange.getLow().toString()); 77 | printWriter.println("hikey=" + noteRange.getHigh().toString()); 78 | printWriter.println("pitch_keycenter=" + noteRange.getLow().toString()); 79 | printWriter.println("ampeg_decay=0.5"); 80 | printWriter.println("ampeg_release=0.3"); 81 | printWriter.println(""); 82 | 83 | String relative = ResourceUtils.getRelativePath(instrumentFile, zone.getSample().getFile()); 84 | 85 | // The SFZ spec says that sample paths *must* be relative, although some software handles absolute paths 86 | printWriter.println(" sample=" + relative); 87 | printWriter.println("lovel=" + zone.getVelocityRange().getLow().toString()); 88 | printWriter.println("hivel=" + zone.getVelocityRange().getHigh().toString()); 89 | if(zone.getSample().getLooping()) { 90 | printWriter.println("loop_mode=loop_sustain"); 91 | } else { 92 | printWriter.println("loop_mode=one_shot"); 93 | } 94 | 95 | printWriter.println(""); 96 | printWriter.println(""); 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /src/main/javaFlacEncoder/FrameThread.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Preston Lacey http://javaflacencoder.sourceforge.net/ 3 | * All Rights Reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | 20 | package javaFlacEncoder; 21 | import java.util.concurrent.locks.ReentrantLock; 22 | 23 | /** 24 | * The FrameThread class provides threading support for a Frame object, allowing 25 | * multi-threaded encodings of FLAC frames. It's job is to repeatedly get a 26 | * BlockEncodeRequest from a BlockThreadManager, and encode it. 27 | * 28 | * @author Preston Lacey 29 | */ 30 | public class FrameThread implements Runnable{ 31 | Frame frame = null; 32 | ReentrantLock runLock = null; 33 | BlockThreadManager manager = null; 34 | /** 35 | * Constructor. Private to prevent it's use, as a Frame must be provided for 36 | * this FrameThread to be of any use. 37 | */ 38 | private FrameThread() {} 39 | 40 | /** 41 | * Constructor. Sets the Frame object that this FrameThread will use for 42 | * encodings. 43 | * 44 | * @param f Frame object to use for encoding. 45 | * @param manager BlockThreadManager to use as the BlockEncodeRequest source 46 | * and destination. 47 | */ 48 | public FrameThread(Frame f, BlockThreadManager manager) { 49 | super(); 50 | if(f == null) 51 | System.err.println("Frame is null. Error."); 52 | frame = f; 53 | runLock = new ReentrantLock(); 54 | this.manager = manager; 55 | } 56 | 57 | /** 58 | * Run method. This FrameThread will get a BlockEncodeRequest from the 59 | * BlockThreadManager, encode the block, return it to the manager, then 60 | * repeat. If no BlockEncodeRequest is available, or if it recieves a 61 | * request with the "frameNumber" field set to a negative value, it will 62 | * break the loop and end, notifying the manager it has ended. 63 | * 64 | */ 65 | public void run() { 66 | boolean process = true; 67 | synchronized(this) { 68 | BlockEncodeRequest ber = manager.getWaitingRequest(); 69 | if(ber != null && ber.frameNumber < 0) 70 | ber = null; 71 | while(ber != null && process) { 72 | if(ber.frameNumber < 0) { 73 | process = false; 74 | } 75 | else {//get available BlockEncodeRequest from manager 76 | ber.encodedSamples = frame.encodeSamples(ber.samples, ber.count, 77 | ber.start, ber.skip, ber.result, ber.frameNumber); 78 | ber.valid = true; 79 | manager.returnFinishedRequest(ber); 80 | ber = manager.getWaitingRequest(); 81 | } 82 | } 83 | manager.notifyFrameThreadExit(this); 84 | } 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /resources/formats/ShortCircuit/OneSample.scm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/main/javaFlacEncoder/Subframe_Constant.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 Preston Lacey http://javaflacencoder.sourceforge.net/ 3 | * All Rights Reserved. 4 | * 5 | * This library is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 2.1 of the License, or (at your option) any later version. 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU Lesser General Public 16 | * License along with this library; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 | */ 19 | 20 | package javaFlacEncoder; 21 | 22 | /** 23 | * Implements the Subframe abstract class, providing encoding support for the 24 | * FLAC Constant Subframe. 25 | * 26 | * @author Preston Lacey 27 | */ 28 | public class Subframe_Constant extends Subframe { 29 | /** For debugging: Higher values equals greater output, generally by 30 | * increments of 10. */ 31 | public static int DEBUG_LEV = 0; 32 | /** Subframe type supported by this implementation. */ 33 | public static final EncodingConfiguration.SubframeType type = 34 | EncodingConfiguration.SubframeType.VERBATIM; 35 | int sampleSize = 0; 36 | 37 | /** 38 | * Constructor. Sets StreamConfiguration to use. If the StreamConfiguration 39 | * must later be changed, a new Subframe object must be created as well. 40 | * 41 | * @param sc StreamConfiguration to use for encoding. 42 | */ 43 | public Subframe_Constant(StreamConfiguration sc) { 44 | super(sc); 45 | sampleSize = sc.getBitsPerSample(); 46 | } 47 | 48 | /** 49 | * This method is used to set the encoding configuration. 50 | * @param ec encoding configuration to use. 51 | * @return true if configuration was changed, false otherwise 52 | */ 53 | @Override 54 | public boolean registerConfiguration(EncodingConfiguration ec) { 55 | super.registerConfiguration(ec); 56 | 57 | return true; 58 | } 59 | 60 | 61 | public int encodeSamples(int[] samples, int count, int start, int skip, 62 | EncodedElement data, int offset, int bitsPerSample ) { 63 | if(DEBUG_LEV > 0) { 64 | System.err.println("Subframe_Verbatim::encodeSamples(...)"); 65 | } 66 | int encodedSamples = count; 67 | int bits = bitsPerSample+offset+8; 68 | int bytesNeeded = bits/8; 69 | if(bits%8 != 0) 70 | bytesNeeded++; 71 | data.clear(bytesNeeded, offset); 72 | data.addInt(0,1); 73 | data.addInt(0,6); 74 | data.addInt(0,1); 75 | 76 | int value = samples[start]; 77 | int increment = skip+1; 78 | int end = start+increment*count; 79 | int lastValid = end-increment;//assume all were the same 80 | for(int i = start; i < end; i+= increment) { 81 | if(samples[i] != value) { 82 | lastValid = i-increment;//if one differed, find where 83 | break; 84 | } 85 | } 86 | encodedSamples = (lastValid-start)/increment+1; 87 | data.addInt(value,bitsPerSample); 88 | lastEncodedSize = bits - offset; 89 | System.out.flush(); 90 | if(DEBUG_LEV > 0) 91 | System.err.println("Subframe_Verbatim::encodeSamples(...): End"); 92 | if(DEBUG_LEV > 10) { 93 | System.err.println("--: bitsUsed : "+bits+" : Bytes : "+bytesNeeded); 94 | } 95 | return encodedSamples; 96 | } 97 | 98 | } 99 | -------------------------------------------------------------------------------- /resources/formats/Live/Simpler/SimplerSampleRef.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 44003A005C00730061006D0070006C00650073005C004D0044004B005C006400720075006D007300 19 | 5C004B00690063006B0073005C0053006F006C00690064002E007700610076000000 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 44003A005C00730061006D0070006C00650073005C004D0044004B005C006400720075006D007300 58 | 5C004B00690063006B0073005C000000 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 44003A005C00730061006D0070006C00650073005C004D0044004B005C006400720075006D007300 89 | 5C004B00690063006B0073005C0053006F006C00690064002E007700610076000000 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | --------------------------------------------------------------------------------