Например TDA7294

Форум РадиоКот • Просмотр темы - Хочу сделать секвенсор, есть некоторые вопросы.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Пт апр 19, 2024 02:22:20

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 147 ]     ... , , , , 8
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Вт авг 29, 2017 13:52:32 
Друг Кота

Карма: 49
Рейтинг сообщений: 523
Зарегистрирован: Чт фев 20, 2014 18:57:55
Сообщений: 18474
Рейтинг сообщения: 0
Тут пишут что и WAV и даже Flac играет.

Угу, с wav вроде у первой версии только проблемы были, а я хотел как раз на ней типа магнитофона сделать для игрушки. Сэкономил, блин, не стал брать vs1053 - дороже была, так и забросил в ящик :))

_________________
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Чт сен 14, 2017 21:57:58 
Генеральный секретарь МЯУ
Аватар пользователя

Карма: 69
Рейтинг сообщений: 22
Зарегистрирован: Пн сен 03, 2007 18:24:27
Сообщений: 18416
Откуда: Россия. Омск.
Рейтинг сообщения: 0
Вот тут отправляется от 0 до 4х нот и делается пауза (пауза и окончание последовательности определяется по самой первой из них). Там везде 0 в маске - надо поставить 1 на нужных нотах.

Спойлер
Код:
#define pot A0 // Потенциометр на вход A0

// структура нот
struct Notes {
  byte pitch;   //нота ?
  byte delay;   //базовый темп ?
  byte enabled; //играем/не играем
};

// массив нот типа Notes
// парами - нота, пауза (базовая)
// если нота 0 - конец последовательности
Notes notes[4][10] = {1,1,0, 2,1,0, 3,1,0, 4,1,0, 1,0,0, 3,1,0, 2,1,0, 3,1,0, 4,1,0, 0,0,0,
                      1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 1,1,0, 0,0,0,
                      2,1,0, 2,1,0, 2,1,0, 2,1,0, 2,1,0, 2,1,0, 2,1,0, 2,1,0, 2,1,0, 0,0,0,
                      3,1,0, 3,1,0, 3,1,0, 3,1,0, 3,1,0, 3,1,0, 3,1,0, 3,1,0, 3,1,0, 0,0,0};
// позиция в последовательности
int pos = 0;

void setup() {
  pinMode(pot, INPUT);
  Serial1.begin(31250);
}

void loop() {
float x;
// Задаётся коэффициент длительность паузы между нотами
x = float(analogRead(pot)+100) / 4.0;

// если доиграли (по первой последовательности) - перескакиваем в начало
if (notes[0][pos].pitch == 0) pos = 0;

// пробегаем по всем 4м последовательностям
for (int i=0;i < 4;i++) {
  // отправляем очередную ноту если есть признак включения
  if (notes[i][pos].enabled > 0) noteOn(0x90, notes[i][pos].pitch, 0x45);
}
delay(x * notes[0][pos].delay); // задержка 
 
//переходим к следующей ноте
pos = pos + 1;
}

void noteOn(int cmd, int pitch, int velocity)
{
  Serial1.write(cmd);
  Serial1.write(pitch);
  Serial1.write(velocity);
}

А вот как сделать такое-же, но чтобы команды миди посылались не через Serial, а через ISP?
Есть у меня плата на чипе VS1053b (про которую писал чуть выше), у неё чтобы заработал мидивход, надо чтобы на определённой ноге чипа при включении был высокий уровень. Но где взять этот уровень, я пока так и не нашёл (припаиваться мелкой соплёй к ноге чипа напрямую я не хочу). Пробовал готовые коды (там были примеры, как делать), у меня работал MP3 плеер (пример с аудиоплеером) и в примере с миди у меня проигрывались ударные (просто как-бы перебор барабанов по порядку, но очень тихо как-то было, наверное просто надо velocity побольше сделать). Это всё работало не через мидивход, а именно через ISP. Но я не понял, как это сделать. В примерах использовалась библиотека, специально для этой платы, там подключались разные файлы, в которых как я понял были отсылки и на другие файлы, в общем слишком запутано что и где там надо смотреть.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Пт сен 15, 2017 08:57:41 
Друг Кота

Карма: 49
Рейтинг сообщений: 523
Зарегистрирован: Чт фев 20, 2014 18:57:55
Сообщений: 18474
Рейтинг сообщения: 0
Если по даташиту непонятно - лучше поискать подходящую библиотеку. Бывает довольно длинный и замороченный код, а самому разбираться месяцами можно если не заниматься только этим.

_________________
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Пт сен 15, 2017 10:25:35 
Генеральный секретарь МЯУ
Аватар пользователя

Карма: 69
Рейтинг сообщений: 22
Зарегистрирован: Пн сен 03, 2007 18:24:27
Сообщений: 18416
Откуда: Россия. Омск.
Рейтинг сообщения: 0
Библиотека есть, специальная для этой платы. Но там куча файлов, в файлах коды небольшие, но как я понял, эти файлы ссылаются ещё и на другие файлы и что там где за что отвечает - хрен поймёшь :(


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Пт сен 15, 2017 10:39:50 
Друг Кота

Карма: 49
Рейтинг сообщений: 523
Зарегистрирован: Чт фев 20, 2014 18:57:55
Сообщений: 18474
Рейтинг сообщения: 0
Ну это да - надо найти основной .h и глянуть какие там функции, как вызывать. Потом найти нужные функции в коде. Так потихоньку распутать это все. Может быть сложно, может быть не очень - зависит от девайса и кодописателя. Но сначала примеры попробовать, конечно. Если есть проигрывание midi файла - значит с этой функции (которая в коде примера вызывается) и начать, отделить чтение файла от отправки в VS1053b и т.д. ... Хотя это штука сложная (vs), возможно она сама разбирает midi файл, а не получает отдельные команды с ардуины, даже скорее всего так.

_________________
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Пт сен 15, 2017 10:46:04 
Генеральный секретарь МЯУ
Аватар пользователя

Карма: 69
Рейтинг сообщений: 22
Зарегистрирован: Пн сен 03, 2007 18:24:27
Сообщений: 18416
Откуда: Россия. Омск.
Рейтинг сообщения: 0
Morroc писал(а):
Если есть проигрывание midi файла

Оно вроде как есть, но проигрывается там не мидифайл, а из скетча посылаются команды, какую ноту воспроизводить. Но вот где эти команды находятся, хрен его знает.
Например вот так выглядит код из примера:
Спойлер
Код:
/*
 midiDemoPlayer
 This example shows how to play MIDI.
 */

#include <SPI.h>
#include <SD.h>
#include <MusicPlayer.h>

MusicPlayer player;

void setup()
{
  Serial.begin(115200);
  player.beginMidi();
}

void loop()
{
  player.midiDemoPlayer();
}

А вот так выглядит код файла MusicPlayer.h
Спойлер
Код:
/*
 * MusicPlayer.h
 * A library for MusicShield
 *
 * Copyright (c) 2015 waveshare.net
 * Website    : waveshare.net
 * Author      :still falling leaves
 * Create Time: May 2015
 * Change Log :
 *
 * The MIT License (MIT)
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

#ifndef MUSICPLAYER_H
#define MUSICPLAYER_H

#include <SD.h>
#include "Pins_config.h"
#include "vs10xx.h"
#include  <avr/pgmspace.h>

#define MaxVol 250
#define MinVol 100




/** Playing states definations. */
volatile typedef enum {
  PS_IDLE = 0,      // Player idle                  
  PS_PLAY,         // Start to player                                   
  PS_PAUSE,        //Pause play                                         
  PS_RECORDING,    //Recording states                                   
} playingstatetype;

/** Control states definations. */
volatile typedef enum
{
  CS_EMPTY = 0,      // Have no control                                     
  CS_PLAYPAUSE,      // Play/pause button pressed                     
  CS_RECORDING,      // Play/pause button long pressed               
  CS_UP,             // Up button pressed                                                         
  CS_DOWN,           // Down button pressed                                                       
  CS_NEXT,           // Right button pressed                                                     
  CS_PREV,           // Left button pressed                                                       
} ctrlStatetype;

typedef struct songDesc
{
  char name[13];
  uint16_t index;
}songtype;



/************** key Internal*********************************/
volatile typedef enum
{
  KS_IDLE,KS_PRESS,
}keyState_t;

class key
{
public:
  void setKey(unsigned char io,unsigned char return_value);
  void scanKey(void);

private:
  unsigned char _io;
  unsigned char  _return_value;
  unsigned char _key_st;
  unsigned int  _keycnt;
};



/*****************class for the music player*******************/
class MusicPlayer
{
public:
 
 
  void begin(void);
  void play();
  void recording(char *recfile);

  //for Midi Player
  void beginMidi(void);
  void midiDemoPlayer(void);      
 
 

private:
  int Vol = 40;
  char songIndex;
  char MaxSong;
 
  void initIO(void);
  void initSD(void);
  void initTimer1();

  //for Midi Player
  void midiWriteData(char cmd, char high, char low);
  void midiNoteOn(char channel, char note, char rate);
  void midiNoteOff(char channel, char note, char rate);
  void midiSendByte(char data);
};



#endif

В этих обоих кодах я не вижу, где отсылаются ноты для проигрывания.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Хочу сделать секвенсор, есть некоторые вопросы.
СообщениеДобавлено: Пт сен 15, 2017 10:51:16 
Друг Кота

Карма: 49
Рейтинг сообщений: 523
Зарегистрирован: Чт фев 20, 2014 18:57:55
Сообщений: 18474
Рейтинг сообщения: 0
Где то в musicplayer.c (или .cpp) должен быть и код этой функции midiDemoPlayer - может там где то и команды.

_________________
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 147 ]     ... , , , , 8

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Сергеj, ssc и гости: 50


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y