Вход

Просмотр полной версии : AY:воспроизведение WAV-файла



goblinish
05.08.2012, 20:12
а есть ли собственно алгоритм вывода и способ обработки звука?
гляжу на старую дему, фиг пойми, как получали файл.

newart
05.08.2012, 20:26
Дык - http://zxpress.ru/articles_list.php?tag=13

goblinish
05.08.2012, 20:48
Дык - http://zxpress.ru/articles_list.php?tag=13
Дык...
http://zxpress.ru/article.php?id=11332

не работает:mad:
один только шум,в архиве WAV.

device zxspectrum128
ORG #61a8;8000
begin

DI
LD HL,wavs;Адрес
LD DE,37692;Длина
LD BC,#FFFD
LD A,8;Канал ;8 - A,9 - B,10 - C
OUT (C),A
_OUT1:
LD B,#BF ;_OUT1
LD A,(HL)
OUT (C),A
LD B,#40;Задержка ;от 1 до 255
DJNZ $
INC HL
DEC DE
LD A,D
OR E
JR NZ,_OUT1
stu: jr stu
EI
RET
;-----------------------------старая процедура------------------
LD BC ,$FFFD
LD A ,$07
OUT (C) , A
LD B ,$BF
LD A ,$3E
OUT (C) , A
LD B ,$FF
LD A ,$08
OUT (C) , A
LD B ,$BF
LD HL,wavs;$8000
DI

LC019:
LD A,(HL);C019
INC HL
OUT (C) , A
LD D ,$11
LC01F:
DEC D;C01F
JP NZ ,LC01F

LD A ,H
CP $e0
JP NZ ,LC019

EI
RET

wavs incbin "67780.wav"
end
display /d,end-begin
savesna "test.sna",begin

newart
05.08.2012, 21:03
Faultless #03 это слишком!

---------- Post added at 21:03 ---------- Previous post was at 21:00 ----------

Для начала переведи wav в 8bit моно (в любом PC едиторе), после чего отреж заголовок файла, далее в Excess Sound Editor (ZX) переведи в 4 бита (там спец табличка юзается ) и дальше уже пуляй в порт AY.

scl^mc
05.08.2012, 21:06
насчет воспроизведения оцифровок еще можно у griv'a поинтересоваться

moroz1999
05.08.2012, 21:06
Faultless #03 это слишком!

---------- Post added at 21:03 ---------- Previous post was at 21:00 ----------

Для начала переведи wav в 8bit моно (в любом PC едиторе), после чего отреж заголовок файлаbtw, Sound Forge умеет сохранять в RAW-формате без заголовков.

goblinish
05.08.2012, 21:51
сохранять в RAW-формате без заголовков.
заголовки не нужны, да и с описанием заголовка отрезать Wav можно.

самое странное в старой оцифровке - это как мы делали, на винде фиг знает в какой проге записан голос DWM/ZC - "Фак ю, ублюдки!" привет из прошлого, короче(
и что потом с записью было, я напрочь забыл, дема выпущена.
залез в дему Bye-Bye, но воспроизведение - просто тоска, и неясно, где создана.

утро вечером мудренее, короче, спать пора.

psb
05.08.2012, 22:05
надо найти в журналах эту табличку, которая из 8бит переводит в 4 бита для ау и законвертить. и все. а потом не забыть статью с вики закинуть;)

goblinish
06.08.2012, 05:51
гляньте на результат Media Info:


General
Complete name : C:\sjasm\67780.wav
Format : Wave
File size : 36.8 KiB
Duration : 4s 624ms
Overall bit rate : 65.2 Kbps

Audio
ID : 0
Format : ADPCM
Format settings, Endianness : Little
Codec ID : 11
Codec ID/Hint : Intel
Duration : 4s 624ms
Bit rate mode : Constant
Bit rate : 64.0 Kbps
Channel(s) : 1 channel
Sampling rate : 16.0 KHz
Bit depth : 4 bits
Stream size : 36.8 KiB (100%)

4 бита есть, стерео - нет.разве что заново проделать манипуляции?

goblinish
06.08.2012, 07:09
Вот такое ширпотреб вместо сэмпла.:v2_dizzy_facepalm:

теперь разобрался, другие сэмплы нормально играют, на EXCESS есть примеры. заморочка, видимо, в кодеке WAV-файла.

Vitamin
06.08.2012, 07:25
4 бита есть, стерео - нет.разве что заново проделать манипуляции?
Сколько, по-твоему, занимает один семпл в данном файле?

goblinish
06.08.2012, 07:46
Сколько, по-твоему, занимает один семпл в данном файле?
сейчас 10 килобайт, когда прототип готов. вопрос в генерации "на лету"
вот такой образчик, интересно, будет ли он играть?

null_device
06.08.2012, 07:57
будет ли он играть?

Фигня, какая-то в выходном файле. Скрежет один (так и задумано?). Только что конвертнул рандомную вавку в sound forge, перенес в образ, открыл в ESE - все ок.
----
Можно исходный файл того что вы пытаетесь воспроизвести?

goblinish
06.08.2012, 08:16
Можно исходный файл того что вы пытаетесь воспроизвести?
воспроизвести что? приложение есть в начале, в сэмпле затык был с кодеком, сейчас вытащил без подготовки другой левый взятый wav - играет.
качество звука не интересует пока что.

Vitamin
06.08.2012, 10:02
сейчас 10 килобайт, когда прототип готов. вопрос в генерации "на лету"
вот такой образчик, интересно, будет ли он играть?
Ладно, не буду заставлять думать.

4-битные семплы обычно упакованы по 2 в одном байте.

Дмитрий
06.08.2012, 10:23
Format : ADPCM
Имхо, тебя не спасет, это формат с компрессией

Vitamin
06.08.2012, 10:46
Имхо, тебя не спасет, это формат с компрессией
Откуда инфа?

Дмитрий
06.08.2012, 10:59
Откуда инфа?
Тут есть инфа - http://support.microsoft.com/kb/89879/ru

Ну и тут еще немного - http://arcw.comptek.ru/telephony/tnotes/tt1-13.html

Принцип декодирования ADPCM:

ADPCM Decoding

Figure 2 shows a block diagram of the ADPCM decoding process. An ADPCM sample is presented to the decoder. The decoder computes the difference between the previous linear output estimate and the anticipated one. This difference is added to the previous estimate to produce the linear output estimate. The input ADPCM sample is also presented to the step size calculator to compute the step size estimate.

Figure 2

The decoder accepts ADPCM code values, L(n), and step size values. It calculates a reproduced differential value, and accumulates an estimated waveform value, X. Here is a pseudocode algorithm:

d(n) = (ss(n)*B2)+(ss(n)/2*B1)+(ss(n)/4*B0)+(ss(n)/8)
if (B3 = 1)
then d(n) = d(n) * (-1)
_ _
X(n) = X(n-1) + d(n)

Note: For the calculation of ss(n), see Calculation of Step Size.
Calculation of Step Size

For both the encoding and decoding process, the ADPCM algorithm adjusts the quantizer step size based on the most recent ADPCM value. The step size for the next sample, n+1, is calculated with the following equation:

ss(n+1) = ss(n) * 1.1M(L(n))

This equation can be implemented efficiently as a two-stage lookup table. First the magnitude of the ADPCM code is used as an index to look up an adjustment factor as shown in Table 1) . Then that adjustment factor is used to move an index pointer in Table 2. The index pointer then points to the new step size. Values greater than 3 will increase the step size. Values less than 4 decrease the step size.

Table 1 - M(L(n)) Values


L(n) Value M(L(n))
1111 or 0111 +8
1110 or 0110 +6
1101 or 0101 +4
1100 or 0100 +2
1011 or 0011 -1
1010 or 0010 -1
1001 or 0001 -1
1000 or 0000 -1


Table 2 - Calculated Step Sizes


No. Step Size No. Step Size No. Step Size No. Step Size
1 16 13 50 25 157 37 494
2 17 14 55 26 173 38 544
3 19 15 60 27 190 39 598
4 21 16 66 28 209 40 658
5 23 17 73 29 230 41 724
6 25 18 80 30 253 42 796
7 28 19 88 31 279 43 876
8 31 20 97 32 307 44 963
9 34 21 107 33 337 45 1060
10 37 22 118 34 371 46 1166
11 41 23 130 35 408 47 1282
12 45 24 143 36 449 48 1411
49 1552

This method of adapting the scale factor with changes in the waveform is optimized for voice signals, not square waves or other non-sinusoidal waveforms.

Initial Conditions

When the ADPCM algorithm is reset the step size ss(n) is set to the minimum value (16) and the estimated waveform value X is set to zero (half scale). Playback of 48 samples (24 bytes) of plus and minus zero (10002 and 00002) will reset the algorithm. Twenty four bytes of 08 Hex or 80 Hex will satisfy this requirement. It is necessary to alternate positive and negative zero values because the encoding formula always adds 1/8 of the quantization size. If all values were positive or negative, a DC component would be added that would create a false reference level.
В принципе ничего сложного, но врядли хватит спеку сил на лету это распаковать, хотя все зависит от частоты дискретизации.
GS-у и DMAUSC это под силу, а вот AY не уверен.

newart
06.08.2012, 11:53
В принципе ничего сложного, но врядли хватит спеку сил на лету это распаковать, хотя все зависит от частоты дискретизации.


http://zxpress.ru/article.php?id=1382


(есть исходник, играет по MCC примерно 20кГц
с распаковкой из 2bit!!!

Монстру я верю.

goblinish
06.08.2012, 13:03
Имхо, тебя не спасет, это формат с компрессией

хорошо, есть алгоритм,который дает звук без формата, тогда куда он спасет?

рассуждения не очень тащемта, но как получается вывод более чистый звука?

дальнейшее теории меня просто пугают.
http://countercomplex.blogspot.com/2011/10/algorithmic-symphonies-from-one-line-of.html

в ссылке, кстати, есть еще одна тема:
http://countercomplex.blogspot.com/2011/10/some-deep-analysis-of-one-line-music.html

но потом я нифига не понимаю( получается, что звук гонится в PCM, тогда вопрос - куда идти чтобы улучшить звук?

и в дальнейшем, другие алгоритмы генерации музыки ведут или к срачу, или к бестолковому трепу с теми, кому медведь на ухо наступил.

Дмитрий
06.08.2012, 13:12
Монстру я верю.
Я ему тоже верю, но где исходник-то?

---------- Post added at 12:12 ---------- Previous post was at 12:08 ----------


хорошо, есть алгоритм,который дает звук без формата, тогда куда он спасет?
Я имел в виду, что обычный WAV плейер не будет играть твой файл, сохраненный в ADPCM. Либо выдавливай из Монстера или Newart-а исходник, о котором говорится в приведенной выше Newart-ом статье.

Rindex
06.08.2012, 13:38
Берёте оригинал музыки, запихиваете его в AY-emul, там переводите его в WAV, далее загружаете его, например, в Sound Forge, а там на выходе делаете его в OGG. Всё, именно так оригинал и играет. В вафке да, звучание другое.

Andrew771
06.08.2012, 15:09
Берёте оригинал музыки, запихиваете его в AY-emul, там переводите его в WAV, далее загружаете его, например, в Sound Forge, а там на выходе делаете его в OGG. Всё, именно так оригинал и играет. В вафке да, звучание другое.
ты хоть знаешь, чем отличается wav от mp3 и ogg? :)

Rindex
06.08.2012, 15:38
ты хоть знаешь, чем отличается wav от mp3 и ogg?

Обьясни, если не трудно.

gobuka
06.08.2012, 15:43
ты хоть знаешь, чем отличается wav от mp3 и ogg?
Расширением файла, внутренней структурой, алгоритмом сжатия, способом проигрывания. Не?

gobuka
06.08.2012, 15:48
Вопрос: как воспроизвести WAV на аигрике. Ты знаешь, как проиграть WAV на аигрике?

NovaStorm
06.08.2012, 15:51
Ты знаешь, как проиграть WAV на аигрике?
Ну начнём с того, что wav - это RIFF контейнер, в котором может лежать и mp3 тоже...

psb
06.08.2012, 16:15
ТС, сделай простой тест. загрузи в sound forge нужный звук. законверть его в 8-бит моно. сохрани как RAW беззнаковый.

напиши программку, которая будет брать байт из этого файла, сдвигать его вправо на 4 бита (чтобы старшие 4 бита в итоге были =0) и выводить в регистр громкости ау. и это в цикле для каждого байта.

всё! услышишь звук - полдела сделано. чтобы было более лучше - надо найти табличку, по которой байт конвертится в 4 бита (не тупо сдвигом как здесь).

лол:) в zx-format 8 статья про это самое, даже с табличкой! угадайте, блин, чья:)))

GriV
07.08.2012, 15:02
Пользуйтесь поиском на форуме:
http://zx.pk.ru/showthread.php?t=13526
и списком рекомендуемых для ознакомления тем:
http://zx.pk.ru/showthread.php?t=5335

alone
08.08.2012, 11:47
Плеер по MCC (middle channel correction) есть в Basil Demo (в приложении к ZX-Guide 2.5 trash) и в Born Dead #0G.

Barmaley_m
09.08.2012, 23:20
Для начала надо точнее определиться с задачей и изучить, что такое wav-файлы, что такое цифровой звук и импульсно-кодовая модуляция (ИКМ). Без этого будет трудно даже понять предложенные здесь решения.

Навскидку, вот простая процедура воспроизведения куска цифровой записи звука на AY из памяти:



LD BC,#FFFD
LD A,7
OUT (C),A ;Выбрать регистр управления
LD A,#3F
LD B,#BF
OUT (C),A ;Отключить генерацию тона и шума на всех каналах
LD B,#FF
LD A,9
OUT (C),A ;Выбрать регистр громкости канала B
LD B,#BF
LD HL,sound_start
LD DE,sound_length
SOUNDLOOP:
LD A,(HL) ;7
OUT (C),A ;12
INC HL ;6
DEC DE ;6
LD A,D ;4
OR E ;4
JR NZ,SOUNDLOOP ;12/7

При этом каждый проход цикла выполняется за 51 такт, следовательно при тактовой частоте 3.5МГц за одну секунду цикл выполнится 68627 раз, то есть частота дискретизации будет равна 68627. Это слишком большая частота, которая ведет к нерациональному расходу памяти. Поэтому цикл надо замедлять, вставляя в него команды NOP, каждая из которых кушает 4 такта.

Я рекомендую использовать частоты дискретизации в районе 10кГц, что обеспечивает воспроизведение звуков с частотами до 5кГц при умеренном расходе памяти. Как только определится частота дискретизации, необходимо подготовить звуковой файл. Для этого:

1) загружаем его в любой звуковой редактор
2) передискретизируем его (Resample) на требуемую частоту дискретизации
3) выполняем другую обработку (фильтрацию, усиление). Нужно стремиться к возможно более полному использованию динамического диапазона, ведь у AY ЦАП имеет разрядность всего 4 бит. Есть смысл использовать компрессию динамического диапазона и усилить сигнал так, чтобы загнать его немного в насыщение (Clipping). Все равно шум квантования будет сильный, поэтому надо стремиться, чтобы сохранялся приемлемый баланс между шумом квантования и шумом от насыщения. Фильтрация звука необходима для того, чтобы убрать из него те частоты, которые не слышно или ими можно пожертвовать. Тем самым уменьшится энергия сигнала и его амплитуда, что позволит усилить его дополнительно без искажений от насыщения.

После обработки сохраняем файл в формат wav или raw (без заголовка) и без компрессии. Никаких MP3, никаких OGG, никаких ADPCM. Формат должен быть PCM, 8 или 16 бит.

Сохраненный файл необходимо обработать программой, которая удалит из него заголовок (если он есть) и сделает данные 4-битными. После этого его можно проигрывать программой, которую я привел выше.

Ну и настоятельно рекомендуется изучение основ цифровой обработки сигналов. Мою программу можно усовершенствовать, чтобы она более рационально использовала память. Ведь из каждых 8 бит памяти она использует только 4, таким образом можно будет повысить длительность проигрываемого файла в 2 раза! Но все равно будет мало. У Спектрума памяти слишком мало чтобы играть цифровой звук в записи сколько-нибудь долго. Несколько секунд - и все.

GriV
10.08.2012, 15:04
У Спектрума памяти слишком мало чтобы играть цифровой звук в записи сколько-нибудь долго. Несколько секунд - и все.
Это не так. Но слушать цифровую музыку со спекка - я понимаю - никто и не собирается. Речь, видимо, про звуковые эффекты.

GriV
10.08.2012, 19:37
в конце темы почитайте: http://zx.pk.ru/showthread.php?t=386

goblinish
14.08.2012, 19:40
вчитайтесь вы в тему. какие кодеки?:v2_dizzy_facepalm:
специально для товарищей прапорщиков:

существует алгоритм генерации музыки, код гонит файл в WAV,изначальный затык был в сжатом файле.
если кого интересует - пробуйте, читайте.

goblinish
10.10.2012, 17:38
Вернусь к теме, нашел на WoS Wav2AY-5.zip, найти не могу, дошли руки, попробовал Wav созданный с помощью алгоритма, вот и результат.

goblinish
10.10.2012, 20:32
файл тут:
http://dl.dropbox.com/u/33485444/Wav2AY-5.zip