Форум: "Прочее";
Текущий архив: 2015.12.20;
Скачать: [xml.tar.bz2];
ВнизMidi 2 Beep-код Найти похожие ветки
← →
Дмитрий С © (2015-02-05 18:30) [0]Кто-нибудь встречал преобразователь Midi файла (одной из его дорожек) в код из beep и sleep ?
← →
Kilkennycat © (2015-02-05 20:13) [1]перегони миди в ваф, ваф это практически бип-слип
← →
brother © (2015-02-05 20:18) [2]ну, если в дорожке нет аккордов, то че бы нет? думаю чтение из миди реализовать не сложно, а далее вообще все просто...)
← →
Kerk © (2015-02-05 20:33) [3]Beep не работает давно...
← →
Дмитрий С © (2015-02-05 22:48) [4]
> Beep не работает давно...
Работает в w8.1 у меня, только щелкает что-то. Да и мне для мк в итоге надо.
> brother
Изучаю вот по вике :)
← →
Kilkennycat © (2015-02-05 22:50) [5]
> для мк в итоге надо
там pwm есть для этих целей. в подавляющем большинстве мк.
← →
Дмитрий С © (2015-02-05 23:05) [6]
> Kilkennycat
Им и воспользуюсь) алгоритм на винде отлаживаю.
← →
Германн © (2015-02-06 01:57) [7]
> Дмитрий С © (05.02.15 23:05) [6]
>
>
> > Kilkennycat
>
> Им и воспользуюсь) алгоритм на винде отлаживаю.
>
Как можно отлаживать алгоритм не видя (точнее не слыша) результата?
Отлаживать алгоритм на самом мк религия запрещает?
← →
Inovet © (2015-02-06 03:22) [8]Может, правильнее будет попросить кого, из музыкально образованных, чтобы для этой мелодии назвали ноты с их длительностями и паузами между ними? Так сказать, в разовом случае. И в нём же (разовом случае) - загрузить в любой МИДИ редактор, да и содрать оттуда.
← →
KSergey © (2015-02-06 09:29) [9]А в самом деле - что за задача-то? и какого плата миди-файл?
Это разово конкретный мидик надо преобразовать или постоянно-периодически?
← →
Dimka Maslov © (2015-02-06 11:18) [10]
> Kerk © (05.02.15 20:33) [3]
>
> Beep не работает давно...
Вроде я читал, что его сначала убрали вовсе, а потом сделали так, чтобы звук шёл не на внутренний динамик компа, а на звуковую плату. В этом случае преобразование midi в бип-слип (правильное) фактически приведёт к его воспроизведению "инструментом" SqrWave без множественных дорожек, аккордов и проч. радости.
← →
Дмитрий С © (2015-02-06 12:10) [11]У меня сложилось впечатление, что я из пушки по воробьям. Мне нужна была одна мелодия (В траве сидел кузнечик) и моей нотной грамотности вкупе с викой хватило "преобразовать" ее вручную. С интервалами в припеве напутал, кажется, но не критично, звучит нормально.
вот пример:procedure TForm1.Button1Click(Sender: TObject);
const
// a b c d e f g h i j k l m
// do do# re re# mi fa fa# so so# la la# si 4 do
Freqs1: array[0..12] of Integer = (262, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494, 523);
Song = "4jejejii.ieieijj.jejejii.ieieij..jll8lll4mm8mmm4mljijj.jll8lll4mm8mmm4mljij..." ;
L = 220;
var
I, J, N: Integer;
M: Integer;
begin
Windows.Beep(1, 2000); // включение звуковой карты (можно убрать)
M := 4;
for J := 0 to 4 do
for I := 1 to Length(Song) do
begin
if Song[I] = "." then
begin
Windows.Beep(20, (L) * 4 div M);
end
else
if Song[I] in ["1".."9"] then
begin
M := Ord(Song[I]) - Ord("0");
end
else
begin
N := Ord(Song[I]) - Ord("a");
if N <= 0 then
Continue;
Windows.Beep(Freqs1[N-1], L * 4 div M);
end;
end;
end;
← →
Дмитрий С © (2015-02-06 12:15) [12]Блин, я теперь себе хочу эту мелодию на рингтон:) Как? :))
← →
SOFT_FOR_YOU © (2015-02-06 12:38) [13]Мне понравилось :)
← →
MonoLife © (2015-02-06 12:41) [14]прикольно! Помню, давным-давно, на фоксе 2.0 писал бипом мелодию при этом по экрану еще и паровозик бегал с вагонами:) жаль исходники так на 286-ом и остались
← →
Дмитрий С © (2015-02-06 13:33) [15]Кстати, ошибка в строке
Windows.Beep(Freqs1[N-1], L * 4 div M);
Из-за чего вся мелодия на пол-тона ниже получилась:)
← →
Dimka Maslov © (2015-02-06 14:50) [16]
> Блин, я теперь себе хочу эту мелодию на рингтон:) Как? :
> ))
Вот с этого и надо начинать. Современные телефоны спокойно воспроизводят midi файлы. Если нет, то нужен midi - редактор (любой, но советую MidiSoft Studio 95, но работает он только на виртуальной машине Windows 98). Мелодия там воспроизводится, записывается чем-то вроде SoundForge, записывается в mp3шечку и наступает счастье.
← →
Дмитрий С © (2015-02-06 15:00) [17]
> Вот с этого и надо начинать.
Ну это все таки не главная задача, чтобы с нее начинать. Сопутствующая.
← →
Inovet © (2015-02-06 18:15) [18]Всё равно ФАЭМИ круче
http://www.youtube.com/watch?v=wudqDyxUnnI
← →
Дмитрий С © (2015-02-06 18:57) [19]
> Inovet © (06.02.15 18:15) [18]
Ерунда какая-то
← →
Inovet © (2015-02-06 19:23) [20]> [19] Дмитрий С © (06.02.15 18:57)
> Ерунда какая-то
Ну не скажи, найди ещё один синтезатор, чтобы её уделал.
← →
Kilkennycat © (2015-02-07 05:13) [21]была у меня Фаэми... классная вещь!
← →
Дмитрий С © (2015-02-08 11:38) [22]Открытие дня. Pwm не годится для извлечения звуков :)
← →
Kilkennycat © (2015-02-08 12:04) [23]Мартышка к старости слаба глазами стала;
А у людей она слыхала,
Что это зло еще не так большой руки:
Лишь стоит завести Очки.
Очков с полдюжины себе она достала;
Вертит Очками так и сяк:
То к темю их прижмет, то их на хвост нанижет,
То их понюхает, то их полижет;
Очки не действуют никак.
"Тьфу пропасть! — говорит она, — и тот дурак,
Кто слушает людских всех врак:
Всё про Очки лишь мне налгали;
А проку на-волос нет в них".
Мартышка тут с досады и с печали
О камень так хватила их,
Что только брызги засверкали.
К несчастью, то ж бывает у людей:
Как ни полезна вещь, — цены не зная ей,
Невежда про нее свой толк все к худу клонит;
А ежели невежда познатней,
Так он ее еще и гонит.
И.А. Крылов. 1812 год.
← →
Kilkennycat © (2015-02-08 12:09) [24]http://www.pic24.ru/doku.php/osa/ref/appendix/quartet
← →
Inovet © (2015-02-08 14:45) [25]> [22] Дмитрий С © (08.02.15 11:38)
> Pwm не годится для извлечения звуков
Через beep и sleep? В общем да.
← →
Дмитрий С © (2015-02-08 20:44) [26]
> Kilkennycat © (08.02.15 12:09) [24]
Мне такое и не снилось.
Кажется, я понял принцип. Попробую то же самое сделать на атмеге.
← →
Kilkennycat © (2015-02-08 22:24) [27]ты вот это глянь: http://www.pic24.ru/doku.php/osa/articles/vga_game там видео есть. со звуком ;)
← →
Inovet © (2015-02-08 23:10) [28]> [27] Kilkennycat © (08.02.15 22:24)
> http://www.pic24.ru/doku.php/osa/articles/vga_game
Круто.
← →
Kilkennycat © (2015-02-09 00:13) [29]
> Inovet © (08.02.15 23:10) [28]
мне очень нравятся разработки Виктора Тимофеева, и как сделано, и стиль описания. Очень профессионально и оригинально.
← →
кгшзх © (2015-02-09 10:47) [30]http://www.youtube.com/watch?v=mBfovjFbNMU
← →
brother © (2015-02-09 11:07) [31]http://www.youtube.com/watch?feature=player_detailpage&v=ntYL_uKkblQ
круче
← →
brother © (2015-02-09 11:13) [32]и классика жанра
http://www.youtube.com/watch?v=B_Q6jMUdfYc
← →
Дмитрий С © (2015-02-09 11:26) [33]
> Kilkennycat ©
Я правильно понимаю, что такую мелодию на пьезопищялке не сыграть?
← →
Kilkennycat © (2015-02-09 13:37) [34]неправильно. что угодно можно сыграть, даже если пьезопищалка со встроенным генератором, меняя напряжение питания.
← →
Дмитрий С © (2015-02-09 16:53) [35]
> Kilkennycat ©
А как она может синусоиду выдать?
Windows.Beep(440) выдает на ноуте достаточно приятный слуху тон. Пьезопищалка - мерзкий, к тому же и не стабильный (возможно из-за ошибки в прошивке, я обычным ардуиновским tone проверял).
← →
Kilkennycat © (2015-02-09 17:08) [36]
> Дмитрий С © (09.02.15 16:53) [35]
пъезопищалка может выдать синусоиду легко, если она достаточно большая, и лежит между синусоидными штампами.
но в обычном своем применении она может выдавать некую электрическую силу при ее деформации, и обратно: деформироваться при приложении к ней некой электрической силы, создавая колебания воздуха. Колебания воздуха врядли синусоидальны.
теоретически, наверное, можно и без пресса выдать синусоиду, если пластина достаточно длинная - вызвать в ней резонанс.
> обычным ардуиновским tone
для меня это необычно.
вообще, сложно что-то советовать, не имея полной картины. Вот у меня есть и горсть пьезопищалок, и электромагнитных динамиков всякого типа. Для себя не вижу трудностей заменить одно на другое, или добавить к пьезопищалке некую корпус-камеру, улучшающую звук. Кроме того, для себя я не вижу необходимости что-то эмулировать на виндоусе, зная, что это совершенно не так будет на мк.
И я программирую почти нативно, поэтому ардуиновских заготовок не знаю.
Скажешь, что надо - скажу, как сделать.
← →
Дмитрий С © (2015-02-09 17:26) [37]
> Kilkennycat © (09.02.15 17:08) [36]
Я что-то вроде музыкальной шкатулки делаю. Мелодия + 3 RGB диода под музыку меняют цвета с коротким fade эффектом (а может и без него, если тормозить будет), а после мелодии - более плавный fade эффект (режим ночника).
Плату я уже распаял и проверил. Осталось сделать прошивку.
Я собираюсь делать так же без ардуиновских заготовок. С помощью таймеров и ШИМ-а.
← →
Дмитрий С © (2015-02-09 17:29) [38]
> Kilkennycat © (09.02.15 17:08) [36]
И планирую взять басс и скрипку из твоего примера. Заодно потренеруюсь. Вместо пищялки поставлю маленький динамик (из сломанной мобилы возьму) и фильтр как на схеме из примера.
← →
Дмитрий С © (2015-02-09 17:34) [39]Посоветуй, стоит ли припаять кварц и получить 16 MHz или 8и будет достаточно для этой задачи?
← →
brother © (2015-02-09 18:14) [40][37] хотелось бы посмотреть на готовый аппарат...
← →
Дмитрий С © (2015-02-09 18:17) [41]
> brother © (09.02.15 18:14) [40]
Как будет готово видео выложу.
← →
Kilkennycat © (2015-02-09 18:52) [42]
> стоит ли припаять кварц и получить 16 MHz или 8и будет достаточно
> для этой задачи?
для этой задачи хватило бы и внутреннего генератора, тут больше вопрос энергопотребления... если батарейное - старайся снизить частоту и избавляться от кварца.
в случае батарейки - светодиоды обязательно шимом, снизишь в десяток раз потребление, кроме того, теоретически светодиодик тогда можно напрямую на порт контроллера вешать (это зависит от светодиодика, конечно, от контроллера, ну и от уверенности, что не возникнет ситуации, когда все светодиодики зажгутся без шима).
по поводу пищалки: динамик, конечно, приятнее. но сожрет больше, что опять же, нежелательно при батарейном питании.
← →
Inovet © (2015-02-10 03:05) [43]> [35] Дмитрий С © (09.02.15 16:53)
> А как она может синусоиду
Настоящие джедаи пишут "Синусойда" и для полного пассворда добавлялют "джа", а особо продвинутые в искусствах ингаляций знают тайное слово "Растафари".
← →
Дмитрий С © (2015-02-10 23:19) [44]Пока что-то не выходит:(
Настроил таймер в режиме ШИМ на частоте примерно 15KHz (8 битный таймер в два прохода на частоте генератора 8MHz. 8000000/512=15625).
Повесил прерывание на переполнение счетчика этого самого таймера (выполняется раз в 512 тактов процессора), где обновляю регистр сравнения шима (1 раз за 8 срабатываний таймера):
tickCount ++;
OCR1A = sinCache[(tickCount >> 3) % sizeof(sinCache)]; // (tickCount div 8) mod sizeof(sinCache);
Где:
volatile byte sinCache[64];
for(int i =0; i<sizeof(sinCache); i++) {
sinCache[i] = 127 + round(127*sin(6.283 * 440 * i / 1962)); // sin(2*pi*440*i/1962). 1962=15625/8
}
Звук всеравно получается мерзский и даже рядом не стоит с частотой 440 Гц.
← →
Kilkennycat © (2015-02-10 23:40) [45]этот мк случайно не st7fox?
← →
Дмитрий С © (2015-02-10 23:48) [46]
> Kilkennycat © (10.02.15 23:40) [45]
Нет. Atmega328, извлеченная из ардуиноподобной платы.
← →
Kilkennycat © (2015-02-11 00:14) [47]странно, что не угадал, ведь так мало вариантов было...
а как ты думаешь, есть ли какая-нибудь разница между микроконтроллерами, их компиляторами, конфигурацией?
и в чем выражается мерзский и даже рядом не стоит с частотой 440 Гц.?
какую частоту выдает?
← →
Дмитрий С © (2015-02-11 00:40) [48]Точно не скажу, но намного выше. Ощушение, что на уши давит.
При это есть и более низкий звук с гуляющей частотой.
Я не настолько глубоко знаком с программированием мк. Я отключил все прерывания, кроме своего, и не использовал ардуиновские функции в его обработчике
Это то что было в моих силах:)
Поискал ещё в ютубе мелодии на ардуино. - почти везде обычный писк (включение/выключение пина с заданной частотой). В одном месте я увидел идею, которая может сработать: формировать напряжение не с помощью pwm, а с помощью 8 ног МК и кучи резисторов. В этом случае,я полагаю, можно значительно увеличить частоту дискретизации. Хотя я, конечно, не уверен что проблема в ней.
← →
Kilkennycat © (2015-02-11 00:47) [49]
> 8 ног МК и кучи резисторов
это примитивный цап
> Я не настолько глубоко знаком с программированием мк.
это понятно.
Но тут вся проблема, как и в вопросах по делфи: ты не даешь информацию.
в твоем случае помимо всего кода (включая заголовочные файлы, конфиги и инфа о компиляторе, включая режимы компиляции) еще и необходимо информировать об аппаратной реализации, может ты на порт повесил фиг знает какой кондюк и резюк, а может через мост сделал- никому неизвестно.
← →
RWolf © (2015-02-11 01:01) [50]Припаяйте какую-нибудь YM2149F и выгружайте в неё любую из статыщмильёнов спектрумовских чиптюнов.
← →
Inovet © (2015-02-11 01:20) [51]У тебя 15625 - это частота прерывайний? При этом ШИМ 8 бит? Тогда
15625 / 256 примерно 61 Гц. Откуда взялись 440?
← →
Kilkennycat © (2015-02-11 02:20) [52]
> Откуда взялись 440?
че-нить включил прескалерное. нет данных, бесполезно гадать. 3 режима пвм, какой юзает - неясно. 8 или 16 бит - только со слов, инициализации невидно. информацию ищет на ютубе...
← →
Дмитрий С © (2015-02-11 12:32) [53]Настало время рассказать подробнее.
Сейчас я хочу сделать двухголосную полифонию с поддержкой аккордов (т.к. они есть в выбранной мной мелодии).
Я действительно искал примеры в ютубе, чтобы быть уверенным, что это возможно сделать на моем МК.
МК у меня следующий: Atmega328P-PU с ардуиновским бутлоадером. IDE: тоже ардуино. Компилятор в ней GCC. Сторонних библиотек никаких нет.
Кварц я не припаивал, и с помощью fuse битов включил встроенный в микросхему генератор 8МГц. Сделал я это давно и уже не помню как.
Схема подключения такая: одна нога динамика припаяна к ноге PB4, другая через резистор 120 Ом (корич,красн,корич) к PB1 (т.к. на ней выход выбранного мной таймера и ШИМ-а). Так же к контактам динамика я припаял конденсатор 0,1 мкф (вот такой http://neoviservis.narod.ru/images/cap_k10_17_104.jpg ).
Динамик вытащил из дешевой нокии (он состоит из пленочки, катушки и магнита).
На ногу PB4 я подаю просто минус. На ногу PB1 - ШИМ-сингал.
Была идея вместо минуса в PB4 припаять к другому ШИМ выходу этого же таймера (PB2), чтобы увеличить разрядность потока на 1 бит и увеличить амплитуду колебаний, путем поочередного включения шимов. Но пока до нее не дошел.
Скетч следующий:
volatile unsigned long tickCount = 0;
volatile byte sinCache[1024];
void setup() {
Serial.begin(9600);
// http://www.jameco.com/Jameco/workshop/JamecoBuilds/arduinocircuit_fig12.jpg
pinMode(9, OUTPUT); // Режим ноги PB1 (так что для ШИМа)
pinMode(12, OUTPUT); // Режим ноги PB4
digitalWrite(12, 0); // Минус на PB4
for(int i=0; i<sizeof(sinCache); i++) {
sinCache[i] = 127 + round(127*sin(2 * 3.1415926 * 440 * i / 15700));
Serial.print(i);
Serial.print(" ");
Serial.println(sinCache[i]);
}
// Неинвертированный | Шим 8 бит http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh/mega103_38.htm
// и http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh/mega103_43.htm
TCCR1A = (1<<7) | (1<<0);
// http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh/mega103_39.htm
TCCR1B = (1 << 0); // Без делителя частоты
SREG |= (1<<7); // Глобальное разрешение прерываний.
TIMSK1 = (1<<TOIE1); // Разрешить прерывание по переполнению Т1. (остальные выключены)
// Для диагностики, значения не имеет:
unsigned long predTickCount = tickCount;
while(1) {
Serial.print(OCR1A);
Serial.print(" ");
Serial.print(tickCount);
Serial.print(" ");
Serial.println(tickCount - predTickCount);
predTickCount = tickCount;
delay(1000);
}
}
ISR(TIMER1_OVF_vect) {
tickCount ++;
// http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh/mega103_43.htm
OCR1A = sinCache[(tickCount) % sizeof(sinCache)];
}
void loop() {
}
Записать результат смогу вечером.
> Inovet © (11.02.15 01:20) [51]
> У тебя 15625 - это частота прерывайний? При этом ШИМ 8 бит?
> Тогда
> 15625 / 256 примерно 61 Гц. Откуда взялись 440?
15625 раз в секунду таймер успевает дойти с 0 до 255 и затем до 0.
440 образуется путем формирования синусоиды с помощью изменения ширины ШИМ-а.
← →
Kilkennycat © (2015-02-11 13:19) [54]
> Схема подключения такая: одна нога динамика припаяна к ноге
> PB4, другая через резистор 120 Ом (корич,красн,корич) к
> PB1 (т.к. на ней выход выбранного мной таймера и ШИМ-а).
> Так же к контактам динамика я припаял конденсатор 0,1 мкф
то есть, если напутаешь с начальным состоянием порта мк, достигаешь тока в 40 миллиампер. Скоро пойдешь покупать новый проц.
← →
RWolf © (2015-02-11 13:40) [55]Ну, то есть, частота ШИМ 15625/2 = 7.8125 кГц?
Чтобы получить оценку верхней границы частот сигнала, делим ещё на 4. Грязноватый звук выйдет.
← →
Дмитрий С © (2015-02-11 13:42) [56]
> то есть, если напутаешь с начальным состоянием порта мк,
> достигаешь тока в 40 миллиампер. Скоро пойдешь покупать
> новый проц.
Вряд-ли. Во-первых динамик тоже имеет сопротивление, хоть и незначительное. Во-вторых, отлаживаюсь я на 3,3 В, а в итоге работать будет от 4,5 В (три батарейки по 1,5 В). Поэтому ток не превысит 40 мА и всегда будет являться допустимым.
← →
Inovet © (2015-02-11 13:43) [57]Т.е. ты исходил из предположения о сопротивлении динамика больше килоома, что-то мне кажется, что его сопротивление несколько десятков Ом, 32 Ома например. Про увеличение разрядности на 1 бит не понял, тем более не понял про увеличение амплитуды. Ладно. У тебя динамик воспроизводит эти твои 15625 Гц с соответсвующими артефактами. ФНЧ надо ниже настроить, да и усилитель надо бы сделать, хоть на одном транзисторе.
← →
Дмитрий С © (2015-02-11 13:47) [58]
> Ну, то есть, частота ШИМ 15625/2 = 7.8125 кГц?
> Чтобы получить оценку верхней границы частот сигнала, делим
> ещё на 4. Грязноватый звук выйдет.
Почему на два делить?
15625, а по факту получается 15700, это грубо говоря количество минимумов на рисунке:
http://www.gaw.ru/im/_micros/avr/arh/34.gif
т.е. это и есть частота шима.
Можно по подробнее по поводу "делим еще на 4"?
← →
Дмитрий С © (2015-02-11 13:51) [59]
> Inovet © (11.02.15 13:43) [57]
Я исходил из пункта "Во-вторых" из [56].
3,3 В / 120 Ом = 27,5 мА (при допустимых 50)
4,5 В / 120 Ом = 37,5 мА (при допустимых чуть более 40)
Что значит "ФНЧ надо ниже настроить" ?
Усилитель сделаю, как получу нормальный звук без него.
← →
Inovet © (2015-02-11 13:53) [60]> [59] Дмитрий С © (11.02.15 13:51)
> Что значит "ФНЧ надо ниже настроить" ?
Ты кондесатор тот на 0,1 мкФ от фонаря впаял?
> [59] Дмитрий С © (11.02.15 13:51)
> Усилитель сделаю, как получу нормальный звук без него.
Утром деньги, вечером стулья.
← →
Inovet © (2015-02-11 13:55) [61]Это если предположить, что в программе всё правильно сделано, и на вышоде действительно шим той синусоиды на 440 Гц, а не фигня какая-нибудь.
← →
RWolf © (2015-02-11 13:59) [62]
> Почему на два делить?15625, а по факту получается 15700,
Всё верно, я уже прочитал выше.
> Можно по подробнее по поводу "делим еще на 4"?
Ну, меня так учили: настраивай ФНЧ на четверть частоты ШИМ, чтобы полезный сигнал в звоне не тонул.
← →
Дмитрий С © (2015-02-11 14:05) [63]По-поводу увеличения битности и амплитуды вот мои соображения:
Мы имеем два 8-битных ШИМ выхода, подключаем к ним динамик, назовем их А и Б.
Далее формируем 9-битный сигнал: от -255 до 255. Пусть значение сигнала в рассматриваемый момент времени t: S(t).
Динамик расположен так, что его диафрагма двигается вверх и вниз.
Рассмотрим несколько ситуаций:
1. S(t) = 0. На ноги А и Б одновременно подается 0 или 1. Диафрагма находится в нейтральном положении.
2. S(t) = 200 (т.е. >0). На ногу Б подается 0, на ногу А - ШИМ сигнал 200/255. Диафрагма находится выше нейтрального положения на 200/255 от предельного.
3. S(t) = -200 (т.е. <0). На ногу А подается 0, на ногу Б - ШИМ сигнал 200/255.
Диафрагма находится ниже нейтрального положения на 200/255 от предельного.
------------------------
Пока писал, пришел в голову другой вариант с одним ШИМ-ом. Положим, что нога А - ШИМ, а Б - обычная 0/1.
Рассмотрим несколько ситуаций:
1. S(t) = 0. На ноги А и Б одновременно подается 0 или 1. Диафрагма находится в нейтральном положении.
2. S(t) = 200 (т.е. >0). На А - ШИМ сигнал 200/255, на Б - 0. Диафрагма находится выше нейтрального положения на 200/255 от предельного.
3. S(t) = -200 (т.е. <0). На А - ШИМ (255-200)/255, на ногу Б - 1. Диафрагма находится ниже нейтрального положения на 200/255 от предельного.
В итоге получаем, что диафрагма динамика перемещается не от 0 до 1, а от -1 до 1 (амплитуда увеличена в два раза), а сигнал получился 9 битный (-255 до 255).
← →
Kilkennycat © (2015-02-11 14:09) [64]
> Поэтому ток не превысит 40 мА и всегда будет являться допустимым.
неверно.
во-первых, даже при 3.3 в. ток более 20 ма.
при 4.5 ты приблизился к максимальному значению потребления.
Напомню, что максимальное вовсе не равно номинальному.
ну и реализация моста на двух ногах... в момент переключения может выйти кака.
← →
Дмитрий С © (2015-02-11 14:10) [65]
> Ты кондесатор тот на 0,1 мкФ от фонаря впаял?
Практически.
А вообще отсюда http://www.pic24.ru/doku.php/osa/ref/appendix/quartet
> Ну, меня так учили
Я правильно понял, частота дискретизации самого звука минимум в 4 раза меньше чем частота ШИМ-а должна быть?
На виндовом waveOut я проверил, что частоты дискретизации самого звука 1,96 кГц мне хватит, поэтому у меня даже с запасом.
var
WF: tWAVEFORMATEX;
WaveOutHandle: HWAVEOUT;
i: Integer;
Buf: array[0..3*8000-1] of byte;
H: TWaveHdr;
begin
wf.cbSize := SizeOf(wf);
wf.wFormatTag:=WAVE_FORMAT_PCM;
wf.nChannels := 1; //1 канала
wf.wBitsPerSample := 8; //8 бит
wf.nBlockAlign:=(wf.nChannels * wf.wBitsPerSample) div 8;
wf.nSamplesPerSec := 1960; //1,96 кГц
wf.nAvgBytesPerSec := wf.nSamplesPerSec * wf.nBlockAlign;
Winapi.Windows.Beep(880, 2000);
for I := 0 to Length(Buf) - 1 do
begin
if I < 8000 then
Buf[I] := ( 127 + Round(127 * ( Sin(2 * Pi * I * 880 / wf.nSamplesPerSec) )))
else
if I < 16000 then
Buf[I] := ( 127 + Round(127 * ( Sin(2 * Pi * I * 440 / wf.nSamplesPerSec) )))
else
Buf[I] := ( 127 + Round(127 * ( Sin(2 * Pi * I * 440 / wf.nSamplesPerSec) + Sin(2 * Pi * I * 880 / wf.nSamplesPerSec) )/2));
end;
ZeroMemory(@H, SizeOf(H));
H.lpData := PAnsiChar(@Buf);
H.dwBufferLength := SizeOf(Buf);
H.dwBytesRecorded := 0;
H.dwFlags := WHDR_INQUEUE;
H.dwLoops := 10;
waveOutOpen(@WaveOutHandle, WAVE_MAPPER, @wf, 0, 0, WAVE_ALLOWSYNC or CALLBACK_NULL);
waveOutPrepareHeader(WaveOutHandle, @H, sizeof(H));
waveOutWrite(WaveOutHandle, @H,sizeof(H));
waveOutReStart(WaveOutHandle);
end;
← →
Дмитрий С © (2015-02-11 14:14) [66]
> неверно.
> во-первых, даже при 3.3 в. ток более 20 ма.
> при 4.5 ты приблизился к максимальному значению потребления.
>
> Напомню, что максимальное вовсе не равно номинальному.
> ну и реализация моста на двух ногах...
> в момент переключения
> > может выйти кака.
Там в любом случае ШИМ сигнал - даже за пределами этого тока - маловероятно что МК испортится. И при 3.3 V допустимый ток - 50 мА - это из описания МК.
А до "каки" еще дойти нужно:) Учитывая что выходы на одном порту будут, то переключатся они будут одновременно практически. Не знаю, правда, как конденсатору будет от этого:) Но, повторюсь, до этого еще дойти нужно.
← →
Inovet © (2015-02-11 14:16) [67]> [65] Дмитрий С © (11.02.15 14:10)
> Практически.
> А вообще отсюда
Ну так там сколько написано? 78 кГц, а у тебя 15 кГц.
← →
Дмитрий С © (2015-02-11 14:17) [68]
> Ну так там сколько написано? 78 кГц, а у тебя 15 кГц.
Если хочешь помочь - помоги, а это я и сам вижу :(
← →
Inovet © (2015-02-11 14:24) [69]> [68] Дмитрий С © (11.02.15 14:17)
На 78 уже сам динамик добавит фильтрации, потому что не воспроизведёт такую частоту и будет усреднять. А 15 воспроизведёт достаточно хорошо, надо фильтровать сильнее, увеличь ёмкость конденсатора до 0,5 мкФ.
← →
Дмитрий С © (2015-02-11 14:32) [70]Пока у меня идея: увеличить частоту ШИМа.
И следующие идеи:
1. Сделать формирования ШИМ-сигнала вручную с периодом 128, вместо 512, тем самым увеличить частоту в 4 раза, до примерно 62 кГц. Пожертвовав 1-им битом звуковой полосы.
2. Впаять кварц на 16 или 20 МГц. Для 8-битного шима, получаем: 20MHz/256 = 78 КГц - уже лучше.
Интересно: а можно переключаться *на ходу* между внешним кварцем и внутренним генератором?
← →
Kilkennycat © (2015-02-11 14:45) [71]
> Там в любом случае ШИМ сигнал - даже за пределами этого
> тока - маловероятно что МК испортится. И при 3.3 V допустимый
> ток - 50 мА
не в любом случае. есть три случая, когда его там не будет. в момент включения, при сбое-зависании и при ошибке.
и там не допустимый, а максимальный. работа на максимальном ни чем не гарантированна, попадется один мк - проработает долго, другой - сдохнет сразу.
и где ты увидел в даташите 50? там 40. И ты говорил, что 3.3 - это отладка, а работа при 4.5, как-то странно, обычно отлаживают-тестируют в рабочем или более экстремальном режиме, но никак наоборот
> а можно переключаться *на ходу* между внешним кварцем и
> внутренним генератором?
читай даташит. там все есть.
← →
RWolf © (2015-02-11 15:24) [72]
> Дмитрий С © (11.02.15 14:32) [70]
> Пока у меня идея: увеличить частоту ШИМа. И следующие идеи:
> кварц на 16 или 20 МГц.
есть специальные меги с встроенным умножителем частоты ШИМ.
← →
Kilkennycat © (2015-02-11 16:13) [73]
> 2. Впаять кварц на 16 или 20 МГц. Для 8-битного шима, получаем:
> 20MHz/256 = 78 КГц - уже лучше.
я могу на твоей атмеге при внутреннем генераторе 8 МГц получить шим максимально 4 МГц... просто почитал даташит. еще и занижать придется.
> 20MHz/256 = 78 КГц - уже лучше.
формула неверна. в даташите иной расчет.
← →
Дмитрий С © (2015-02-11 16:35) [74]
> я могу на твоей атмеге при внутреннем генераторе 8 МГц получить
> шим максимально 4 МГц... просто почитал даташит. еще и занижать
> придется.
Так я хочу программный шим сделать. Перевести таймер в обычный режим. А в прерывании на достижении таймером определенного значения обновлять настройки таймера так, чтобы получить шим длиной 128 тактов, вместо 512, который является минимальным аппаратным.
Хотя, конечно, в крайних положениях обработчику не хватит времени выполниться.
Выходит что этот МК неспособен сделать то что я от него хочу?
← →
RWolf © (2015-02-11 16:40) [75]Чем Fast PWM не угодил?
← →
Дмитрий С © (2015-02-11 16:55) [76]
> RWolf © (11.02.15 16:40) [75]
Начал искать что это такое и нашел клевую статью, как раз на похожую тему.
http://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-shim.html
Спасибо.
P.S. Кто-нить знает места в Москве, куда можно придти поработать с этим всем и где будет оборудование (паяльник, осциллограф) и возможно советчик:)
← →
Kilkennycat © (2015-02-11 17:53) [77]
> Так я хочу программный шим сделать.
зачем? есть замечательный аппаратный, и не один, можно полифонию забабахать. меньшими усилиями. а ты хочешь программный.... развивая идею дальше, тебе и мк не нужен будет - несколько резисторов, счетчик ИД, одна ЛА3 и операционный усилитель.
← →
RWolf © (2015-02-11 17:57) [78]
> [77]
Есть замечательные аппаратные музыкальные процессоры за сущие копейки. Вся эта возня с шимами не стоит домашнего применения; я понимаю, если в серийном приборе — там надо экономить.
← →
Дмитрий С © (2015-02-11 18:49) [79]
> Kilkennycat © (11.02.15 17:53) [77]
У аппаратного частота слишком маленькая.
> RWolf © (11.02.15 17:57) [78]
Ну уже поздно, устройство уже собрано. А идея "забабахать" полифонию пришла уже после того как я его собрал.
← →
Kilkennycat © (2015-02-11 20:17) [80]
> У аппаратного частота слишком маленькая.
вовсе нет... ты просто не чувствуешь.
сам подумай - чем обусловлено наличие аппаратного шима? неужели разработчики занизили его б частотную характеристику, к коему нет никаких предпосылок, в угоду чему либо? размышляй объективно, что разработчики мк несколько сильнее тебя и меня вместе взятых (и это так), и невозможность извлечь правильный звук, это не их косяк, а наш.
попробуй осознать шим, что это не только частота, т.е. отношение периода к единице, но и скважность и длительность, что существует множество режимов шим, которые позволяют моделировать в какой-то степени и ам и чм модуляцию, там такие звуки можно извлекать, что просто жуть. Вся фишка именно в осознании того, как это работает.
в противном случае проще потратить 3*N+1 резисторов и собрать примитивный Цап и гнать 8(16)-битный wav
← →
Inovet © (2015-02-11 20:32) [81]> [80] Kilkennycat © (11.02.15 20:17)
> 8(16)-битный wav
на 16 надо резисторы точные и остальное тоже.
← →
Kilkennycat © (2015-02-11 20:35) [82]
> Inovet © (11.02.15 20:32) [81]
ну, разрядность на точность не скоро влиять начинает, если погрешность резисторов не успевает перекрываться. можно и 5%, если допустимы высокие сопротивления
← →
Inovet © (2015-02-11 20:36) [83]берём километр провода отрезаем кусок 0,01 м, припаеваем, потом 0,02 м, припаеваем и заканчиваем куском 655,36 м. С частотой только проблемы возникнут.
← →
Inovet © (2015-02-11 20:38) [84]> [82] Kilkennycat © (11.02.15 20:35)
> можно и 5%
Ну можно и одинаковых кусков нарезать, но с точностью 0,001%.
← →
Inovet © (2015-02-11 21:09) [85]Удалено модератором
← →
Дмитрий С © (2015-02-12 13:32) [86]Вчера удалось получить частоту ШИМ-а в 80 KHz в режиме Fast PWM, путем большого количества проб. И я почитал даташит, на удивление, понятный для меня документ.
В результате, даже были намеки на тот звук который я хочу получить. Правда всего 6,6 бита, если посчитать. На выходных приедет осциллограф - думаю с ним отладка веселее пойдет.
← →
Дмитрий С © (2015-02-14 21:50) [87]Вроде получил нормальный звук, но очень тихий. Ребят, подскажите, как сделать простой усилитель на транзисторе?
← →
Kilkennycat © (2015-02-14 23:57) [88]ГУГЛ
← →
Дмитрий С © (2015-02-15 13:00) [89]
> Kilkennycat © (14.02.15 23:57) [88]
Тоже верно, но одних знаний недостаточно, нужен и опыт еще.
В общем собрал я простой усилитель + еще воткнул между базой транзистора и землей конденсатор на 10 микрофарад - звук стал намного лучше. Я думаю придется его подбирать.
Теперь вот большой вопрос, а как две частоты соединять? Т.е. есть два сигнала, как получить из совмещенный?
← →
Kilkennycat © (2015-02-15 13:34) [90]гугл микшер
← →
RWolf © (2015-02-15 18:18) [91]что с чем мешать? в этом аппарате два шима, что ли?
← →
Inovet © (2015-02-15 18:58) [92]> [91] RWolf © (15.02.15 18:18)
> в этом аппарате два шима, что ли?
Видать, не осилил программное смешивание.
← →
Дмитрий С © (2015-02-15 18:58) [93]
> RWolf © (15.02.15 18:18) [91]
Нет, шим1. Программно смешать две частоты.
Есть 8-битный звуковой синусовидный сигнал (всегда положительный) частотой 440 Гц. Функция S1(x) возвращает значение этого сигнала, где X - шаг дискретизации.
Соответственно S1(x) может принимать значения от 0 до 255.
Есть аналогичный сигнал, но частотой, к примеру, 523 Гц, его функция S2(x).
И есть 8-битный регистр OUT, куда я кладу значение сигнала (суммарного) каждый шаг дискретизации.
С одним сигналом (одной частотой) все получилось в порядке: получается достаточного качественный звук (приемлемый для меня, с учетом усилителя и фильтра).
А вот с двумя вообще не понятно как их суммировать.
В выбранной мной мелодии есть аккорды и в сумме требуется до 4 сигналов одновременно играть.
Средним арифметическим что ли? В этом случае меня смущает то, что один сигнал будет в 4 раза тише играть, пока остальные молчат.
На данный момент я добился следующих показателей:
Скорость 8-битного ШИМ-а 31250 Гц. (можно увеличить за счет разрядности шима).
Частота дискретизации 7812 Гц. (можно увеличить до примерно 15 кГц).
← →
Kilkennycat © (2015-02-15 19:07) [94]а я бы просто взял ARM Cortex M3 и забабахал бы мп3 проигрывание. За один день.
← →
Inovet © (2015-02-15 19:10) [95]> [93] Дмитрий С © (15.02.15 18:58)
> что один сигнал будет в 4 раза тише играть, пока остальные молчат.
А должн так же что ли? т.е. звучат четыре ноты или вообще иструмента все вместе с максимальным уровнем, затем три замолкают и внезапно оставшаяся начинает звучать громче, как все четыре вместе до этого. Интересный подход. Имей ввиду, что изменения уровня звука слух воспримет совсем не так, как ты думаешь.
← →
Inovet © (2015-02-15 19:14) [96]И насчёт смешивания. Просто складывай их и всё, только в записи нот кроме номера ноты и длительности надо ещё сохранять уровень, или хотя бы на каждую партию общий для всех нот.
← →
Дмитрий С © (2015-02-15 19:20) [97]
> Inovet © (15.02.15 19:14) [96]
Т.е. складывать и делить на их количество, правильно?
Я проанализировал проект квартета, ранее упомянутого в ветке. Там похоже так и делается.
← →
Inovet © (2015-02-15 19:24) [98]> [97] Дмитрий С © (15.02.15 19:20)
> Т.е. складывать и делить на их количество, правильно?
На ходу я бы не стал делить, лучше бы заранее при отладке, или как тут этот процесс уже назвать - сведении, ага, один раз всё сдалал чтобы оно нормально звучало, а при воспроизведении только складывал.
← →
Kilkennycat © (2015-02-15 19:25) [99]
> Т.е. складывать и делить на их количество, правильно?
ты понимаешь разницу между скважностью, длительностью и амплитудой? смешивание двух частот не изменяет амплитуду, с чего предположение, что инструмент будет звучать тише?
← →
Inovet © (2015-02-15 19:28) [100]> [99] Kilkennycat © (15.02.15 19:25)
Да всё правильно он говорит - тише будет, должен, а не будет, так вылезет в переполнение. А ШИМ там или другой вид модуляции - дело второе.
← →
Дмитрий С © (2015-02-16 10:54) [101]
> Kilkennycat © (15.02.15 19:25) [99]
Оставим пока модуляцию, для начала нужно решить что именно модулировать.
Вот графики функций, описывающих 440 Гц и 523 Гц (100 делений по Х в секунду).
Соответственно синим и зеленым.
Оранжевым - их сумма. Наглядно видно, что сумма выходит за рамки [-1; 1] и не сложно установить, что ее рамки [-2; 2]. Но канал у нас [-1; 1], и соответственно результат надо в него как-то вписать.
http://yotx.ru/#!1/2_h/sH@1v7Rgzhf23/aH/zYv9i34gh/K/t/wPhGztgABC8BwaBDra3Dg529w/2STTsxs4p4/F0i/G4dXmxu/8PhG/sgAFA8B74bOdie@vgYHf/YJ9Ew24cMB63Lk4Zjwe7@/9A@MYOGAAE74FBoIPtrYODXeg/EL6xAwYAwXvgs52L7a2Dg939g30SDbuxc3bGeNzaumQ8biF29wEH
Остается два варианта:
А) делить на 2.
Б) найти другой способ суммирования.
Твои предложения?
← →
Дмитрий С © (2015-02-16 11:31) [102]Среднее арифметическое мне кажется самым хорошим вариантом.
Но возникают вопросы:
А если частот будет 4 или 50 и какие то из них будут сильными, а какие то нет, + их сила будет меняться со временем, то на сколько делить?
← →
Дмитрий С © (2015-02-16 12:57) [103]Послушав какие бывают мелодии и придя к выводу, что слишком затяну время и результат будет так себе. Я решил пойти по пути примерно> Kilkennycat © (15.02.15 19:07) [94].
Припаяю что-нибудь вроде http://amperka.ru/product/df-player-mp3-module , а через ADC буду уже "ловить" звук и подсвечивать цветы своей композиции.
Осталось только с динамиком определиться :)
Всем большое спасибо за терпение и советы!
← →
Kilkennycat © (2015-02-17 00:08) [104]
> Дмитрий С © (16.02.15 12:57) [103]
собственно, я к такому пути пришел, сравнив стоимость контроллера и времени, затрачиваемого на попытку сбацать что-то дохленьким, что может сделать более крутой...
но есть одно но: такие попытки нехило обучают и часто возникает необходимость, когда все-таки надо именно дохленьким, например, я их купил сотню штук, не пропадать же добру :)
← →
KSergey © (2015-02-17 09:22) [105]> Дмитрий С © (05.02.15 18:30)
> Кто-нибудь встречал преобразователь Midi файла (одной из его дорожек) в код из beep и sleep ?
А вот это выделенное - сразу было в вопросе?
если да - то позор мне, не заметил ключевого момента
← →
brother © (2015-02-17 11:14) [106]да, тк редактировать сообщения пользователю после отправки нельзя...
← →
Дмитрий С © (2015-04-30 13:51) [107]В общем забил я на полифонию. Сделал обычным бипом.
Получилось вот что:
http://www.youtube.com/watch?v=aV42lAC04v4
← →
RWolf © (2015-04-30 13:58) [108]Как-то тихо совсем, поближе микрофон переставь, что ли.
И что за неведомые проблемы с полифонией, после такого-то обсуждения?
← →
Дмитрий С © (2015-04-30 14:33) [109]
> RWolf © (30.04.15 13:58) [108]
Я не добился приемлемого качества за отведенное время. По мне так 8 МГц не хватает для полифонии.
← →
Inovet © (2015-04-30 14:51) [110]> [109] Дмитрий С © (30.04.15 14:33)
> По мне так 8 МГц не хватает для полифонии.
И как только раньше на всяких 4 МГц i8086, уж не говоря про i8080, Z80 и т.п., исхитрялись делать...
← →
Inovet © (2015-04-30 14:54) [111]> [107] Дмитрий С © (30.04.15 13:51)
> Получилось вот что:
Это что ли "Катюша" в джазовой обработке?
← →
RWolf © (2015-04-30 15:05) [112]
> [109]
В одной моей поделке на атмеге 14 Мгц три голоса играют не напрягаясь. Можно было бы и ещё добавить.
← →
Дмитрий С © (2015-04-30 17:31) [113]
> И как только раньше на всяких 4 МГц i8086, уж не говоря
> про i8080, Z80 и т.п., исхитрялись делать...
Может там отдельный звуковой генератор какой-то был?
Предположим 8 битный звук.
Где-то в ветке читал, что желательно, чтобы PWM успел 4 раза досчитать до конца.
256 * 4 = 1024 такта. При частота дискретизации 8000Hz, получаем 8192000 такта в секунду. Четырех МГц явно не должно хватать. Хотя на 8и можно и еще поиграться. Но это потом, в свободное время.
> В одной моей поделке на атмеге 14 Мгц три голоса играют
> не напрягаясь.
Не затруднит код показать? Интересно как сделал.
← →
RWolf © (2015-04-30 19:50) [114]
> [113]
Код закрытый, но тут все принципы уже обсудили: прерывания по таймеру с частотой 28 кГц, нота пропускается через таблицу синусов, таблицы громкостей, получается текущее значение звукового давления в канале. Повторить для всех каналов, смешать результаты, обновить управляющий регистр ШИМ.
Страницы: 1 2 3 вся ветка
Форум: "Прочее";
Текущий архив: 2015.12.20;
Скачать: [xml.tar.bz2];
Память: 0.8 MB
Время: 0.004 c