Recent Posts

Pages: 1 2 [3] 4 5 ... 10
Plugin Development / Help to get exact bpm count and beatgrid
« Last post by djjoy on September 21, 2016, 17:56:10 »
Hello everybody,
I'm newbie in vamp and also in c++.
I have a DJ application that uses bass.dll, but the bpm counter of bass.dll is not very precise, and I want proccess the song throught vapm plugins to get the exact bpm.

If I use fixedtempo:0 with output = 0 (tempo), modifing your vamp-simple-host example to use with bass:
I get this:
0.002902494, 59.998911565: 51.3587 51.4 bpm
when the real bpm ( in traktor and virtual dj ) is 93.232

I use bass decode to send data to process:
BASS_Init(-1,44100,BASS_DEVICE_MONO,0,NULL);  //only one channel
stream = BASS_StreamCreateFile(FALSE,filename,0,0, BASS_STREAM_DECODE | BASS_SAMPLE_FLOAT);  //open the song in decode float samples mode

//loop to fill data in the plugin

    // Here we iterate over the frames, avoiding asking the numframes in case it's streaming input.
    do {

        int count;

        if ((blockSize==stepSize) || (currentStep==0)) {
            // read a full fresh block
         count = BASS_ChannelGetData(stream, filebuf, blockSize );
            if (count  < 0)
                cerr << "ERROR: sf_readf_float failed: "  << endl;
            if (count != blockSize) --finalStepsRemaining;
        } else {
            //  otherwise shunt the existing data down and read the remainder.
            memmove(filebuf, filebuf + (stepSize * channels), overlapSize * channels * sizeof(float));
         count = BASS_ChannelGetData(stream, filebuf + (overlapSize * channels ), stepSize );
            if (count < 0) {
                cerr << "ERROR: sf_readf_float failed: " <<  endl;
            if (count != stepSize) --finalStepsRemaining;
            count += overlapSize;

        for (int c = 0; c < channels; ++c) {
            int j = 0;
            while (j < count) {
                plugbuf[c][j] = filebuf[j * info.chans + c];
            while (j < blockSize) {
                plugbuf[c][j] = 0.0f;

        rt = RealTime::frame2RealTime(currentStep * stepSize, info.freq);

            (RealTime::realTime2Frame(rt + adjustment, info.freq),
             info.freq, outputNo, plugin->process(plugbuf, rt),
             out, useFrames);
      int frames;
      frames = BASS_ChannelGetLength(stream, BASS_POS_BYTE);
        if (frames > 0){
            int pp = progress;
            progress = (int)((float(currentStep * stepSize) / frames) * 100.f + 0.5f);
            if (progress != pp && out) {
                cerr << "\r" << progress << "%";


    } while (finalStepsRemaining > 0);

Can you helpme about this? What's wrong?

Best Regards,

DJ Joy

Plugin and Host Announcements / Re: We want your feedback!
« Last post by Chris H on September 01, 2016, 09:15:38 »
Hi everyone,

I've put together a more formal survey covering the questions listed above.  If you want to help guide the development of the next release of Sonic Visualiser, we would be grateful if you would share your views with us by filling it in:

This survey will be accepting answers until the end of September 2016.

Many thanks

Plugin and Host Announcements / We want your feedback!
« Last post by Chris H on July 13, 2016, 16:58:19 »
Hello everyone,

C4DM are working on a new major release of Sonic Visualiser and we would like to get some feedback from current users on things that you find awkward or difficult to do at the moment or features that you might like to see added. 

We're particularly looking for answers to questions such as these:

What do you currently like best about the user experience?

Are there parts of the installation process that you think could be made easier?

Are there common tasks that are fiddly or require a large number of steps to accomplish?

Are there aspects of finding/installing/using plugins that you think could be improved? (from both a user and a developer perspective)

I will be gathering requirements and comments over the next few weeks and we will use suggestions to guide development of the new release.

Please feel free to reply to this thread with your suggestions or, if you prefer, mail me directly at

Chris Harte

Host Forum: Sonic Visualiser / Re: Sonic Visualizer- fine control of zoom
« Last post by rcarroll on May 04, 2016, 12:14:39 »
Yes. thanks thats very helpful.

Is there a way to store different preferred zoom levels? ie. 150%, 200% etc. That's a feature I use constantly in Finale and other music software.

Is any of this in the documentation?
Host Forum: Sonic Visualiser / Re: Sonic Visualizer- fine control of zoom
« Last post by cannam on May 03, 2016, 12:54:32 »
Hi there -- try double-clicking on the zoom wheels and/or the little vertical range indicator next to the vertical zoom wheel. Does that do what you need?
Host Forum: Sonic Visualiser / Sonic Visualizer- fine control of zoom
« Last post by rcarroll on May 03, 2016, 12:48:11 »

I'm new to Sonic Visualizer, running on Mac.

With the spectrogram views, I can see the scroll wheels for zoom adjustment, but the results are pretty unpredictable. Is there any other way to set a specific zoom percentage or view range?
Plugin Development / Debugging / Console output
« Last post by Vampire on March 21, 2016, 17:03:38 »
Is there a good way to debug?

I'm trying to do some simple std::cout or std::cerr commands. Where would I see these when running the Sonic Visualiser application and loading my plugin?

or is there another way to inspect elements?
Plugin Development / Re: linking files
« Last post by Vampire on March 21, 2016, 14:44:26 »
thanks Chris! - working well now

I found it useful

1. in Makefile.osx, define a variable
OTHER_SRC_DIR := PathToMyFolder

I actually just added a folder to the 'skeleton' folder example and copied source, but you could add a path to existing source also.

2. in
CXXFLAGS   := <other flags> -I$(OTHER_SRC_DIR)

3. add to: PLUGIN_LDFLAGS   :=  <other stuff> -framework Accelerate

(as I used the Apple internal framework Accelerate)

4. as Chris explained above
PLUGIN_SOURCES := MyPlugin.cpp $(OTHER_SRC_DIR)/ExtraSrcCode.cpp

Then the command

make -f Makefile.osx

will generate required .o objects

I'm not using gmake (any reason to pursue that on Mac OS X?) over 'make -f ...'?

Plugin and Host Announcements / Sonic Annotator v1.4 now available
« Last post by cannam on March 18, 2016, 16:52:36 »
Sonic Annotator is a utility program for batch feature extraction from audio files.  It runs Vamp audio analysis plugins with specified parameters on audio files, and writes the result features in a selection of formats.

Version 1.4 is now available. This is a bugfix release. Changes include:

Front-end changes:

 - Better error reporting, especially for invalid transform files
   and transform-not-found

 - Avoid crashing out when a single plugin (that is not being used)
   can't be loaded because of e.g. an undefined symbol

Bug fixes:

 - Fix (with test) horrible crash with --multiplex option

 - Fix erroneous quantization to 16 bits for coded file types of
   greater bit depth

 - Fix multiple outputs when requesting both summary and non-summary
   for the same output

It appears I did not announce the previous v1.3 release in this forum; for the record, the changes in v1.3 were as follows:

Back-end (feature writer) changes:

 - Add the --csv-digits, --lab-digits, and --jams-digits options to
   control the number of significant figures printed for feature values

 - Update the JAMS writer to JAMS 0.2.0 format

 - Show a more useful error message when user provides a filename
   instead of a transform id to the -d option (happened to me when
   cut-and-pasting command lines and I was quite baffled at first)

Plugin Development / Re: linking files
« Last post by cannam on March 18, 2016, 16:49:58 »
The way the skeleton files in the v2.6 SDK are arranged, the platform-specific stuff goes in Makefile.osx, Makefile.linux etc and the platform-independent stuff goes into, which is included by the other Makefiles.

In most cases, any header and object files you add are going to be needed regardless of platform, and so should go in There are variables PLUGIN_SOURCES and PLUGIN_HEADERS near the top that can be extended with further headers and .c/.cpp files (the .o files will be deduced from the .c/.cpp names) or you can add .o files directly to PLUGIN_OBJECTS further down.

I hope that addresses your question!
Pages: 1 2 [3] 4 5 ... 10