| Приставки > Железо |
| О наболевшем - Звук - техническая реализация!!! |
| (1/3) > >> |
| ajak:
Привет всем. Выручайте!!! 1)Не понимаю техническую реализацию звуковых чипов. Как самое простое - возьму денди. В журнале – Ремонт и Обслуживание, а в частности - Игровые Приставки, написано, что для создания звука используются 2 канала с прямоугольной формой, 1 треугольный, 1 сигнал шума. Я не понимаю, как из этого получаются звуки, а именно ноты различного звучания, и эфеекты. А в сеге даже глосса – пример Рестлинг. Что, при смешивании всех этих каналов получаются нота? Или как? Это что, базис какой-то. Ну как RGB панель, при смешивании которой получаются разные цвета. Так что, и в звуке чтоли? 2)Ещё тут читал доки, по сеге и наткнулся на такую вещь. И не пойму, какая в них разница. В сеге есть музыкальный синтезатор и программируемый звуковой генератор. В чём их разница? И есть ли они в дендике? 3)Этот вопрос не такой важный, можно на него не отвечать, но, всё таки, кто хочет, пускай ответит. Он относиться конкретно к программированию. Допустим я сэмулирую z80, и мне нужно передать эти данные своему реальному звуковому генератору, т.е. мой настоящей звуковой карте, как это сделать? Какие у неё адреса, порты? Как в ней порыться низкоуровнево? Где-нить написано? API DirectX не предлагать. Альтернативы, плиз. Как быть, если на какой-то машине установлена редкая карточка(а не AC97 или как она там), или у них есть определенный базис тоже, как у видео карты, в которой зашиты ASCII символы к примеру? 4)В институте, мы проходили ряды, ну естественно, скоро я узнал, что любой звук можно разложить в косинусы и синусы различной частоты и амплитуды, и при смешивании (читай объединении, суммировании) получиться звук. До знакомства с денди я думал, что только так создаётся звук. Думал, что там стоит дюжина генераторов синусов и косинусов, так процесс и идёт. А тут в доках я читаю, что какие-то пилообразные, прямоугольные, треугольные, и т.д. генераторы используются. У меня такой склад ума, что я хочу понять, почему так, а не иначе, почему именно эти формы сигналов и никакие не другие, и как до этого додумались. К примеру сигнал овальный. Спасибо. |
| Rumata:
ajak, стоп. Нет смысла задавать 33 вопроса одновременно. Вряд ли возможно получить внятный ответ. Давай сосредоточимся на главном вопросе, а в детали будем вникать по мере необходимости Добавлено позже: Пока попытаюсь подогнать немного теории При воспроизведении звука есть два варианта: запись и синтез. В первом случае - грамофон, патефон, магнитофон... CD, DVD. Во втором - синтезатор, MIDI, wavetable |
| sergi:
Я тоже разбираюсь в этой хрени сейчас Возьмем к примеру Yamaha 2610: 4 канала FM-синтеза - как я понимаю это сигнал который выдается путем наложения синусоид разных частот - только правда не впер - это значит 4 синусуиды? 7 каналов ADMPC - это короче как я понял цифровой выход (не понял 7 контактов чтоли) с которого звук идет в ЦАП, при этом сам по себе звук фактически wav только пожатый в 4 раза - используется для сжатия голосовых данных - сжатие за счет того, что в отличии от wav что не абсолютные значения, а только их изменения, при этом очень плохо соответственно прамоугольники получаются 3 канала PSG - ну это как у денди, только тоже не понял какие именно: прямоугольник, пила и синусоида? 1 канал noise - как мне объяснили это фактически аналоговый сигнал, который примешивается к основному чтобы сгладить неровности, он раднумный, т.е. реально вносит просто небольшие искажения Ну и кто чего скажет? :? |
| Rumata:
--- Цитата: sergi ---Ну и кто чего скажет? --- Конец цитаты --- Я скажу Не следует плодить сущности без необходимости В теме задан вопрос, достаточно объемный, нет смысла добавлять свои. Лучше создать отдельную тему, а ещё лучше проследить за развитием этой Ну и уж если ты влез в подробности, надеюсь, с даташитами сам справишься :D |
| ajak:
Ну для этого я и пометил их циферками. Главный - номер 1. Не очень важный - 2. И вообще не важный - 3. Добавлено позже: --- Цитата ---ajak, стоп. Нет смысла задавать 33 вопроса одновременно. --- Конец цитаты --- Не знаю, просто накопилось. :blush: Решил выговориться. :unsure: Добавлено позже: --- Цитата ---Пока попытаюсь подогнать немного теории --- Конец цитаты --- Спасибо большое Rumata :) Добавлено позже: --- Цитата ---Лучше создать отдельную тему, а ещё лучше проследить за развитием этой --- Конец цитаты --- Мне кажеться, это верно, гляди и всплывут твои вопросы. |
| sergi:
На первый могу ответить как я это понимаю В приставках стоит синтезатор, обычно даже от Yamaha - в сеге тоже он стоит только 2612 у него всего 10 каналов, по памяти помоему нет вообще ADMPC, зато FM-синтез 6 каналов, но тоже черт его разберешь Обычно синтезатор у приставок имеет всроеный ЦАП, т.е. фактически из микрухи выходят 2 контакта и там звук У нео-гео ЦАП внешний, но там все заточено и схемы выверенные, поэтому это не важно Синтезатором рулит отдельных звуковой проц, обычно тоже Z80 юзают для этого в нео-гео короче M68К только говорит что именно играть, а уже код написанный для звуков M.ROM уже сам там разводит что именно и откуда Дальше пока не знаю, но это принцип многих приставок, при чем как я понял движок для звука можно не придумывать, т.к. их много стандартных уже придумано и даже для них декодеры существуют Ну и как мне знакомый музыкант объяснил - можно wav конвертить в FM-синтез, в PSG запросто, даже проги есть, а там уже движок выбираешь - но пока реально не работал с этим, но активно инфу подбиваю Даташиты очень помогают, т.к. написаны на простом и доступном каждому японском языке иероглифами :) |
| ajak:
Да, кстати, извините за оффтоп, но у меня 3 музыкальных образования, это на будущее, что я хоть кое-что, да знаю в этом деле. :) |
| sergi:
Тем легче жить на этом свете :lol: Реально смотря какая приставка конечно интересует Но реально даже на денди можно голос модулировать треугольничками и прямоугольничками - все от желания зависит Или напрямую синтезатором самому музыку играть по нотам и потом уже готорое давать приставке - так походу игры и делались, возможно правда было спец программное обеспечение для этого формата звука, но думаю его можно подобрать Короче - синтезатор нужно знать как работает ;) |
| ajak:
И тишина ... :( Наверное слишком сложный вопрос задал :-\ |
| sergi:
Чем мои ответы не удовлетворили интерес? 0_0 |
| HardWareMan:
Оякс, если ты мужЫкант, то должен знать, как формируется звук. Мы не будет обсуждать преобразование электрического эквивалента звука в реальный, физический через усилитель и акустическую систему, а рассмотрим только его электрическую "реинкорнацию". Есть 2 важных параметра: частота и амплитуда. Думаю, не надо объяснять тебе эти 2 параметра, изучаемые во всех музыкальных школах. Но в электрическом варианте они означают то же самое: частота колебаний электрического тока (которые потом АС преобразуют в колебания частиц воздуха) и амплитуда колебаний (т.е. громкость). 1. PSG. Это тональный генератор прямоугольной формы сигнала. Каждый канал PSG может вырабатывать только одну частоту в одно и то же время. Если задать ему, например, частоту 440Гц, то получим тон Ля первой вроде октавы (та же частота у камертона, извините, но я музыкалок не кончал). А вот амплитуда по напряжению будет задавать громкость этого звука. 2. FM. Это уже частотный синтезатор. Их бывают множество, так что все и не перечислишь. Но основное правило вывести можно. Смотри, каждый канал FM синтезатора имеет несколько тональных генераторов (если у PSG генератор вырабатывал прямоугольный сигнал, то у FM каждый генератор вырабатывает синус). Можно использовать от одного до всех доступных в разных сочетаниях. У сеговского YM2612 на каждый канал есть 4 таких генератора (т.н. Операторы). Если на одном генераторе выставить, скажем, частоту ноты До первой октавы, а к нему примешать суммированием частоты еще 2х генераторов, расстроенных в + и - соответственно на полтона, то получаем фактически звук рояля (помнишь, там по 3 струны на каждую клавишу?). А если задать алгоритм такой, что один генератор на низкой частоте (1-10Гц) будет по своему синусу изменять частоту (не амплитуду!) другого генератора (скажем в пределах +-50Гц), то получаем трель. ну и т.д., алгоритмов смешивания функций каждого генератора в YM2612 8 (0-7) и почитать о них можно в соответствующей доке. Так же, у FM есть Envelope Generator, т.е. генератор огибающей. Он влияет только на результирующую громкость канала, формируя атаку, удержание и затухание. Эти термины ты тоже должен знать. В общем, принцип формирования звука в FM очень похож на реальные инструменты (особенно струнные). 3. WT. Т.е. табличный или сэмплерный метод. Здесь все просто - записываем каждого звука по сэмплу (в идеале надо писать по каждой ноте, но прикинь, скока это будет весить, если записать рояль? поэтому пишут 1-3, чтобы перекрыть некоторый диапазон и просто выводят сэмпл с разной скоростью, чтиобы получить нужную ноту). Вывод такой: PSG способен только "гудеть", но при наличии хотя бы 3х каналов опытные музыканты делают шедевры (направление ChipTune). FM - самый "богатый" на звук и количество разнообразия звука, но в одно и то же время самый сложный при имитации реальных инструментов. Некоторые инструменты не возможно сымитировать FM в принципе. WT - самый достоверный синтез, но бедный, ибо чем больше звуков в него пихаешь - тем болше ресурсов он требует. |
| Rumata:
--- Цитата: ajak ---И тишина ... --- Конец цитаты --- Ну не все же в рабочее время в интернете сидят :) Wave Table предполагает наличие ЦАП и зараннее записаных звуковых фрагментов - сэмплов. Обычно считается, что при табличном синтезе качество наивысшее. Но это не совсем так. Если сэмпл оцифрован 16 бит / 44 кГц, то качество будет как на CD. Но можно в целях экономии места оцифровать и 8 бит / 11 кГц, так что сам метод не является гарантией высокого качества. Кроме того, сэмпл - не просто нота, а некий более широкий фрагмент, скажем, аккорд, что и позволяет предать звучание конкретного инструмента или исполнителя. Частотный синтезатор, как правило, имеет в своем составе генератор белого шума. Кстати, ударные синтезируются так же очень легко |
| HardWareMan:
Генератор белого шума есть и в PSG и в FM, чтобы придать оттенки получаемым звукам или имитировать те же ударные (в основном тарелки). Ударные представляют собой затухающие колебания одной-двух частот с очень резкой атакой и резким затуханием без удержания. Регулируюя крутизну затухания и основную частоту можно получить весь спектр - от басс бочки до том-томов. Так что их повторить проще всего. |
| ajak:
Посоветуйте книжки печатные издания или электронные по этой очень интересной теме. Много всего нового узнал.:debile: :debile: :debile: Спасибо большое. Вы лучшие. :thumbup: |
| Rumata:
С книжками сложно однако. Есть вот у меня толковая книжка по синтезу речи, только она 1985 года издания. Попытайся помучить Яндекс. К примеру - http://slovari.yandex.ru/dict/informatica/article//info/info-497.htm Конечно, на большую глубину не претендует, но всё же |
| ajak:
А по поводу других вопрос ответите? :blush: |
| Rumata:
Ты их ещё не задал :) |
| ajak:
:lol: Не, тама вопрос под номерм 3 ещё есть. ;) |
| ajak:
3)Этот вопрос не такой важный, можно на него не отвечать, но, всё таки, кто хочет, пускай ответит. Он относиться конкретно к программированию. Допустим я сэмулирую z80, и мне нужно передать эти данные своему реальному звуковому генератору, т.е. мой настоящей звуковой карте, как это сделать? Какие у неё адреса, порты? Как в ней порыться низкоуровнево? Где-нить написано? API DirectX не предлагать. Альтернативы, плиз. Как быть, если на какой-то машине установлена редкая карточка(а не AC97 или как она там), или у них есть определенный базис тоже, как у видео карты, в которой зашиты ASCII символы к примеру? :blush: |
| HardWareMan:
Для SB-совестимых звуковушек я делал так: --- Код: ---;Пример программы, проигрывающей файл C:\WINDOWS\MEDIA\TADA.WAV ;на звуковой плате при помощи DMA FILESPEC equ "01.wav" ;Воспроизводимый файл SBPORT equ 220h ;Адрес SB SBIRQ equ 7 .model tiny .code .186 org 100h start: call dsp_reset jnc cont ret cont: mov byte ptr cs:state,0 mov bl,0D1h call dsp_write call open_file call hook_sbirq mov bl,40h call dsp_write mov bl,0D2h ;0D2h call dsp_write call program_dma push dx mov ah,9 mov dx,offset messagestrt int 21h pop dx mov al,byte ptr cs:state mov byte ptr cs:stat,al push dx mov ah,9 mov dx,offset countb int 21h mov ax,word ptr cs:bytes mov al,ah call outhex mov ax,word ptr cs:bytes call outhex mov ah,9 mov dx,offset counte int 21h pop dx mainlp:mov al,byte ptr finished_flag cmp al,128 je mainen mov al,byte ptr cs:state cmp byte ptr cs:stat,al je mainlp mov byte ptr cs:stat,al push dx mov ah,9 mov dx,offset countb int 21h mov ax,word ptr cs:bytes mov al,ah call outhex mov ax,word ptr cs:bytes call outhex mov ah,9 mov dx,offset counte int 21h mov dx,word ptr bytes inc dx mov word ptr bytes,dx pop dx push ds mov bx,40h mov ds,bx mov bx,17h mov al,byte ptr ds:[bx] pop ds and al,3h jz mainlp mov dx,offset messageend jmp exit mainen:mov dx,offset messagefin exit: mov ah,9 int 21h call restore_sbirq mov bl,0D3h call dsp_write mov bl,0D0h call dsp_write mov bl,0DAh call dsp_write mov bl,0D0h call dsp_write int 20h ret ;Переменные old_sbirq dd ? finished_flag db 0 filename db FILESPEC,0 bytes dw 0 stat db 0 countb db 0Dh, "Воспроизведение блока номер $" counte db "H.$" messagestrt db "Воспроизведение. Для остановки нажмите любой SHIFT." db 0Dh, 0Ah, '$' messageend db 0Dh, 0Ah, "Прервано пользователем.", 0Dh, 0Ah, '$' messagefin db 0Dh, 0Ah, "Кончилось.", 0Dh, 0Ah, '$' ;Обработчик прерывания звуковой карты ;Устанавливает флаг finished_flag в 128 если кончился файл sbirq_handler proc far pusha mov al,20h out 20h,al mov dx,SBPORT+0Eh in al,dx mov ax,word ptr cs:file mov bx,ax mov ah,3Fh mov cx,4000h push ds mov dx,ds and dx,0F000h mov al,byte ptr cs:state or al,al jnz second first: add dx,1000h mov ds,dx mov dx,0 int 21h pop ds jc close cmp ax,0 je close mov byte ptr cs:state,255 popa iret second:add dx,1400h mov ds,dx mov dx,0 int 21h pop ds jc close cmp ax,0 je close mov byte ptr cs:state,0 popa iret close: mov byte ptr cs:finished_flag,128 popa iret state db 0 file dw 0 sbirq_handler endp ;Процедура outhex ;Выводит al в HEX виде outhex proc near push ax shr al,4 and al,15 cmp al,10 jc out0 add al,7 out0: add al,48 mov byte ptr txt,al pop ax and al,15 cmp al,10 jc out1 add al,7 out1: add al,48 mov byte ptr txt+1,al push dx mov ah,9 mov dx,offset txt int 21h pop dx ret txt db 0,0,'$' outhex endp ;Процедура dsp_reset ;Сброс и инициализация DSP dsp_reset proc near mov dx,SBPORT+6 mov al,1 out dx,al mov cx,40 dsp_loop: in al,dx loop dsp_loop mov al,0 out dx,al add dx,8 mov cx,100 check_port:in al,dx and al,80h jz not_ready sub dx,4 in al,dx add dx,4 cmp al,0AAh je good_reset not_ready: loop check_port stc ret good_reset:clc ret dsp_reset endp ;Процедура dsp_write ;Посылает байт из BL в DSP dsp_write proc near mov dx,SBPORT+0Ch write_loop:in al,dx and al,80h jnz write_loop mov al,bl out dx,al ret dsp_write endp ;Процедура hook_sbirq ;Перехватывает прерывание звуковой карты и разрешает его hook_sbirq proc near mov ax,3508h+SBIRQ int 21h mov word ptr old_sbirq,bx mov word ptr old_sbirq+2,es mov ax,2508h+SBIRQ mov dx,offset sbirq_handler int 21h mov cl,1 shl cl,SBIRQ not cl in al,21h and al,cl out 21h,al ret hook_sbirq endp ;Процедура restore_sbirq ;Восстанавливает обработчик и запрещает прерывание restore_sbirq proc near mov ax,3508h+SBIRQ lds dx,dword ptr old_sbirq int 21h mov cl,1 shl cl,SBIRQ in al,21h or al,cl out 21h,al ret restore_sbirq endp ;Процедура open_file ;Открывает файл и заполняет буфер open_file proc near mov ax,3D00h mov dx,offset filename int 21h jc error_exit mov word ptr cs:file,ax mov bx,ax mov ax,4200h mov cx,0 mov dx,38h int 21h mov ah,3Fh mov cx,8000h push ds mov dx,ds and dx,0F000h add dx,1000h mov ds,dx mov dx,0 int 21h pop ds ret error_exit: mov ah,9 mov dx,offset not_open_msg int 21h int 20h ;Сообщение об ошибке not_open_msg db "Ошибка при открытии файла",0Dh,0Ah,'$' open_file endp ;Процедура program_dma ;Настраивает 1 канал DMA program_dma proc near mov al,5 out 0Ah,al xor al,al out 0Ch,al mov al,59h ;Для авто = 59h out 0Bh,al push cs pop dx and dh,0F0h add dh,10h xor ax,ax out 02h,al out 02h,al mov al,dh shr al,4 out 83h,al mov ax,8000h dec ax out 03h,al mov al,ah out 03h,al mov al,1 out 0Ah,al mov bl,48h call dsp_write mov bx,4000h dec bx call dsp_write mov bl,bh call dsp_write mov bl,01Ch call dsp_write ret program_dma endp end start --- Конец кода --- Файл - непожатая WAVка. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |