2016-05-28 5 views
1

Есть ли функция или простой способ транспонировать поток к заданному ключу?music21 - Транспонирование потоков к заданному ключу

Я хочу использовать его в цикле, например, взять набор основных потоков и перенести все из них до C мажор (так что я могу сделать некоторые статистические работы с ними).

Все инструменты транспонирования, которые я видел, работают с интервалами или количеством тонов, а не с фиксированными клавишами. Это не должно быть так трудно написать свою функцию, но я полагаю, что это должно быть сделано ... Спасибо

ответ

1

Если s является Stream (например, как Score или Part), то s.transpose('P4') будет переместить его вверх Идеальный Четвертый и т. д. Если вы знаете ключ s как k майор, то i = interval.Interval(k, 'C') позволит вам сделать s.transpose(i), чтобы перейти от k к C. Если вы не знаете ключа s, то k = s.analyze('key') сделает довольно приличную работу (используя метод зондирующего тона Krumhansl). Все вместе.

from music21 import * 
for fn in filenameList: 
    s = converter.parse(fn) 
    k = s.analyze('key') 
    i = interval.Interval(k.tonic, pitch.Pitch('C')) 
    sNew = s.transpose(i) 
    # do something with sNew 

Это предполагает, что ваш кусок, вероятно, будет основным. Если нет, вы можете рассматривать его как параллельный майор (f-minor -> F-major) или найти в k.alternativeInterpretations лучший анализ основных ключей. Или переставьте его второстепенному, если он несовершеннолетний, и т. Д.

+1

Спасибо, Майкл. Я написал свой собственный код несколько дней назад (но он не работает нормально, так что, возможно, я должен попробовать это). Что касается основной/незначительной проблемы, я использую «анализ» перед транспонированием, поэтому сохраняю только основные или мелкие потоки. –

+1

Просто небольшое улучшение: код не работает, потому что «k» и «C» не являются объектами Note. Правильный способ может заменить «C» запиской. Примечание ('C') и получение объекта примечания из k. Например: tonic = note.Note (pitch = k.pitchFromDegree (1)) и использование «тоника» вместо «k» в интервале. –

+0

Спасибо! Исправлено (в примере) –

 Смежные вопросы

  • Нет связанных вопросов^_^