электронная музыка, библиотека Mozzi
- Войдите на сайт для отправки комментариев
Пытаюсь повторить проект https://habr.com/ru/company/skillfactory/blog/542858/
Скачал код библиотеки с гитхаба https://github.com/sensorium/Mozzi
код программы https://github.com/techno-womble/Audiophonic-Workbench/blob/main/APW-Sketch.ino
// AudioPhonic WorkBench Sketch. // // Simulate three vintage style test oscillators // with amplitude and frequency cross modulation // // *************************************** IMPORTANT *********************************************** // // This sketch requires mozzi_config.h to be // be changed from STANDARD mode to HIFI. // // In mozzi_config.h, // change // //#define AUDIO_MODE STANDARD // #define AUDIO_MODE STANDARD_PLUS // //#define AUDIO_MODE HIFI // to // //#define AUDIO_MODE STANDARD // //#define AUDIO_MODE STANDARD_PLUS // #define AUDIO_MODE HIFI // // John Potter (technoWomble), 2021 CC by-nc-sa. // #include <MozziGuts.h> #include <Oscil.h> #include <tables/sin2048_int8.h> #define AUDIO_RATE 32768 #define CONTROL_RATE 128 Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> osc1(SIN2048_DATA); Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> osc2(SIN2048_DATA); Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> osc3(SIN2048_DATA); const int vr1Pin = A0; const int vr2Pin = A1; const int vr3Pin = A2; const int vr4Pin = A3; const int vr5Pin = A4; const int vr6Pin = A5; const int vr7Pin = A6; const int vr8Pin = A7; const int sw1Pin = 2; const int sw2Pin = 3; int osc1Freq; int osc2Freq; int osc3Freq; int osc1Level; int osc2Level; int osc3Level; int osc2FMVal; int osc3FMVal; int osc2AMVal; int osc3AMVal; void setup(){ pinMode(sw1Pin, INPUT_PULLUP); pinMode(sw2Pin, INPUT_PULLUP); startMozzi(CONTROL_RATE); osc1.setPhase(random(2047)); // don't want the oscillators locked in phase osc2.setPhase(random(2047)); osc3.setPhase(random(2047)); } void updateControl(){ osc2FMVal = 0; osc3FMVal = 0; osc2AMVal = 0; osc3AMVal = 0; osc1Freq = ((mozziAnalogRead (vr1Pin)) << 3) + 128; // Osc1 Pitch, osc2Freq = ((mozziAnalogRead (vr2Pin)) << 3) + 128; // Osc2 Pitch osc3Freq = ((mozziAnalogRead (vr3Pin)) << 3) + 128; // Osc3 Pitch osc1Level = mozziAnalogRead(vr4Pin) >> 2; // Osc1 Volume, 0 - 255 osc2Level = mozziAnalogRead(vr5Pin) >> 2; // Osc2 Volume osc3Level = mozziAnalogRead(vr6Pin) >> 2; // Osc3 Volume int pot7Val = mozziAnalogRead(vr7Pin); // OSC2 MODULATION if (pot7Val <= 512) {osc2FMVal = (512 - pot7Val);} else // Osc2 FM amount, 0 to 511 {osc2AMVal = (pot7Val- 512) >> 2 ;} // Osc2 AM amount, 0 to 127 int pot8Val = mozziAnalogRead(vr8Pin); // OSC3 MODULATION if (pot8Val <= 512) {osc3FMVal = (512 - pot8Val);} else // Osc3 FM amount, 0 to 511 {osc3AMVal = (pot8Val- 512) >> 2;} // Osc3 AM amount, 0 to 127 if (digitalRead(sw1Pin)==0) {osc1Freq = osc1Freq >> 7;} // Osc1 high/low rate switch if (digitalRead(sw2Pin)==0) {osc2Freq = osc2Freq >> 7;} // Osc2 high/low rate switch osc1Freq = constrain(osc1Freq,1,8194); osc1.setFreq(osc1Freq); } int updateAudio(){ int osc1Val = osc1.next(); int osc2ModulatedFreq = (osc2Freq + ((osc1Val ) * (osc2FMVal >> 4))); // calculate Osc2 FM osc2ModulatedFreq = constrain(osc2ModulatedFreq,1,8194); osc2.setFreq(osc2ModulatedFreq); int osc2Val = osc2.next(); int osc2Trem = (osc1Val + 128L); // calculate Osc2 AM osc2Trem = 255 - ((osc2Trem * osc2AMVal) >> 7) ; osc2Val = (osc2Val * osc2Trem) >> 8; int osc3ModulatedFreq = (osc3Freq + ((osc2Val ) * (osc3FMVal >> 4))); // calculate Osc3 FM osc3ModulatedFreq = constrain(osc3ModulatedFreq,1,8194); osc3.setFreq(osc3ModulatedFreq); int osc3Val = osc3.next(); int osc3Trem = (osc2Val + 128); // calculate Osc2 AM osc3Trem = 255 - ((osc3Trem * osc3AMVal) >> 7) ; osc3Val = (osc3Val * osc3Trem) >> 8; int osc1Out = (osc1Val * osc1Level) >> 3; int osc2Out = (osc2Val * osc2Level) >> 3; // set each oscillator volume int osc3Out = (osc3Val * osc3Level) >> 3; return (osc1Out + osc2Out + osc3Out) >> 1; // mix and output } void loop(){ audioHook(); // required according to Mozzi docs }
однако после замены в библиотеки кода с
//#define AUDIO_MODE STANDARD #define AUDIO_MODE STANDARD_PLUS //#define AUDIO_MODE HIFI
на
//#define AUDIO_MODE STANDARD //#define AUDIO_MODE STANDARD_PLUS #define AUDIO_MODE HIFI
скетч перестает компилироваться и вываливается куча ошибок
In file included from E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/MozziGuts.h:210:0,
from E:\!Main Folder\PROJECT\Arduino\Mozzi\Audiophonic-Workbench-main\APW-Sketch\APW-Sketch.ino:24:
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h: In static member function 'static StereoOutput StereoOutput::fromNBit(uint8_t, int16_t, int16_t)':
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:48:37: error: 'AUDIO_BITS' was not declared in this scope
#define SCALE_AUDIO(x,bits) (bits > AUDIO_BITS ? (x) >> (bits - AUDIO_BITS) : (x) << (AUDIO_BITS - bits))
^
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:100:97: note: in expansion of macro 'SCALE_AUDIO'
static inline StereoOutput fromNBit(uint8_t bits, int16_t l, int16_t r) { return StereoOutput(SCALE_AUDIO(l, bits), SCALE_AUDIO(r, bits)); }
^~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:48:37: note: suggested alternative: 'AUDIO_BIAS'
#define SCALE_AUDIO(x,bits) (bits > AUDIO_BITS ? (x) >> (bits - AUDIO_BITS) : (x) << (AUDIO_BITS - bits))
^
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:100:97: note: in expansion of macro 'SCALE_AUDIO'
static inline StereoOutput fromNBit(uint8_t bits, int16_t l, int16_t r) { return StereoOutput(SCALE_AUDIO(l, bits), SCALE_AUDIO(r, bits)); }
^~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h: In static member function 'static StereoOutput StereoOutput::fromNBit(uint8_t, int32_t, int32_t)':
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:48:37: error: 'AUDIO_BITS' was not declared in this scope
#define SCALE_AUDIO(x,bits) (bits > AUDIO_BITS ? (x) >> (bits - AUDIO_BITS) : (x) << (AUDIO_BITS - bits))
^
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:102:97: note: in expansion of macro 'SCALE_AUDIO'
static inline StereoOutput fromNBit(uint8_t bits, int32_t l, int32_t r) { return StereoOutput(SCALE_AUDIO(l, bits), SCALE_AUDIO(r, bits)); }
^~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:48:37: note: suggested alternative: 'AUDIO_BIAS'
#define SCALE_AUDIO(x,bits) (bits > AUDIO_BITS ? (x) >> (bits - AUDIO_BITS) : (x) << (AUDIO_BITS - bits))
^
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:102:97: note: in expansion of macro 'SCALE_AUDIO'
static inline StereoOutput fromNBit(uint8_t bits, int32_t l, int32_t r) { return StereoOutput(SCALE_AUDIO(l, bits), SCALE_AUDIO(r, bits)); }
^~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h: In static member function 'static StereoOutput StereoOutput::fromAlmostNBit(uint8_t, int16_t, int16_t)':
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:48:37: error: 'AUDIO_BITS' was not declared in this scope
#define SCALE_AUDIO(x,bits) (bits > AUDIO_BITS ? (x) >> (bits - AUDIO_BITS) : (x) << (AUDIO_BITS - bits))
^
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:49:34: note: in expansion of macro 'SCALE_AUDIO'
#define SCALE_AUDIO_NEAR(x,bits) SCALE_AUDIO(x,bits)
^~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:108:103: note: in expansion of macro 'SCALE_AUDIO_NEAR'
static inline StereoOutput fromAlmostNBit(uint8_t bits, int16_t l, int16_t r) { return StereoOutput(SCALE_AUDIO_NEAR(l, bits), SCALE_AUDIO_NEAR(r, bits)); }
^~~~~~~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:48:37: note: suggested alternative: 'AUDIO_BIAS'
#define SCALE_AUDIO(x,bits) (bits > AUDIO_BITS ? (x) >> (bits - AUDIO_BITS) : (x) << (AUDIO_BITS - bits))
^
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:49:34: note: in expansion of macro 'SCALE_AUDIO'
#define SCALE_AUDIO_NEAR(x,bits) SCALE_AUDIO(x,bits)
^~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:108:103: note: in expansion of macro 'SCALE_AUDIO_NEAR'
static inline StereoOutput fromAlmostNBit(uint8_t bits, int16_t l, int16_t r) { return StereoOutput(SCALE_AUDIO_NEAR(l, bits), SCALE_AUDIO_NEAR(r, bits)); }
^~~~~~~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h: In static member function 'static StereoOutput StereoOutput::fromAlmostNBit(uint8_t, int32_t, int32_t)':
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:48:37: error: 'AUDIO_BITS' was not declared in this scope
#define SCALE_AUDIO(x,bits) (bits > AUDIO_BITS ? (x) >> (bits - AUDIO_BITS) : (x) << (AUDIO_BITS - bits))
^
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:49:34: note: in expansion of macro 'SCALE_AUDIO'
#define SCALE_AUDIO_NEAR(x,bits) SCALE_AUDIO(x,bits)
^~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:110:103: note: in expansion of macro 'SCALE_AUDIO_NEAR'
static inline StereoOutput fromAlmostNBit(uint8_t bits, int32_t l, int32_t r) { return StereoOutput(SCALE_AUDIO_NEAR(l, bits), SCALE_AUDIO_NEAR(r, bits)); }
^~~~~~~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:48:37: note: suggested alternative: 'AUDIO_BIAS'
#define SCALE_AUDIO(x,bits) (bits > AUDIO_BITS ? (x) >> (bits - AUDIO_BITS) : (x) << (AUDIO_BITS - bits))
^
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:49:34: note: in expansion of macro 'SCALE_AUDIO'
#define SCALE_AUDIO_NEAR(x,bits) SCALE_AUDIO(x,bits)
^~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:110:103: note: in expansion of macro 'SCALE_AUDIO_NEAR'
static inline StereoOutput fromAlmostNBit(uint8_t bits, int32_t l, int32_t r) { return StereoOutput(SCALE_AUDIO_NEAR(l, bits), SCALE_AUDIO_NEAR(r, bits)); }
^~~~~~~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h: In static member function 'static MonoOutput MonoOutput::fromNBit(uint8_t, int16_t)':
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:48:37: error: 'AUDIO_BITS' was not declared in this scope
#define SCALE_AUDIO(x,bits) (bits > AUDIO_BITS ? (x) >> (bits - AUDIO_BITS) : (x) << (AUDIO_BITS - bits))
^
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:149:82: note: in expansion of macro 'SCALE_AUDIO'
static inline MonoOutput fromNBit(uint8_t bits, int16_t l) { return MonoOutput(SCALE_AUDIO(l, bits)); }
^~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:48:37: note: suggested alternative: 'AUDIO_BIAS'
#define SCALE_AUDIO(x,bits) (bits > AUDIO_BITS ? (x) >> (bits - AUDIO_BITS) : (x) << (AUDIO_BITS - bits))
^
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:149:82: note: in expansion of macro 'SCALE_AUDIO'
static inline MonoOutput fromNBit(uint8_t bits, int16_t l) { return MonoOutput(SCALE_AUDIO(l, bits)); }
^~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h: In static member function 'static MonoOutput MonoOutput::fromNBit(uint8_t, int32_t)':
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:48:37: error: 'AUDIO_BITS' was not declared in this scope
#define SCALE_AUDIO(x,bits) (bits > AUDIO_BITS ? (x) >> (bits - AUDIO_BITS) : (x) << (AUDIO_BITS - bits))
^
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:151:82: note: in expansion of macro 'SCALE_AUDIO'
static inline MonoOutput fromNBit(uint8_t bits, int32_t l) { return MonoOutput(SCALE_AUDIO(l, bits)); }
^~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:48:37: note: suggested alternative: 'AUDIO_BIAS'
#define SCALE_AUDIO(x,bits) (bits > AUDIO_BITS ? (x) >> (bits - AUDIO_BITS) : (x) << (AUDIO_BITS - bits))
^
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:151:82: note: in expansion of macro 'SCALE_AUDIO'
static inline MonoOutput fromNBit(uint8_t bits, int32_t l) { return MonoOutput(SCALE_AUDIO(l, bits)); }
^~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h: In static member function 'static MonoOutput MonoOutput::fromAlmostNBit(uint8_t, int16_t)':
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:48:37: error: 'AUDIO_BITS' was not declared in this scope
#define SCALE_AUDIO(x,bits) (bits > AUDIO_BITS ? (x) >> (bits - AUDIO_BITS) : (x) << (AUDIO_BITS - bits))
^
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:49:34: note: in expansion of macro 'SCALE_AUDIO'
#define SCALE_AUDIO_NEAR(x,bits) SCALE_AUDIO(x,bits)
^~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:165:88: note: in expansion of macro 'SCALE_AUDIO_NEAR'
static inline MonoOutput fromAlmostNBit(uint8_t bits, int16_t l) { return MonoOutput(SCALE_AUDIO_NEAR(l, bits)); }
^~~~~~~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:48:37: note: suggested alternative: 'AUDIO_BIAS'
#define SCALE_AUDIO(x,bits) (bits > AUDIO_BITS ? (x) >> (bits - AUDIO_BITS) : (x) << (AUDIO_BITS - bits))
^
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:49:34: note: in expansion of macro 'SCALE_AUDIO'
#define SCALE_AUDIO_NEAR(x,bits) SCALE_AUDIO(x,bits)
^~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:165:88: note: in expansion of macro 'SCALE_AUDIO_NEAR'
static inline MonoOutput fromAlmostNBit(uint8_t bits, int16_t l) { return MonoOutput(SCALE_AUDIO_NEAR(l, bits)); }
^~~~~~~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h: In static member function 'static MonoOutput MonoOutput::fromAlmostNBit(uint8_t, int32_t)':
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:48:37: error: 'AUDIO_BITS' was not declared in this scope
#define SCALE_AUDIO(x,bits) (bits > AUDIO_BITS ? (x) >> (bits - AUDIO_BITS) : (x) << (AUDIO_BITS - bits))
^
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:49:34: note: in expansion of macro 'SCALE_AUDIO'
#define SCALE_AUDIO_NEAR(x,bits) SCALE_AUDIO(x,bits)
^~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:167:88: note: in expansion of macro 'SCALE_AUDIO_NEAR'
static inline MonoOutput fromAlmostNBit(uint8_t bits, int32_t l) { return MonoOutput(SCALE_AUDIO_NEAR(l, bits)); }
^~~~~~~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:48:37: note: suggested alternative: 'AUDIO_BIAS'
#define SCALE_AUDIO(x,bits) (bits > AUDIO_BITS ? (x) >> (bits - AUDIO_BITS) : (x) << (AUDIO_BITS - bits))
^
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:49:34: note: in expansion of macro 'SCALE_AUDIO'
#define SCALE_AUDIO_NEAR(x,bits) SCALE_AUDIO(x,bits)
^~~~~~~~~~~
E:\!Main Folder\PROJECT\Arduino Lib\libraries\Mozzi-master/AudioOutput.h:167:88: note: in expansion of macro 'SCALE_AUDIO_NEAR'
static inline MonoOutput fromAlmostNBit(uint8_t bits, int32_t l) { return MonoOutput(SCALE_AUDIO_NEAR(l, bits)); }
^~~~~~~~~~~~~~~~
exit status 1
Ошибка компиляции для платы Arduino Pro or Pro Mini.
может кто нибудь у себя закомпилить, и/или подсказать где ошибка кроется. поиск на форуме библиотеки не дал результата
А с какой целью в библиотечный код вносились изменения?
автор проекта, да и описание библиотеки содержит сведения, что возможно увеличить качество звука, для этого нужно одно раскомментировать другое закоментировать
Ну, в принципе, логично: если звук по качеству ниже всякой критики, то существенно улучшить его можно, полностью отключив.
Посмотрел я на список файлов библиотеки, их возраст составляет от 6 лет до менее месяца, т.е. библиотека интенсивно модифицируется. Вполне вероятно, та версия, что скачана Вами, сильно отличается от версии, скачанной techno-womble (автором скетча) .
Кстати, загляните к автору:
1. Он, похоже, отвечает на заданные вопросы (последний ответ 5 дней назад).
2. Вопрос относительно некомпилируемости библиотеки после изменений ему уже задали (правда, он еще не успел на него ответить).
тут дело однозначно в библиотеке, в коде скетча можно все строки закомментировать кроме вызова библиотеки и все равно ошибки сыпит
тут дело однозначно в библиотеке