Re: Scheme function to force any noteEvent to a skipEvent
On Mon 04 Apr 2016 at 17:47:03 (+), Joseph Chrestien wrote: > Thanks David and Simon for your kind help. I used David's solution and it > works brilliantly. Very nice. I didn't know of this NullVoice context, I'll > take a look at it. My view would be to use David's solution where you have a preexisting part already coded, but to use Simon's where you're writing a score from scratch. It clarifies the structure of the score, and the "aux" part is likely to be much less bulky to include in each and every midi score than, say, a silenced florid soprano part. I don't know if you write homophonic music with shared words (like in a US-style hymn book) but NullVoice is almost unavoidable for setting lyrics unless the rhythms are identical in every voice. Cheers, David. ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Scheme function to force any noteEvent to a skipEvent
Thanks David and Simon for your kind help. I used David's solution and it works brilliantly. Very nice. I didn't know of this NullVoice context, I'll take a look at it. Nice day to all of you Joseph On Mon, Apr 4, 2016 at 7:57 AM -0700, "Simon Albrecht"> wrote: Hi Joseph, a more common approach to the situation is using a separate music variable containing information common to all parts. E.g. % aux = { \tempo 4 = 100 s1 \bar "|." } musicOne = { e'1 } musicTwo = { c'1 } \score { << \new Staff << \new NullVoice \aux \new Voice \musicOne >> \new Staff \new Voice \musicTwo >> \layout {} } \score { \new Staff << \new NullVoice \aux \new Voice \musicOne >> \midi {} } %% HTH, Simon On 04.04.2016 13:43, Joseph Chrestien wrote: > > Hi all, > > is it possible to change all notes in a voice to skips through a > function ? > > E.g. ` \silence c4 \tempo 4=100 f8\p g8 ` would be compiled as ` s4 \tempo > 4=100 s8\p s8 `. Note all other events would stay the same. > > Below are the context and minimal code. > > Thanks! > Jo Chrestien > > > > > - > > PS. Context : I am editing a choral score with multiple MIDI > outputs (4 voice-by-voice MIDI outputs and 1 polyphonic output). My > goal is > to tweak the tempo in all MIDI outputs with only one hand entry. > > So far I indicated (invisible) tempo changes in only one of the > voices. This > works like a charm for the polyphonic output, but when individual > voices are > printed to MIDI it logically does not affect their tempo. > > So I want to generate a silent clone of that "tempo-adapted" voice and > include > > it in the split MIDI output, as a new voice. > > Is there some kind of \silence function I could call to change tempo in > split MIDI? This function would force all note events of \sopranoMusic to > become skip events (e.g. c4 --> s4). > > -- > PPS. Minimal code: > > ``` > \version "2.18.2" > > sopranoMusic = \relative c'' { > \cadenzaOn > % here are the invisible tempo marks that I don't want to copy > manually in > other voices > \set Score.tempoHideNote = ##t > \tempo 4=200 > c\breve g\breve > \tempo 4=60 > a8 b8 c4 > } > > altoMusic = \relative c' { > \cadenzaOn > e\breve e\breve > f8 g8 e2 > } > > silence = #(define-music-function (parser location my-music) >(ly:music?) > ;change everything to silence > ;... >my-music) > > > % alto-only MIDI output > \score { > \new Staff << > \new Voice = "1" { \silence \sopranoMusic } > > % just to get the tempo modifications : no music should be played > \new Voice = "2" { \altoMusic } % > >> > \midi{} > } > > ``` > > > > ___ > lilypond-user mailing list > lilypond-user@gnu.org > https://lists.gnu.org/mailman/listinfo/lilypond-user ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Scheme function to force any noteEvent to a skipEvent
Hi Joseph, a more common approach to the situation is using a separate music variable containing information common to all parts. E.g. % aux = { \tempo 4 = 100 s1 \bar "|." } musicOne = { e'1 } musicTwo = { c'1 } \score { << \new Staff << \new NullVoice \aux \new Voice \musicOne >> \new Staff \new Voice \musicTwo >> \layout {} } \score { \new Staff << \new NullVoice \aux \new Voice \musicOne >> \midi {} } %% HTH, Simon On 04.04.2016 13:43, Joseph Chrestien wrote: Hi all, is it possible to change all notes in a voice to skips through a function ? E.g. ` \silence c4 \tempo 4=100 f8\p g8 ` would be compiled as ` s4 \tempo 4=100 s8\p s8 `. Note all other events would stay the same. Below are the context and minimal code. Thanks! Jo Chrestien - PS. Context : I am editing a choral score with multiple MIDI outputs (4 voice-by-voice MIDI outputs and 1 polyphonic output). My goal is to tweak the tempo in all MIDI outputs with only one hand entry. So far I indicated (invisible) tempo changes in only one of the voices. This works like a charm for the polyphonic output, but when individual voices are printed to MIDI it logically does not affect their tempo. So I want to generate a silent clone of that "tempo-adapted" voice and include it in the split MIDI output, as a new voice. Is there some kind of \silence function I could call to change tempo in split MIDI? This function would force all note events of \sopranoMusic to become skip events (e.g. c4 --> s4). -- PPS. Minimal code: ``` \version "2.18.2" sopranoMusic = \relative c'' { \cadenzaOn % here are the invisible tempo marks that I don't want to copy manually in other voices \set Score.tempoHideNote = ##t \tempo 4=200 c\breve g\breve \tempo 4=60 a8 b8 c4 } altoMusic = \relative c' { \cadenzaOn e\breve e\breve f8 g8 e2 } silence = #(define-music-function (parser location my-music) (ly:music?) ;change everything to silence ;... my-music) % alto-only MIDI output \score { \new Staff << \new Voice = "1" { \silence \sopranoMusic } % just to get the tempo modifications : no music should be played \new Voice = "2" { \altoMusic } % >> \midi{} } ``` ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: Scheme function to force any noteEvent to a skipEvent
Joseph Chrestien <_...@live.com> writes: > Hi all, > > is it possible to change all notes in a voice to skips through a function ? > > E.g. ` \silence c4 \tempo 4=100 f8\p g8 ` would be compiled as ` s4 \tempo > 4=100 s8\p s8 `. Note all other events would stay the same. \version "2.19.32" silence = #(define-music-function (arg) (ly:music?) (map-some-music (lambda (m) (and (music-is-of-type? m 'note-event) (make-music 'SkipEvent m))) arg)) \displayLilyMusic \silence { c4 \tempo 4=100 f8\p g8 } For version 2.18 you'll likely have to write (parser location arg) instead of just (arg) but I think the rest would work fine. -- David Kastrup ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Scheme function to force any noteEvent to a skipEvent
Hi all, is it possible to change all notes in a voice to skips through a function ? E.g. ` \silence c4 \tempo 4=100 f8\p g8 ` would be compiled as ` s4 \tempo 4=100 s8\p s8 `. Note all other events would stay the same. Below are the context and minimal code. Thanks! Jo Chrestien - PS. Context : I am editing a choral score with multiple MIDI outputs (4 voice-by-voice MIDI outputs and 1 polyphonic output). My goal is to tweak the tempo in all MIDI outputs with only one hand entry. So far I indicated (invisible) tempo changes in only one of the voices. This works like a charm for the polyphonic output, but when individual voices are printed to MIDI it logically does not affect their tempo. So I want to generate a silent clone of that "tempo-adapted" voice and include it in the split MIDI output, as a new voice. Is there some kind of \silence function I could call to change tempo in split MIDI? This function would force all note events of \sopranoMusic to become skip events (e.g. c4 --> s4). -- PPS. Minimal code: ``` \version "2.18.2" sopranoMusic = \relative c'' { \cadenzaOn % here are the invisible tempo marks that I don't want to copy manually in other voices \set Score.tempoHideNote = ##t \tempo 4=200 c\breve g\breve \tempo 4=60 a8 b8 c4 } altoMusic = \relative c' { \cadenzaOn e\breve e\breve f8 g8 e2 } silence = #(define-music-function (parser location my-music) (ly:music?) ;change everything to silence ;... my-music) % alto-only MIDI output \score { \new Staff << \new Voice = "1" { \silence \sopranoMusic } % just to get the tempo modifications : no music should be played \new Voice = "2" { \altoMusic } % >> \midi{} } ``` ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user