Jump to content
View in the app

A better way to browse. Learn more.

Opusmodus

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Sample Slicing, Chopping and Breakbeats

Featured Replies

Dear Friends,

With the audio tools in windows can we make some breakbeats, like chopping audio files, like beat slicing and starting in different parts of the audio file, like the video below (serato sample plugin), and also sync accurately with midi parts in Opusmodus ?

All the best !

Julio

SOME HISTORY

Here are some breakbeats (amen sample)

If possible, would be great to includ a sample of the amen beat inside the documentation with an example of breakbeat.

This function can also serve to launch samples of any nature for electroacoustic or mixed music.

  • Author

FIND IT

(make-mix
'mixA
'(:audio "E:/Opmo_win_work/opusmodus/Opusmodus/Media/Audio/cw_amen10_135.wav"
:segments ((:start 0.3 :len 2.0)
(:start 1.3 :len 2.0))))
(play-mix 'mixA)

A problem in windows machine examples is that you have to reverse all backslash symbols from this "\" to "/' .

In windows It only works with right angled slashes, like this ////

A good idea would be a sample to BPM, BPM to length, ms to bpm, etc calculator to slice the audio / beats according to BPM, musical time, and quantize in length.

For example, in 60 BPM, each 1/16 length is equal to 240 bpm or 250 ms.

And a function to random beats musically.

Best

@JulioHerrlein I once created an OpenMusic patch that would cut and shuffle a voice object. The way I went about it could be translated to Opusmodus without much trouble. Who knows, there might be an easier way to accomplish it in Opusmodus.

Here’s the general algorithm:

  1. Get the resolution of the slicing grid (1/16 and 1/8 yielded typical breakbeat styles; 1/12, 1/24, 1/20 yielded some interesting chaos)

  2. Get the sequence of slices as a list of integers.

  3. Rewrite the voice object with the slicing grid resolution as the meter. For example, a 2-measure voice object in 4/4 would be rewritten as 16 measure of 1/8. At this point, it would sound no different than the original.

  4. Strip ties over the new measure boundaries.

  5. Using the list of integers from #2, extract and assemble the slices, using the integers as indices for the sliced voice object’s measures.

  6. Optionally tie any repeated pitches.

  7. Rewrite in the original meter.

My experiments were with fairly simple voice objects. The Amen break, of course, but some simple melodies as well. Got some really interesting results from very simple voice objects. There were no transformations performed on any of the slices, but one could easily imagine having some slices be transposed, or have their durations halved or doubled, or have the slice reversed (only makes sense for slice resolutions that allow for multiple onsets within a slice), or some combination of any of them. I think this extension of the idea would be far easier to implement in Opusmodus.

Cheers,

Jon

  • Author

Can be done with

(bar-to-sec '(w) :bpm 135)

(make-mix
'mixA
'(:audio "E:/Opmo_win_work/opusmodus/Opusmodus/Media/Audio/cw_amen10_135.wav"
:segments
((:start 0.0 :len 1.778)
(:start 0.0 :len 1.778)
(:start 0.0 :len 1.778)
; (:start 1.3 :len 2.0)
)))

(play-mix 'mixA)

Thanks a lot, Jon !!

cw_amen10_135.wav - name it that way

(make-mix
'mixA
'(:audio "E:/Opmo_win_work/opusmodus/Opusmodus/Media/Audio/cw_amen10_135.wav"
:segments
(
(:start 0.0 :len (bar-to-sec '(w) :bpm 135))
(:start 0.0 :len (bar-to-sec '(h) :bpm 135))
(:start 0.0 :len (bar-to-sec '(h) :bpm 135))
(:start 0.0 :len (bar-to-sec '(s) :bpm 135))
(:start 0.0 :len (bar-to-sec '(e.) :bpm 135))
(:start 0.0 :len (bar-to-sec '(e.) :bpm 135))
(:start 0.0 :len (bar-to-sec '(e.) :bpm 135))
(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(e.) :bpm 135))
(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(e.) :bpm 135))
(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(e.) :bpm 135))
(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(e.) :bpm 135))
(:start (bar-to-sec '(s) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(s) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(s) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(s) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
; (:start 1.3 :len 2.0)
)))
(bar-to-sec '(s) :bpm 135)
(play-mix 'mixA)
  • Author

The function

(make-mix-segments
:start '(0.0 1.0 2.0)
:len '(0.5 0.5 1.0)
:fade-in 0.2
:fade-out '(0.2 0.2 0.5)
:amp '(1.0 0.8 0.9))

Appear in black and won't work in windows

image.png

Dear Jon,

We can think something like a "audio-dictum" in the way you described.

Best !

Julio

  • Author

Some Squarepusher fun

(make-mix
'mixA
'(:audio "E:/Opmo_win_work/opusmodus/Opusmodus/Media/Audio/cw_amen10_135.wav"
:segments
(
(:start 0.0 :len (bar-to-sec '(w) :bpm 135))
(:start 0.0 :len (bar-to-sec '(h) :bpm 135))
(:start 0.0 :len (bar-to-sec '(h) :bpm 135))
(:start 0.0 :len (bar-to-sec '(s) :bpm 135))
(:start 0.0 :len (bar-to-sec '(e.) :bpm 135))
(:start 0.0 :len (bar-to-sec '(e.) :bpm 135))
(:start 0.0 :len (bar-to-sec '(e.) :bpm 135))
;(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(e.) :bpm 135))
;(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(e.) :bpm 135))
;(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(e.) :bpm 135))
;(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(e.) :bpm 135))
;(:start (bar-to-sec '(s) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
;(:start 0.0 :len (bar-to-sec '(w) :bpm 135))
;(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(e.) :bpm 135))
;(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(e) :bpm 135))
;(:start (bar-to-sec '(q) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
;(:start (bar-to-sec '(q) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
;(:start (bar-to-sec '(q) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
;(:start (bar-to-sec '(q) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
;(:start (bar-to-sec '(q) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
;(:start (bar-to-sec '(qe) :bpm 135) :len (bar-to-sec '(e) :bpm 135))
;(:start (bar-to-sec '(qe) :bpm 135) :len (bar-to-sec '(e) :bpm 135))
;(:start (bar-to-sec '(qe) :bpm 135) :len (bar-to-sec '(e) :bpm 135))
;(:start (bar-to-sec '(qe) :bpm 135) :len (bar-to-sec '(e) :bpm 135))
;(:start (bar-to-sec '(0) :bpm 135) :len (bar-to-sec '(e.) :bpm 135))
;(:start (bar-to-sec '(0) :bpm 135) :len (bar-to-sec '(e.) :bpm 135))
;(:start (bar-to-sec '(0) :bpm 135) :len (bar-to-sec '(e.) :bpm 135))
;(:start (bar-to-sec '(0) :bpm 135) :len (bar-to-sec '(e.) :bpm 135))
(:start (bar-to-sec '(0) :bpm 135) :len (bar-to-sec '(w) :bpm 135))
(:start (bar-to-sec '(0) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(0) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(0) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(0) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(s) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(s) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(s) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(s) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(q) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(q) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(q) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(q) :bpm 135) :len (bar-to-sec '(q) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e.) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
(:start (bar-to-sec '(e) :bpm 135) :len (bar-to-sec '(s) :bpm 135))
; (:start 1.3 :len 2.0)
)))
(play-mix 'mixA)

Dear Janusz,

Can we make a play-mix many different tracks playing at the same time, like a ps function with audios each one processing one different sample ?

How to save the play-mix to a file on disk ?

Best

Create an account or sign in to comment


Copyright © 2014-2026 Opusmodus™ Ltd. All rights reserved.
Product features, specifications, system requirements and availability are subject to change without notice.
Opusmodus, the Opusmodus logo, and other Opusmodus trademarks are either registered trademarks or trademarks of Opusmodus Ltd.
All other trademarks contained herein are the property of their respective owners.

Powered by Invision Community

Important Information

Terms of Use Privacy Policy

Account

Navigation

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.